Wie kann ich meine Benutzer-Anmeldeberechtigungen für RDS für SQL Server duplizieren oder klonen?

Lesedauer: 3 Minute
0

Ich möchte meine Benutzer-Anmeldeberechtigungen für Amazon Relation Database (Amazon RDS) für Microsoft SQL Server klonen. Wie kann ich vorgehen?

Lösung

Hinweis: Dieses Skript nimmt keine Änderungen an neuen Anmeldungen vor, es sei denn, der Benutzer, der das Skript ausführt, hat Zugriff, um diese Berechtigungen zu erteilen. Wenn der Benutzer keinen Zugriff zum Erteilen von Berechtigungen hat, werden die Berechtigungen nicht im Skript angezeigt. Dies liegt daran, dass der für den Zugriff auf das Skript verwendete Anmeldename keine Anzeigeberechtigungen hat. Wenn Sie außerdem versuchen, das Berechtigungsskript manuell hinzuzufügen, obwohl Sie keine Erteilungsberechtigungen haben, schlägt das Skript fehl.

1.    Kopieren Sie das Skript MSSQL_RDS_Clone_Login und führen Sie es aus, um eine gespeicherte Prozedur in der Umgebung zu erstellen, in der Sie den Benutzer duplizieren möchten. Sie werden diese gespeicherte Prozedur später verwenden, um ein Duplikat der Berechtigungen für Benutzeranmeldung, Datenbankbenutzer, Serverebene und Datenbankebene zu erstellen.

Sie können die gespeicherte Prozedur in jeder Benutzerdatenbank erstellen, die sich nicht in der Systemdatenbank von Amazon RDS für SQL Server befindet. Ersetzen Sie [DB_NAME] durch den Namen der Benutzerdatenbank entsprechend Ihrem Anwendungsfall.

Das folgende Skript erstellt drei gespeicherte Prozeduren:

  • DuplicateLogin: Dupliziert den Anmeldenamen und den Datenbankbenutzer für diese Anmeldungen in jeder Datenbank, die die Anmeldeberechtigungen enthält, aus denen Sie kopieren.
  • GrantUserRoleMembership: Dupliziert DB-Benutzerberechtigungen und -Rollen auf den neuen Benutzer.
  • DuplicateRDS: Konsolidiert die Ergebnisse der gespeicherten Prozeduren DuplicateLogin und GrantUserRoleMembership.

2.    Öffnen Sie nach dem Erstellen der gespeicherten Prozedur ein neues TSQL-Fenster und führen Sie die gespeicherte Prozedur im folgenden Format aus.

Hinweis: Bevor Sie das Skript ausführen, stellen Sie sicher, dass die Ergebnisse im Textformat vorliegen, indem Sie STRG+T auf Ihrer Tastatur drücken.

--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.    Nachdem das Skript generiert wurde, kopieren Sie das Skript von der Registerkarte Results (Ergebnisse) und führen Sie es in einem neuen Abfragefenster aus. Nachdem das Skript ausgeführt wurde, wird Ihre SQL-Server-Anmeldung mit ähnlichen Berechtigungen auf Server- und Datenbankebene wie Ihre Master-Anmeldung generiert.

Hinweis: In diesem Beispiel werden SSISDB-Berechtigungen für ssis_admin und ssis_logreader ausgeschlossen. Wenn Sie diese Berechtigungen benötigen, geben Sie sie separat an.

ALTER ROLE [ssis_admin] ADD MEMBER [mydomain\user_name]
ALTER ROLE [ssis_logreader] ADD MEMBER [mydomain\user_name]
GO

Hinweis: Die Skript-Ausgabe kann in ungeordneter Weise auftreten, da temporäre Tabellen in der gespeicherten Prozedur verwendet werden. Wenn dies der Fall ist, löschen Sie die gespeicherte Prozedur und erstellen Sie sie erneut, um sie in das richtige Format zu bringen.

4.    Wenn Sie verwaiste Benutzer haben, führen Sie das folgende Skript aus. Dieses Skript prüft auf verwaiste Benutzer in Datenbanken, bei denen das Skript fehlgeschlagen ist, und entfernt diese verwaisten Benutzer.

Das folgende Skript prüft auf verwaiste Benutzer:

Use [DB_NAME] ; 
GO 
exec sp_change_users_login @Action='Report' ;
GO

Das folgende Skript entfernt verwaiste Benutzer:

Use [DB_NAME] ;
GO
exec sp_revokedbaccess 'username'
GO

5.    Wenn Sie die gespeicherten Prozeduren nach dem Duplizieren der Anmeldung nicht beibehalten möchten (z. B. aufgrund von Compliance), führen Sie das folgende Skript aus:

USE [DB_NAME]
GO
DROP PROCEDURE [dbo].[DuplicateRDS]
GO
DROP PROCEDURE [dbo].[DuplicateLogin]
GO
DROP PROCEDURE [dbo].[GrantUserRoleMembership]
GO