2011-01-02 3 views
0

Ich habe einen DB-Benutzer, der nur db_reader-Berechtigung hat. (Er hat SELECT auf alles).SQL Server: Erteilen Sie Ausführen ohne Erteilung dml

Ich habe 100 gespeicherte Prozeduren. Ich möchte, dass er nur die SELECT SP und nicht die DML ausführen kann. Leider kann er DML (INSERT/UPDATE/DELETE) auch ausführen, wenn er ihm die Option "Ausführen" gewährt.

Gibt es einen Weg um es herum?

(Ich möchte nicht auf alle SP laufen und ihm bestimmte Zuschüsse zu bestimmten Funktionen geben, weil ich es will auch zukünftige Veränderungen und zukünftige SPs unterstützen)

+0

Ich verstehe nicht, warum ich eine -1 bekam. Dachte, es war eine legitime Frage. – Faruz

+0

Ich verstehe das auch nicht, also habe ich es aufgewertet, um es auszugleichen. – Amy

Antwort

0

Berechtigungen in SQL Server kann pro-Schema angewendet werden . Fügen Sie Ihre SELECT-Prozeduren in ein separates Schema ein und lassen Sie EXEC-Berechtigungen für sie zu.

+0

Dann muss ich die SPs manuell auswählen. Was für zukünftige Entwicklungen ein Schmerz ist. – Faruz

+0

Nun, das musst du tun. – Amy

1
  • Erstellen Sie eine Rolle in der Datenbank
  • den Code verwenden, unten die Rolle jeder der "select" gespeichert Verfahren

    Verwendung [YourDBNameHere] hinzufügen GO GRANT EXECUTE ON [ TheSchemaNameHere]. [YourSPNameHere] bis [YourRoleNameHere] GO

  • die Verwendung der Rolle hinzufügen

  • entfernen Benutzer die Berechtigung von „von allem wählen Sie“

+0

Dann muss ich die SPs manuell auswählen. Was für zukünftige Entwicklungen ein Schmerz ist. – Faruz

+0

@Faruz durch Hinzufügen der Gruppe müssen Sie nur einmal die SP auswählen. Fügen Sie die Benutzer der Gruppe hinzu. Arbeiten Sie nie mit Benutzern nur Gruppierungen, aber Sie wissen, dass –

+0

Vielen Dank für Ihre Antwort. Problem ist, dass SPs jeden Build ändern, es gibt neue, aktualisierte und selten sogar entfernte. Also muss ich diese Liste bei jedem Build pflegen, was ein Schmerz ist. – Faruz

1

Es gibt keine kluge Art und Weise, egal ob es

  • Erlaubnis separat ein Schmerz wie pro andere Kommentare ist (in anderen Antworten)
  • Verwendung Schemata (in anderen Antworten)
  • einen Trigger verwenden, um auf alle Tabellen

Und DENY or db_denydatareader funktioniert nicht auf der Ebene der Tabelle

Ein gespeichertes Proc kann beliebigen Code ausführen: Es gibt keine Möglichkeit, eine Auswahl oder ein DML-Proc zu unterscheiden.

Verwandte Themen