# 備份還原MS-SQL Database後無法登入 ###### tags: `Microsoft` `SQL` `MSSQL` ```graphviz digraph { node [color=black, fontname=Arial, shape=record] com1 [label="{<f0>Computer 1|<f1>Database 1}"]; com2 [label="{<f0>Computer 2|<f1>Database 2}"]; com1->"備份"->"還原"->com2 } ``` ## 方法一、把 Computer 1 的 Database 1 的 usr1 帳號刪除,然後重建帳號,然後重新設定各個物件應該有的屬性。 ## 方法二、執行[sp_change_users_login](https://docs.microsoft.com/zh-tw/sql/relational-databases/system-stored-procedures/sp-change-users-login-transact-sql?view=sql-server-ver15) :::info :bulb: **注意** 未來的 Microsoft SQL Server 版本將移除這項功能。。 ::: ```sql= USE XXDB; GO sp_change_users_login @Action [ ,@UserNamePattern ,@LoginName ,@Password ] GO ``` * `@Action` 描述此程序所要執行的動作 * `Auto_Fix`:將目前資料庫中 sys.database_principals 系統目錄檢視的使用者項目連結到相同名稱的 SQL Server 登入。 * `@UserNamePattern` 目前資料庫中的使用者名稱 * `@LoginName` SQL Server 登入的名稱 * `@Password` 指派給藉由指定 Auto_Fix 所建立之新 SQL Server 登入的密碼 ### 1. 顯示目前使用者與登入對應的報表 ```sql= EXEC sp_change_users_login 'Report'; ``` ### 2. 將資料庫使用者對應至新的 SQL Server 登入 ```sql= --Create the new login. CREATE LOGIN MaryB WITH PASSWORD = '982734snfdHHkjj3'; GO --Map database user MB-Sales to login MaryB. USE AdventureWorks2012; GO EXEC sp_change_users_login 'Update_One', 'MB-Sales', 'MaryB'; GO ``` ### 3. 自動將使用者對應至登入,視需要建立新的登入 ```sql= USE AdventureWorks2012; GO EXEC sp_change_users_login 'Auto_Fix', 'Mary', NULL, 'B3r12-3x$098f6'; GO ``` ## 方法三、執行[ALTER USER](https://docs.microsoft.com/zh-tw/sql/t-sql/statements/alter-user-transact-sql?view=sql-server-ver15) ```sql= ALTER USER userName WITH <set_item> [ ,...n ] [;] <set_item> ::= NAME = newUserName | DEFAULT_SCHEMA = { schemaName | NULL } | LOGIN = loginName | PASSWORD = 'password' [ OLD_PASSWORD = 'oldpassword' ] | DEFAULT_LANGUAGE = { NONE | <lcid> | <language name> | <language alias> } | ALLOW_ENCRYPTED_VALUE_MODIFICATIONS = [ ON | OFF ] ``` * `userName` 指定在這個資料庫內用來識別使用者的名稱。 * `LOGIN = loginName` 將使用者的安全性識別碼 (SID) 變更為符合登入的 SID,以便將使用者重新對應到另一個登入。 * `NAME = newUserName` 指定新的名稱給這個使用者。 newUserName 不可已存在目前資料庫中。 * `DEFAULT_SCHEMA = { schemaName | NULL }` 指定當伺服器解析這個使用者的物件名稱時,將搜尋的第一個結構描述。 當預設結構描述設為 NULL 時,會從 Windows 群組移除預設結構描述。 NULL 選項不可用於 Windows 使用者。 * `PASSWORD = 'password'` 適用於:SQL Server 2012 (11.x) 及更新版本、SQL Database。 ### 1. 變更資料庫使用者的名稱 ```sql= ALTER USER Mary5 WITH NAME = Mary51; ``` ### 2. 變更使用者的預設結構描述 ```sql= ALTER USER Mary51 WITH DEFAULT_SCHEMA = Purchasing; ``` ### 3. 一次變更數個選項 **適用對象**:SQL Server 2012 (11.x) 及更新版本。 ```sql= ALTER USER Philip WITH NAME = Philipe , DEFAULT_SCHEMA = Development , PASSWORD = 'W1r77TT98%ab@#' OLD_PASSWORD = 'New Devel0per' , DEFAULT_LANGUAGE= French ; GO ``` ### 4. 更正不相符的 SID ```sql= ALTER USER Mai WITH LOGIN = Mai; GO ```