2010-07-16 9 views
12

Ich habe eine Datenbank mit vielen Benutzern darin. Diese Benutzer gehören zu verschiedenen integrierten Rollen in der Datenbank (z. B. db_ddladmin).Erstellen von Skripts für die Mitgliedschaft in der Datenbankrolle in SQL Server 2005

Ich möchte ein Skript erstellen, das dieselben Benutzer mit den gleichen Rollenzuweisungen erstellt, um sie in einer anderen Datenbank zu verwenden. SQL Management Studio scheint nur sp_addrolemember Aufrufe für benutzerdefinierte Rollen zu generieren, nicht die integrierten. Gibt es einen Weg, um alle Rollen zu scripten?

Vielleicht gibt es noch ein anderes, besseres Tool zum Generieren von Datenbankskripten aus einer vorhandenen Datenbank (vorzugsweise, aber nicht unbedingt, kostenlos)?

+0

Dies sollte durch Verwendung der Systemtabellen/-sichten skriptfähig sein. Wenn kein anderer Beiträge schreibt, werde ich später etwas aufarbeiten. –

Antwort

21

Informationen über die Benutzer einer Datenbank und die Rollen, denen sie zugewiesen sind, werden in den Systemansichten sys.database_principals und sys.database_role_members zur Verfügung gestellt. Bewerten Sie diese Daten mit diesen Anfragen:

select * from sys.database_principals 
select * from sys.database_role_members 

Ich gehe davon aus werden Sie Datenbank-Benutzer und Rollen konfiguriert in Datenbank A haben, und Sie wollen, dass sie in die Datenbank B. kopiert, um die Benutzer in der Zieldatenbank zu erstellen:

  • die folgende Abfrage in der Datenbank A
  • Cut, Paste, REVIEW, und das resultierende Skript in der Datenbank B laufen.

    SELECT 'CREATE USER [' + name + '] for login [' + name + ']' 
    from sys.database_principals 
    where Type = 'U' 
        and name <> 'dbo' 
    

    Um die neuen Benutzer in B mit den gleichen Rollen zu konfigurieren, wie sie in A haben:

    • die folgende Abfrage in der Datenbank A
    • Cut, Paste, REVIEW, und führen Sie das resultierende Skript in der Datenbank B

    .

    SELECT 'EXECUTE sp_addrolemember ''' + roles.name + ''', ''' + users.name + '''' 
    from sys.database_principals users 
        inner join sys.database_role_members link 
        on link.member_principal_id = users.principal_id 
        inner join sys.database_principals roles 
        on roles.principal_id = link.role_principal_id 
    

    Überprüfen Sie immer diese Skripts. Es kann Ausnahmen oder Sonderfälle geben, und Sie wollen einfach nicht die Sicherheit verderben.

    Wenn sich die neue Datenbank auf einer anderen SQL Server-Instanz befindet, müssen Sie zuerst die SQL-Logins erstellen. Wenn Sie benutzerdefinierte Rollen haben, müssen Sie sie zuerst neu erstellen . (Rollen und die Berechtigungen, die sie zugewiesen sind sehr offen, und ich will nicht, jemals in einer Situation, wo ich brauchen würde, das zu tun!)

+0

Genau das, was ich gesucht habe! :) – rickythefox

+0

perfekt, ein Skript, um ein Skript zu erstellen .. Ich hatte versucht, Logins mit Generate Script ... aber ran in Erlaubnis Probleme, keine Probleme jetzt, danke. – sonjz

+0

Nur eine Anmerkung, wenn Ihre Datenbank eine Sortierung unter Berücksichtigung der Groß-/Kleinschreibung hat, sollte es sp_addrolemember sein. Ich habe die obige Antwort bearbeitet, um das zu reflektieren. – Chris

0

Hier ist eine Option von Idera: Es generiert Anmeldungen und Berechtigungen und kann Ihnen helfen, das zu erreichen, was Sie versuchen.

+0

Ich überprüfe das Tool, danke! – rickythefox

0

Für DB-Benutzerrollen

SELECT 'CREATE ROLE [' + name + ']' 
    FROM sys.database_principals 
    where type='R' and is_fixed_role = 0 and name != 'public' 
+0

Wenn Sie Antworten schreiben, versuchen Sie, sie zu formatieren. Stackoverflow verwendet Abschriften. –