跳至内容

如何恢复主用户对 Amazon RDS for SQL Server 实例的访问权限?

2 分钟阅读
0

我的 Amazon Relational Database Service (Amazon RDS) for SQL Server 实例的主用户失去了访问权限。或者,我想授予主用户访问其他用户创建的数据库的权限。

简短描述

要恢复主用户的权限,请修改 RDS 数据库实例并设置新的管理员用户密码。

当您创建新的数据库实例时,默认主用户会自动获得该数据库实例的特定权限。创建数据库实例后,您无法更改主用户的用户名。

**注意:**请勿将主用户用于应用程序数据库连接。请改为创建一个仅具有应用程序特定任务所需权限的登录名。

解决方法

注意:在本文中,主用户是指 Amazon RDS for SQL Server 实例的主要用户

主用户可能会失去连接数据库实例、访问特定数据库或执行特定操作的权限。根据您遇到的情况,完成以下部分中的步骤。

主用户无法连接到数据库实例

连接 SQL权限设置为显式拒绝时,主用户无法连接到数据库实例。默认情况下,Amazon RDS 系统管理员 (rdsa) 登录名会向主用户授予连接 SQL 的权限。但是,在微软 SQL Server 中,显式拒绝优先于显式授权

要解决此问题,请完成以下步骤:

  1. 找出将主用户连接 SQL 的权限设置为显式拒绝的用户,使用其登录凭证连接到 RDS for SQL Server 实例。
  2. 运行以下 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_denydatawriterdb_denydatareader 固定数据库角色中。即便主用户是 db_owner ** 角色的成员,显式拒绝**也会覆盖数据库上的 SELECT(选择)、INSERT(插入)、UPDATE(更新)和 DELETE(删除)权限。

要解决此问题,请完成以下步骤:

  1. 使用主密码登录 RDS for SQL Server 实例。
  2. 运行以下 T-SQL 命令,删除主用户的 db_denydatawriterdb_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)

AWS 官方已更新 7 个月前