Ich möchte einen "lesenden" Benutzer auf meiner SQL Server 2012-Instanz einrichten. Ich möchte ihm das Recht einräumen, gespeicherte Prozeduren, Funktionen oder direkte SQL-Anweisungen auszuführen, die Daten aus allen Tabellen und Ansichten abrufen, aber nicht aktualisieren oder einfügen (dh nichts lesen und nichts schreiben).
Kann ich dies einrichten, ohne jeder Funktion oder gespeicherten Prozedur namentlich Rechte zu erteilen, sondern ihm das Ausführungsrecht für jede Funktion oder gespeicherte Prozedur gewähren, indem ich nur das Recht zum Ändern von Tabellen wegnehme?
Wird sich etwas ändern, wenn ich stattdessen SQL Server 2008 ausführe?
Erläuterungen und Ergänzungen:
- Wenn eine gespeicherte Prozedur Daten ändert, sollte der Benutzer eine Fehlermeldung erhalten (entweder die Änderung verweigern oder den Zugriff auf die gespeicherte Prozedur vollständig verweigern).
- Wenn eine mögliche Lösung das Verweigern von Berechtigungen beinhaltet, kann ich dann bestimmte Berechtigungen nicht erteilen, anstatt sie zu verweigern?
- Kann eine Verweigerung auf alle Tabellen, Ansichten usw. (die jetzt und in Zukunft vorhanden sind) in der Datenbank in einer Anweisung angewendet werden?
GRANT
erteilen, BerechtigungenDENY
verweigern undREVOKE
einGRANT
oder entfernenDENY
. OhneGRANT
oder kannDENY
der Benutzer Berechtigungen erben, beispielsweise durch Zugriff auf eine gespeicherte Prozedur.DENY DELETE, INSERT, UPDATE
in einer Datenbank oder einem Schema befinden, wirkt sich dies meiner Meinung nach nur auf Tabellen und Ansichten aus.Antworten:
Dies ist nicht so einfach zu erreichen, wie Sie vielleicht denken. Eine Möglichkeit besteht darin, eine neue benutzerdefinierte Datenbankrolle zu erstellen, alle für diese Rolle erforderlichen Berechtigungen zu erteilen und dann Benutzer zur neuen Rolle hinzuzufügen. Dies macht es zumindest einfacher, Benutzern (oder anderen benutzerdefinierten Rollen) diese Berechtigungen in Zukunft zu erteilen. Die folgenden Schritte sind ein guter Anfang:
Danach verfügt Bob über umfassende schreibgeschützte Berechtigungen in der Datenbank. Er kann aus allen Tabellen, Ansichten dieser Tabellen und Inline-Funktionen lesen. Er kann jedoch keine Prozeduren ausführen oder Nicht-Inline-Funktionen verwenden.
Sie müssen der Readers-Rolle bestimmte Berechtigungen erteilen, um sichere Funktionen und Verfahren zu erhalten, auf die Readers Zugriff haben soll. Möglicherweise können Sie Schritte ausführen, um diesen Vorgang zu vereinfachen (z. B. das Gruppieren von Objekten in einem Schema und das Erteilen der Ausführungsberechtigung für das Schema anstelle einzelner Objekte), aber es gibt zu viele Details, um sie hier zu behandeln.
Beachten Sie, dass das Fehlen von Berechtigungen zum Ändern von Daten einen Leser nicht daran hindern würde, Daten über eine gespeicherte Prozedur zu ändern, für die ihm die Ausführungsberechtigung erteilt wurde, wenn die zu ändernde Prozedur und das zu ändernde Objekt einen gemeinsamen Eigentümer haben. Eine ausdrückliche Ablehnung würde in diesem Fall auch nicht respektiert. Diese Funktion wird als Ownership Chaining bezeichnet .
quelle