我想克隆我的 Amazon Relation Database (Amazon RDS) for Microsoft SQL Server 用户登录权限。我该如何操作?
解决方法
**注意:**除非运行该脚本的用户有权授予这些权限,否则此脚本不会对新登录名进行任何更改。如果用户没有权限授予权限,则权限不会出现在脚本中。这是因为用于访问脚本的登录名没有查看权限。此外,如果您在没有授予权限的情况下尝试手动添加权限脚本,则脚本会失败。
1. 复制并运行 mssql_rds_clone_Login 脚本,以便在想要复制用户的环境中创建存储程序。稍后,您可以使用此存储过程创建用户登录、数据库用户、服务器级别和数据库级别权限的副本。
您可以在 Amazon RDS for SQL Server 系统数据库之外的任何用户数据库中创建存储过程。根据您的用例,将 [DB_NAME] 替换为用户数据库的名称。
以下脚本将创建三个存储过程:
- **DuplicateLogin:**复制登录名,并在包含从其中复制登录权限的数据库中复制这些登录名的数据库用户。
- **GrantUserRoleMembership:**将数据库用户的权限和角色复制给新用户。
- **DuplicateRDS:**整合 DuplicateLogin 和 GrantUserRoleMembership 存储过程的结果。
2. 创建存储过程后,打开一个新的 TSQL 窗口并使用以下格式运行存储过程。
**注意:**在运行脚本之前,请确保结果为文本格式,方法是按键盘上的 CTRL+T。
--SQL login
EXEC DuplicateRDS @NewLogin=[<duplicate_login_name>]
,@NewLoginPwd = password
,@LoginToDuplicate = master_login
, @WindowsLogin = F
,@DatabaseName=NULL
-- Windows login
EXEC DuplicateRDS @NewLogin=[<domain\duplicate_login_name>]
,@LoginToDuplicate = master_login
,@NewLoginPwd = NULL
, @WindowsLogin = T
,@DatabaseName=NULL
3. 生成脚本后,复制 Results(结果)选项卡中的脚本并在新的查询窗口中运行此脚本。运行脚本后,将会生成 SQL Server 登录名以及与您的主登录名相似的服务器和数据库级别权限。
**注意:**本示例不包括 ssis_admin 和 ssis_logreader 的 SSISDB 权限。如果您需要这些权限,请单独提供。
ALTER ROLE [ssis_admin] ADD MEMBER [mydomain\user_name]
ALTER ROLE [ssis_logreader] ADD MEMBER [mydomain\user_name]
GO
**注意:**由于存储过程中使用了临时表,脚本输出可能会无序。如果出现这种情况,请删除存储过程,然后再重新创建以使其转换为正确的格式。
4. 如果您有孤立用户,请运行以下脚本。此脚本将会为数据库中的孤立用户检查失败脚本是否会删除这些孤立用户。
以下脚本检查是否存在孤立用户:
Use [DB_NAME] ;
GO
exec sp_change_users_login @Action='Report' ;
GO
以下脚本将会删除孤立用户:
Use [DB_NAME] ;
GO
exec sp_revokedbaccess 'username'
GO
5. 如果您不想在复制登录名后保留存储过程(例如,出于合规性考虑),请运行以下脚本:
USE [DB_NAME]
GO
DROP PROCEDURE [dbo].[DuplicateRDS]
GO
DROP PROCEDURE [dbo].[DuplicateLogin]
GO
DROP PROCEDURE [dbo].[GrantUserRoleMembership]
GO