Dies als Antwort zu posten, nur weil es zu lang für einen Kommentar ist und weil es bald für andere Benutzer relevant sein wird.
SQL Server 2014 fügt einige neue Berechtigungen auf Serverebene hinzu, die genau diese Art von Szenario unterstützen. Sie wurden unter Berücksichtigung der Überwachung entwickelt, aber diese Art von Anforderung scheint auch für diese Rechnung geeignet zu sein. Sie können einem Login auf Serverebene einfach die folgenden zwei Berechtigungen hinzufügen:
CONNECT ANY DATABASE
SELECT ALL USER SECURABLES
Ersteres ermöglicht dem Login, wie es sich anhört, eine Verbindung zu einer beliebigen Datenbank herzustellen. Das Schöne daran ist, dass dies auch für Datenbanken möglich ist, die in Zukunft erstellt werden (vorausgesetzt, Sie legen keine explizite Ablehnung fest, wodurch Sie bestimmte Benutzerdatenbanken vor Anmeldungen mit dieser Berechtigung schützen können). Letzteres ermöglicht dem Login, Lesevorgänge für jede Datenbank auszuführen, auf die er Zugriff hat - also für SELECT
Tabellen, Ansichten, UDFs usw., aber sie können keine UPDATE
Vorgänge ausführen (ich habe nicht getestet, ob diese Berechtigung versteht, wann a gespeicherte Prozedur führt DML durch). Diese funktionieren in Kombination hervorragend, wenn Sie einem Login einen offenen Lesezugriff auf den gesamten Server gewähren möchten, oder wenn Sie differenzierter vorgehen möchten, können Sie CONNECT
bestimmten Datenbanken herkömmliche Berechtigungen gewähren , und das SELECT ALL USER SECURABLES
wird auch der Fall seinFunktioniert nur für Datenbanken, auf die der Login explizit Zugriff hat.
Die Sicherheitsänderungen von 2014 werden hier dokumentiert - nun, teilweise; Sie haben die Berechtigung auf Datenbankebene vergessen ALTER ANY DATABASE EVENT SESSION
- obwohl dies hier nicht relevant ist.