我的 Amazon Relational Database Service (Amazon RDS) for SQL Server 实例的主用户失去了访问权限。或者,我想授予主用户访问其他用户创建的数据库的权限。
简短描述
要恢复主用户的权限,请修改 RDS 数据库实例并设置新的管理员用户密码。
当您创建新的数据库实例时,默认主用户会自动获得该数据库实例的特定权限。创建数据库实例后,您无法更改主用户的用户名。
**注意:**请勿将主用户用于应用程序数据库连接。请改为创建一个仅具有应用程序特定任务所需权限的登录名。
解决方法
注意:在本文中,主用户是指 Amazon RDS for SQL Server 实例的主要用户。
主用户可能会失去连接数据库实例、访问特定数据库或执行特定操作的权限。根据您遇到的情况,完成以下部分中的步骤。
主用户无法连接到数据库实例
当连接 SQL权限设置为显式拒绝时,主用户无法连接到数据库实例。默认情况下,Amazon RDS 系统管理员 (rdsa) 登录名会向主用户授予连接 SQL 的权限。但是,在微软 SQL Server 中,显式拒绝优先于显式授权。
要解决此问题,请完成以下步骤:
- 找出将主用户连接 SQL 的权限设置为显式拒绝的用户,使用其登录凭证连接到 RDS for SQL Server 实例。
- 运行以下 T-SQL 命令以撤消显式拒绝:
USE master;
GO
REVOKE CONNECT SQL TO master_user AS grantor_principal;
GO
**注意:**将 master_user 替换为您的 RDS 主用户登录名,将 grantor_principal 替换为您的主要授予人。
主用户无法访问特定数据库
以下是主用户无法访问特定数据库的原因:
- 该数据库由其他登录账户创建。主用户登录名没有数据库用户映射,也没有数据库权限。
- 管理员删除了映射到主用户登录名并具有有效权限的数据库用户。
要解决此问题,请重置主用户密码。这将创建一个映射到主用户登录名的数据库用户。或者,在受影响的数据库中为主用户登录名创建一个数据库用户,并向该用户授予 db_owner 权限。
当您仅重置主用户密码时,此操作不会导致停机。但是,如果您同时对数据库实例进行其他修改(例如更改实例类),则这些组合更改可能会导致停机。重置密码的 AWS Identify and Access Management (IAM) 用户必须有权对资源执行 ModifyDBInstance 操作。
更新主用户密码时,可以为主用户恢复以下内容:
- 系统权限
- 服务器级角色
- 服务器级权限
- 对系统存储过程的访问权限
- 对 RDS 特定存储过程的访问权限
主用户无法执行特定操作
主用户拥有数据库的 db_owner 角色权限,但无法执行某些操作,例如 CONNECT(连接)、SELECT(选择)、INSERT(插入)、UPDATE(更新)和 ALTER(更改)。当管理员在数据库上显式设置拒绝权限以覆盖 ** db\ _owner ** 角色权限时,就会发生这种情况。
运行以下 T-SQL 命令,以查看数据库角色列表以及哪些数据库用户是这些角色的成员:
USE DATABASE_NAME;
GO
SELECT DP1.name AS DatabaseRoleName,
isnull (DP2.name, 'No members') AS DatabaseUserName
FROM sys.database_role_members AS DRM
RIGHT OUTER JOIN sys.database_principals AS DP1
ON DRM.role_principal_id = DP1.principal_id
LEFT OUTER JOIN sys.database_principals AS DP2
ON DRM.member_principal_id = DP2.principal_id
WHERE DP1.type = 'R'
ORDER BY DP1.name;
**注意:**将 DATABASE_NAME 替换为您的数据库名称。
运行以下命令以获取用户在特定数据库中拥有的权限列表:
USE DATABASE_NAME;
GO
EXECUTE AS USER = 'master_user';
SELECT * FROM sys.fn_my_permissions(NULL, 'DATABASE');
GO
**注意:**将 master_user 替换为主用户,将 DATABASE_NAME 替换为您的数据库名称。
在前面的示例中,管理员将主用户添加到 db_denydatawriter 和 db_denydatareader 固定数据库角色中。即便主用户是 db_owner ** 角色的成员,显式拒绝**也会覆盖数据库上的 SELECT(选择)、INSERT(插入)、UPDATE(更新)和 DELETE(删除)权限。
要解决此问题,请完成以下步骤:
- 使用主密码登录 RDS for SQL Server 实例。
- 运行以下 T-SQL 命令,删除主用户的 db_denydatawriter 和 db_denydatareader 成员身份:
USE DATABASE_NAME;
GO
ALTER ROLE db_denydatawriter DROP MEMBER MASTER_USER;
ALTER ROLE db_denydatareader DROP MEMBER MASTER_USER;
GO
**注意:**将 DATABASE_NAME 替换为您的数据库名称,将 MASTER_USER 替换为主用户。
现在,主用户拥有数据库的 SELECT(选择)、INSERT(插入)、UPDATE(更新)和 DELETE(删除)权限。
相关信息
重置 Amazon RDS for SQL Server 主用户的 db_owner 角色成员资格
Microsoft SQL Server security(Microsoft SQL Server 安全性)
微软网站上的 DENY (Transact-SQL)