Gibt es eine Möglichkeit, einem Benutzer nur Zugriff auf alle Nicht-Systemansichten der Datenbank zu gewähren?

9

In SQL Server habe ich einen Benutzer in einer bestimmten Datenbank und wurde gebeten, ihm nur Zugriff auf alle Nicht-Systemansichten der Datenbank zu gewähren. Ich glaube, dies kann erreicht werden, indem Securables der Typansicht bearbeitet und für jede einzelne Auswahl ausgewählt werden, aber es gibt viele, viele Ansichten. Gibt es einen effizienteren Weg, um dies zu erreichen?

Christopher Garcia
quelle

Antworten:

8

Es gibt keine Syntax wie

GRANT SELECT ON ALL::Views TO SomeUser 

Sie können GRANT SELECTBerechtigungen für einzelne Objekte , Schemas oder die gesamte Datenbank, jedoch nicht nach Objekttyp gefiltert, um nur Ansichten einzuschließen. Für diese Art von Ad-hoc-Aufgabe würde ich wahrscheinlich eine neue Rolle mit dem Namen erstellen. Fügen ViewReaderSie den Benutzer dieser Rolle hinzu und führen Sie sie dann in SSMS aus

SELECT 'GRANT SELECT ON ' + 
          QUOTENAME(SCHEMA_NAME(schema_id)) + '.' + QUOTENAME(name) + 
      ' TO ViewReader;'
FROM sys.views
WHERE is_ms_shipped = 0

um ein Skript zu generieren, das mit GRANTden erforderlichen Berechtigungen ausgeführt wird.

Martin Smith
quelle
Vielen Dank für die äußerst anmutige Antwort. Das Skript ist etwas über meinem Kopf, daher werde ich etwas lesen, bevor ich versuche, es zu implementieren. Danke noch einmal.
Christopher Garcia
1
@lush - Das Skript enthält nur einige Befehle zum Überprüfen, Kopieren, Einfügen und Ausführen. Sie könnten etwas Aufwändigeres tun, um das Ergebnis zu verketten, EXECaber ich würde mich nicht um eine einmalige Aufgabe kümmern.
Martin Smith
Ich verstehe jetzt, das ist eine perfekte Lösung für dieses Problem, danke!
Christopher Garcia
4

Ich habe in meinem Fall einen anderen Ansatz gewählt. Das habe ich getan:

  1. Erstellen Sie ein Login und ordnen Sie es einer Datenbank zu.
  2. Gehen Sie zu einer Datenbank und erstellen Sie beispielsweise ein Schema mit dem Namen Public_View. Der Eigentümer dieses Schemas muss derselbe Eigentümer der Tabellen sein, auf die sich die Ansichten beziehen.
  3. Gewähren Sie dem neuen Benutzer Zugriff auf das neue Schema.
  4. Erstellen Sie im neuen Schema so viele Ansichten, wie Sie möchten, und der neue Benutzer hat Zugriff darauf.

Das Gute ist, dass der neue Benutzer keinen Zugriff auf die Tabellen hat und nicht einmal die Tabellen sehen kann.

Ich hoffe, es hilft.

Francisco Goldenstein
quelle
4
+1 Für mich ist das Gute an dieser Lösung, dass es nicht erforderlich ist, Berechtigungen explizit zuzuweisen, wenn neue Ansichten erstellt werden.
Martin Smith