So schreiben Sie Berechtigungen für alle Anmeldungen / Benutzer / Tabellen / Schemas

7

Im Laufe der Jahre habe ich unzählige Skripte und Anwendungen verwendet, um alle Berechtigungen für SQL Server-Datenbanken zu generieren. Ich habe sowohl kostenpflichtige als auch kostenlose Tools verwendet. Ich habe das Gefühl, dass keiner von ihnen in jedem Fall korrekt zu sein scheint. Ich suche einfach nach einer Möglichkeit, alle Berechtigungen für eine bestimmte Datenbank zu generieren, zusammen mit der Gewissheit, dass das Skript korrekt ist und nach einer Sicherung / Wiederherstellung von einer anderen Instanz verwendet werden kann. Hat jemand eine Methode, der er vertraut und die er regelmäßig anwendet?

Irgendein Typ
quelle

Antworten:

5

Ich habe einige gespeicherte Prozeduren, die ich regelmäßig geschrieben und verwendet habe.

Sie haben jeweils drei Ausgänge.

  • Principals : Eine Liste der Datenbank- / Server-Principals und der zugehörigen Informationen, einschließlich Skripten zum Erstellen / Löschen.
  • Role membership : Eine Liste der Rollen, zu denen jeder Datenbank- / Server-Principal gehört, sowie Add / Drop-Skripte.
  • Permissions : Eine Liste der einzelnen Berechtigungen (EXECUTE, INSERT, UPDATE, CONNECT usw.) für jeden Datenbank- / Server-Principal.

Offensichtlich ist der Srv sp für die Server-Principals und der DB sp für die Principals auf Datenbankebene. Der DB sp hat auch die Option 'Alle' für den Datenbanknamen. Mit dieser Option werden alle Berechtigungen für alle Datenbanken ausgeführt und abgerufen.

Hinweis: Dies war ursprünglich als Recherchetool gedacht, daher gibt es eine ganze Reihe von Optionen, mit denen Sie Ihre Daten analysieren können. Nur Rollen, alles andere als Rollen, nur ein bestimmter Hauptname usw.

Kenneth Fisher
quelle
1
Tolles paar Skripte! Ich benutze sie auch sehr oft, ein sehr praktisches Paar SPs. Und war in der Lage, Passwörter und SIDs zu übertragen, Daumen hoch für Sie Kenneth
Yaroslav
1
Gute Skripte Kenneth! sp_DBPermissions scheint alles zurückzugeben, was ich brauche, mit Ausnahme von "VIEW DEFINITION", das Benutzern in einer Datenbank gewährt wird. Für diese werden keine Datensätze zurückgegeben.
SomeGuy
Seltsam. Das sollte sich zeigen. Ich würde a) bestätigen, dass ihnen unter der Datenbank explizit VIEW DEFINITION gewährt wird (nicht über eine Rolle, eine AD-Gruppe usw.), und dann die Systemansichten überprüfen. sys.database_permissions ist mit sys.database_principals verbunden. Wenn es nicht in diesen Ansichten ist, wird es nicht in den SPs angezeigt.
Kenneth Fisher
2

sp_help_revlogin

Siehe: So übertragen Sie Anmeldungen und Kennwörter zwischen Instanzen von SQL Server auf MSDN

Hat im vergangenen Sommer ziemlich gut für mich funktioniert.

Michael P.
quelle
sp_help_revlogin überträgt nur Serverprinzipalinformationen. Es wird nichts auf Datenbankebene übertragen. Sehr nützlich für das, was es tut.
Kenneth Fisher
Wenn Sie auf einen neuen Server verschieben / migrieren, sollten Sie nicht jede Datenbankberechtigung überschreiben müssen. Sie werden mit der migrierten Datenbank mitkommen.
Michael P
Sehr richtig. Es sei denn, Sie migrieren zufällig zwischen SDLC-Ebenen. Sagen Sie, Sie kopieren mit einem Test über dev, aber dann möchten Sie die dev-Berechtigungen wieder so setzen, wie sie waren.
Kenneth Fisher
@KennethFisher Sie haben normalerweise Rollen dafür.
Spaghettidba
@spaghettidba Ändern sich die Berechtigungen für die Rollen nicht zwischen dev & test? Oder prod & test? Oder zumindest die Mitglieder? Es ist praktisch, solche Dinge ausschreiben zu lassen.
Kenneth Fisher