跳至內容

如何複製或再製 Amazon RDS for SQL Server 的使用者登入權限?

2 分的閱讀內容
0

我想複製 Amazon Relational Database Service (Amazon RDS) for SQL Server 的使用者登入權限。

解決方法

建立預存程序

若要複製您的 RDS for SQL Server,您必須先在要複製使用者的環境中建立預存程序。

若要建立預存程序,請執行 MSSQL_RDS_Clone_Login 指令碼。如需詳細資訊,請參閱 GitHub 網站上的 MSSQL_RDS_Clone_Login 指令碼。您可以在任何不屬於 RDS for SQL Server 系統資料庫的使用者資料庫中建立預存程序。

除非執行指令碼的使用者具有授與這些權限的存取權,否則 MSSQL_RDS_Clone_Login 指令碼無法對新的登入進行變更。如果使用者沒有授與權限的存取權,則這些權限不會顯示在指令碼中。如果您沒有授與權限,且嘗試手動將這些權限新增至指令碼,則指令碼會失敗。

MSSQL_RDS_Clone_Login 指令碼會建立三個預存程序:

  • **DuplicateLogin:**此程序會根據您要複製來源的各個資料庫的登入權限,複製登入和資料庫使用者。
  • **GrantUserRoleMembership:**此程序會將資料庫使用者權限和角色複製到新使用者。
  • **DuplicateRDS:**此程序會整合 DuplicateLoginGrantUserRoleMembership 這兩個預存程序的結果。

執行預存程序

若要執行預存程序,請完成以下步驟:

  1. 開啟新的 Transact-SQL (TSQL) 視窗。

  2. 按下 CTRL+T,以確認結果為文字格式。

  3. 執行以下指令碼。
    SQL 登入:

    USE [DB_NAME]   
    EXEC    DuplicateRDS @NewLogin=[duplicate_login_name]  
        ,@NewLoginPwd = password  
        ,@LoginToDuplicate = primary_login  
        ,@WindowsLogin  = F  
        ,@DatabaseName=NULL

    **注意:**將 DB_NAME 替換為使用者資料庫名稱,將 duplicate_login_name 替換為您的登入名稱,並將 password 替換為您的密碼。
    Windows 登入:

    USE [DB_NAME]   
    EXEC    DuplicateRDS @NewLogin=[domain\duplicate_login_name]  
        ,@LoginToDuplicate = primary_login  
        ,@NewLoginPwd = NULL  
        ,@WindowsLogin  = T  
        ,@DatabaseName=NULL

    **注意:**將 DB_NAME 替換為使用者資料庫名稱,將 domain 替換為您的網域名稱,並將 duplicate_login_name 替換為您的登入名稱。

  4. 產生指令碼後,從 Results (結果) 索引標籤複製指令碼,然後在新的查詢視窗中執行。
    **注意:**指令碼執行後,您的 SQL Server 登入會產生與主要登入類似的伺服器層級和資料庫層級權限。

  5. 產生的登入不包含 Microsoft SQL Server Integration Services (SSIS) SSISDB 的 ssis_adminssis_logreader 權限。如果您需要這些權限,請執行以下命令:

    ALTER ROLE [ssis_admin] ADD MEMBER [mydomain\user_name]  
    ALTER ROLE [ssis_logreader] ADD MEMBER [mydomain\user_name]  
    GO

    **注意:**將 mydomain 替換為您的網域名稱,並將 user_name 替換為您的使用者名稱。由於預存程序使用暫存資料表,您可能會收到順序混亂的指令碼輸出。如果發生這種情況,請卸除並重新建立預存程序。

  6. 若要檢查孤立使用者,請執行以下指令碼:

    Use [DB_NAME] ;  
    GO   
    exec sp_change_users_login @Action='Report' ;  
    GO

    **注意:**將 DB_NAME 替換為使用者資料庫名稱。

  7. 若要卸除孤立使用者,請執行以下指令碼:

    Use [DB_NAME] ;  
    GO  
    exec sp_revokedbaccess 'username'  
    GO

    **注意:**將 DB_NAME 替換為使用者資料庫名稱,並將 username 替換為您的使用者名稱。

  8. 如果您在複製登入後不想保留這些預存程序,請執行以下指令碼:

    USE \[DB\_NAME\] ;  
    GO  
    DROP PROCEDURE \[dbo\].\[DuplicateRDS\]  
    GO  
    DROP PROCEDURE \[dbo\].\[DuplicateLogin\]  
    GO  
    DROP PROCEDURE \[dbo\].\[GrantUserRoleMembership\]  
    GO

    **注意:**將 DB_NAME 替換為使用者資料庫名稱。