Warum hat der Master-Benutzer für meine RDS for SQL Server-Instance den Zugriff verloren und wie kann ich ihn zurückgewinnen?

Lesedauer: 5 Minute
0

Der Hauptbenutzer für meine Amazon Relational Database Service (Amazon RDS) for SQL Server-Instance hat den Zugriff verloren. Oder ich muss dem Master-Benutzer Zugriff auf eine Datenbank gewähren, die von einem anderen Benutzer erstellt wurde. Was muss ich tun, um meinem Master-Benutzer den Zugriff wiederherzustellen oder ihm Zugriff zu gewähren?

Kurzbeschreibung

Wenn Sie eine neue DB-Instance erstellen, erhält der Standardmasterbenutzer automatisch bestimmte Berechtigungen für diese DB-Instance. Sie können den Master-Benutzernamen nicht mehr ändern, nachdem die DB-Instance erstellt wurde.

Hinweis: Es empfiehlt sich, den Master-Benutzer nicht direkt in Ihren Anwendungen zu verwenden. Verwenden Sie stattdessen einen Datenbankbenutzer, der mit den für Ihre Anwendung erforderlichen Mindestberechtigungen erstellt wurde.

Wenn Sie versehentlich die Berechtigungen des Masterbenutzers löschen, können Sie sie wiederherstellen, indem Sie die DB-Instance ändern und ein neues Masterbenutzerkennwort festlegen. Weitere Informationen finden Sie unter Berechtigungen für Hauptbenutzerkonten.

Behebung

Im Folgenden sind gängige Szenarien aufgeführt, die dazu führen können, dass der Masterbenutzer den Zugriff auf die DB-Instance verliert. Oder der Masterbenutzer kann möglicherweise keine Verbindung zu einer bestimmten Benutzerdatenbank herstellen und darauf zugreifen.

Szenario 1: Der Master-Benutzer kann aufgrund eines expliziten DENY keine Verbindung zur DB-Instance herstellen

Der Masterbenutzer kann möglicherweise keine Verbindung zur DB-Instance herstellen, da für das Connect SQL-Privileg ein explizites DENY festgelegt ist. Standardmäßig erhält der Hauptbenutzer Connect SQL durch die Anmeldung des Amazon RDS-Systemadministrators (rdsa). In Microsoft SQL Server hat ein explizites DENY jedoch Vorrang vor einem expliziten GRANT.

Gehen Sie hierfür wie folgt vor:

1.    Stellen Sie eine Verbindung zu RDS for SQL Server her, indem Sie den Anmeldenamen des Erteilers verwenden, der das explizite DENY für Connect SQL für die Masterbenutzeranmeldung

2.    Verwenden Sie den folgenden T-SQL-Befehl, um die explizite DENY aufzuheben. Im folgenden Beispiel lautet die RDS-Masterbenutzeranmeldung master_user und der Grantor-Prinzipal ist grantor_principal. Ändern Sie diese Werte entsprechend Ihrem Anwendungsfall.

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

Szenario 2: Der Master-Benutzer kann keine Verbindung zu einer bestimmten Datenbank herstellen, da sie keinem Benutzer in der Datenbank zugeordnet ist

Dies kann unter den folgenden Umständen auftreten:

  • Die Datenbank wurde von einem anderen Anmeldekonto erstellt. Und die Masterbenutzeranmeldung ist keinem Datenbankbenutzer in der Datenbank zugeordnet und gewährt Berechtigungen für die Datenbank.
  • Der Datenbankbenutzer, der zuvor dem Masterbenutzer-Login mit den entsprechenden Berechtigungen zugeordnet war, wurde explizit gelöscht.

Um dieses Problem zu beheben, setzen Sie das Masterbenutzerkennwort zurück. Durch das Zurücksetzen des Kennworts wird ein Datenbankbenutzer erstellt, der dem Masterbenutzer-Login zugeordnet ist, falls dieser Benutzer gelöscht wurde. Außerdem wird dem Benutzer die feste Datenbankrolle db_owner zugewiesen. Anweisungen zum Zurücksetzen des Masterbenutzerkennworts finden Sie unter Wie setze ich das Masterbenutzerkennwort für meine Amazon RDS-DB-Instance zurück?

Hinweis: Der AWS Identify and Access Management (IAM) -Benutzer, der das Kennwort zurücksetzt, muss über die Berechtigung zum Ausführen der ModifyDBInstance-Aktion für die RDS-Ressource verfügen.

Das Aktualisieren des Masterbenutzerkennworts bewirkt Folgendes:

  • Gewährt dem Masterbenutzer die Rolle db_owner auf Datenbankebene für eine Datenbank, die von einem anderen Benutzer erstellt wurde.
  • Stellt Systemberechtigungen für den Master-Benutzer wieder her.
  • Stellt die Rollen auf Serverebene für den Masterbenutzer wieder her.
  • Stellt die Berechtigungen auf Serverebene für den Masterbenutzer wieder her.
  • Stellt dem Masterbenutzer den Zugriff auf gespeicherte Systemprozeduren wieder her.
  • Stellt dem Masterbenutzer den Zugriff auf RDS-spezifische gespeicherte Prozeduren wieder her.

Szenario 3: Der Master-Benutzer kann bestimmte Aktionen nicht ausführen

Der Hauptbenutzer verfügt über die Rollenberechtigung db_owner für die Datenbank, führt jedoch bestimmte Aktionen aus, z. B. CONNECT, SELECT, INSERT, UPDATE, ALTER usw. Dies kann passieren, wenn dem Datenbankbenutzer, der dem Masterbenutzeranmeldenamen zugeordnet ist, bestimmte Berechtigungen für die Datenbank ausdrücklich verweigert wurden.

Um die Liste der Datenbankrollen anzuzeigen und zu erfahren, welche Datenbankbenutzer Mitglieder dieser Rollen sind, führen Sie den folgenden T-SQL-Befehl aus. Ersetzen Sie im Folgenden database_name durch die richtigen Werte für Ihren Anwendungsfall.

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;

Führen Sie die folgenden Befehle aus, um die Liste der Berechtigungen anzuzeigen, die ein Benutzer in einer bestimmten Datenbank hat. Ersetzen Sie im folgenden Beispiel database_name durch den richtigen Wert für Ihren Anwendungsfall.

USE [database_name];
GO
EXECUTE AS USER = 'master_user';
SELECT * FROM sys.fn_my_permissions(NULL, 'DATABASE');
GO

In diesem Beispiel wird der Hauptbenutzer zu den festen Datenbankrollen db_denydatawriter und db_denydatareader hinzugefügt. Obwohl sie Mitglied der festen Datenbankrolle db_owner sind, verbieten die deny-Berechtigungen von db_denydatawriter und db_denydatareader die SELECT-, INSERT-, UPDATE- und DELETE-Berechtigungen für die Datenbank.

So beheben Sie dieses Problem:

1.    Melden Sie sich mit dem Masterbenutzer bei der RDS for SQL Server-Instance an.

2.    Verwenden Sie den folgenden T-SQL-Befehl, um den Master-Benutzer als Mitglied dieser beiden Rollen zu löschen:

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

Nach Abschluss der Befehle verfügt der Masterbenutzer über SELECT-, INSERT-, UPDATE- und DELETE-Berechtigungen für die wiederhergestellte Datenbank.

Weitere Informationen zu den spezifischen Rollen, die der Masterbenutzer innehat, finden Sie unter Berechtigungen für Hauptbenutzerkonten.


Relevante Informationen

Zurücksetzen des db_owner-Rollenkennworts

Microsoft SQL Server-Sicherheit

DENY (Transact-SQL)