為什麼我的 RDS for SQL Server 執行個體的主要使用者失去存取權,我要如何重新取得?

2 分的閱讀內容
0

我的 Amazon Relational Database Service (Amazon RDS) for SQL Server 執行個體的主要使用者失去存取權。或者,我需要授與主要使用者存取由另一個使用者建立的資料庫。我要怎麼做才能還原存取權,或授與存取權給我的主要使用者?

簡短描述

當您建立新的資料庫執行個體時,預設主要使用者會自動接收該資料庫執行個體的特定權限。建立資料庫執行個體後,您無法變更主要使用者名稱。

**注意:**最佳實務是不要直接在應用程式中使用主要使用者。請改用以應用程式所需的最低權限建立的資料庫使用者。

如果您不小心刪除了主要使用者的許可,可以透過修改資料庫執行個體並設定新的主要使用者密碼來還原。如需詳細資訊,請參閱主要使用者帳戶權限

解決方案

以下是可能導致主要使用者失去存取權,無法連線至資料庫執行個體的常見案例。或者,主要使用者可能無法連線和存取特定的使用者資料庫。

案例 1:主要使用者因為明確 DENY 而無法連線至資料庫執行個體

主要使用者可能無法連線至資料庫執行個體,因為在 Connect SQL 權限上設定了明確 DENY。Amazon RDS 系統管理員 (rdsa) 登入預設會授與主要使用者 Connect SQL 權限。然而在 Microsoft SQL Server 中,明確 DENY 的優先順序高於明確 GRANT

若要修正此問題,請執行下列動作:

1.    使用在 Connect SQL 放置明確 DENY 供主要使用者登入之授與者的登入,連線至 RDS for SQL Server

2.    使用下列 T-SQL 命令撤銷明確 DENY。在下列範例中,RDS 主要使用者登入為 master_user,而授與者主體為 grantor_principal。將這些值變更以符合您的使用案例。

USE [master];
GO
REVOKE CONNECT SQL TO [master_user] AS [grantor_principal];
GO

案例 2:主要使用者無法連線至特定資料庫,因為它未對應至資料庫中的使用者

這可能會發生在下列情況:

  • 資料庫由另一個登入帳戶建立。此外,主要使用者登入並未對應至資料庫中的資料庫使用者,而且將權限授與資料庫。
  • 先前使用適當許可對應至主要使用者登入的資料庫使用者已明確刪除。

若要解決此問題,請重設主要使用者密碼。重設密碼會建立對應至主要使用者登入的資料庫使用者 (如果該使用者遭到刪除)。它也會將 db_owner 固定資料庫角色授與使用者。如需重設主要使用者密碼的說明,請參閱如何重設我的 Amazon RDS 資料庫執行個體的主要使用者密碼?

**注意:**重設密碼的 AWS Identify and Access Management (IAM) 使用者必須擁有對 RDS 資源執行 ModifyDBInstance 操作的許可。

更新主要使用者密碼會執行下列操作:

  • 授與主要使用者 db_owner 資料庫層級角色給其他使用者所建立的資料庫。
  • 將系統權限還原給主要使用者。
  • 將伺服器層級角色還原給主要使用者。
  • 將伺服器層級許可還原給主要使用者。
  • 將系統預存程序的存取權還原給主要使用者。
  • 將 RDS 特定預存程序的存取權還原給主要使用者。

案例 3:主要使用者無法執行某些動作

主要使用者對資料庫具有 db_owner 角色許可,但無法執行某些動作,例如 CONNECT、SELECT、INSERT、UPDATE、ALTER 等。當對應至主要使用者登入的資料庫使用者明確拒絕資料庫的特定許可時,可能會發生這種情況。

若要查看資料庫角色清單,以及哪些資料庫使用者是這些角色的成員,請執行下列 T-SQL 命令。在以下內容中,請使用適合您使用案例的正確值來取代 database_name

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

在此範例中,主要使用者會新增至 db_denydatawriterdb_denydatareader 固定資料庫角色。雖然是 db_owner 固定資料庫角色的成員,db_denydatawriterdb_denydatareader 的拒絕權限會禁止資料庫上的 SELECT、INSERT、UPDATE 和 DELETE 許可。

若要解決此問題,請執行以下操作:

1.    使用主要使用者登入 RDS for SQL Server 執行個體。

2.    使用下列 T-SQL 命令,將主要使用者從這兩個角色的成員刪除:

USE [database_name];
GO
ALTER ROLE [db_denydatawriter] DROP MEMBER [master_user];
ALTER ROLE [db_denydatareader] DROP MEMBER [master_user];
GO

命令完成後,主要使用者對還原的資料庫具有 SELECT、INSERT、UPDATE 和 DELETE 許可。

如需有關主要使用者具有之特定角色的詳細資訊,請參閱主要使用者帳戶權限


相關資訊

重設 db_owner 角色密碼

Microsoft SQL Server 安全性

DENY (Transact-SQL)

AWS 官方
AWS 官方已更新 2 年前