Ich habe 980 DBs auf einem Server und soll einigen Benutzern schreibgeschützten Zugriff gewähren.
Ich möchte auf keinen Fall eine alter DB add user...
Anweisung ausführen , da dies definitiv zeitaufwändig ist.
Ich weiß nicht, ob es exec sp_addrolemember 'db_datareader', 'user'
funktioniert?
Kann mich jemand wissen lassen, ob noch etwas getan werden kann?
sql-server
Syed
quelle
quelle
Antworten:
So würde ich es in Powershell machen:
Dies setzt voraus, dass das Login foo bereits erstellt wurde. Es wird auch davon ausgegangen, dass es auf der localhost-Instanz ausgeführt wird.
quelle
sp_addrolemember
Fügt der Benutzer der Rolle hinzu, wird der Benutzer nicht automatisch in der Datenbank erstellt.Sie können dynamisches SQL verwenden, um dies auszuführen, vorausgesetzt, Sie können programmgesteuert die Datenbanken identifizieren, in denen der Benutzer hinzugefügt werden muss.
Im Folgenden wird Code gedruckt, um jeder Nicht-Systemdatenbank in der Instanz einen einzelnen Benutzer hinzuzufügen:
Ich habe hier einen Cursor verwendet, um
PRINT
die Anweisung für jede Datenbank einzeln zu erstellen. Sie müssen die Anmeldung für manuell erstellen,SomeUser
bevor Sie diesen Code ausführen können.quelle
Ich weiß, dass es viele bessere Antworten gibt, aber ich mag einfache Dinge.
quelle
sp_addrolemember
-> Diese Funktion in einer zukünftigen Version von Microsoft SQL Server entfernt wird. Vermeiden Sie die Verwendung dieser Funktion in neuen Entwicklungsarbeiten und planen Sie, Anwendungen zu ändern, die diese Funktion derzeit verwenden. Verwenden Sie stattdessen ALTER ROLE.[
und]
Klammern.Ein Nicht-Cursor-Ansatz wäre wie folgt. Ich gehe davon aus, dass die Anmeldung bereits vorhanden ist und das Schema standardmäßig verwendet wird
dbo
.quelle
PRINT
? Mit viel Text meine ich, wenn ich dies in über 900 Datenbanken mache.PRINT
Einschränkung, besser ein SELECT zu verwenden und es auch in der Ausgabedatei zu speichern.Mit einer undokumentierten Prozedur können Sie die
SP_msforeachdb
Prozedur verwenden.Zum Beispiel wäre die Ausführung etwas in der Art von
Dies ist nicht die eleganteste Lösung, aber wenn Sie einfach versuchen möchten, jeder Benutzerdatenbank ein Login hinzuzufügen, würde dies funktionieren.
Ein kurzer Hinweis, wenn die SQL Server 2008 R2 oder älter verwenden würden Sie ersetzen mögen , die
alter role
mitexec sp_addrolemember
als von SQL Server 2012 und höher als die alte role Syntax nur hinzugefügt.quelle