跳至内容

如何复制或克隆我的 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. 生成的登录名不包含 ssis_adminssis_logreader 的 Microsoft SQL Server Integration Services (SSIS) SSISDB 权限。如果您需要这些权限,请运行以下命令:

    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 替换为用户数据库的名称。

AWS 官方已更新 8 个月前