2012-06-18 4 views
10

Meine Anwendung (C#, ASP.Net) muss Daten in der DB einfügen, aktualisieren und löschen und gespeicherte Prozeduren ausführen. Ich muss verhindern, dass das DB-Schema verändert wird - keine Änderung von Tabellen, Erstellen oder Löschen, keine Änderungen an gespeicherten Prozeduren.Wie kann ein SQL Server-Benutzer Daten einfügen/aktualisieren/löschen, aber nicht ändern Schema?

Welche Berechtigungskombination muss ich dem Anwendungsbenutzer gewähren? Nur 'Auswählen' wird nicht funktionieren, weil es Daten in Tabellen einfügen/aktualisieren/löschen muss.

Wie überprüfe ich Berechtigungen und Zugriff für ein bestimmtes Login? Wie gewähre oder verweiger ich Berechtigungen und Zugriff für eine Anmeldung? Ich muss einem neuen Benutzer (Login) Berechtigungen erteilen, um nur auf eine Datenbank zugreifen zu können.

Verwenden von SQL Server 2008 R2 mit SSMS.

Antwort

18

Wenn Sie wirklich diese auf Objektebene steuern möchten, können Sie tun:

GRANT SELECT,UPDATE,INSERT,DELETE ON dbo.table TO user; 

Am Schemaebene:

GRANT SELECT,UPDATE,INSERT,DELETE ON SCHEMA::dbo TO user; 

Idealerweise aber würden Sie nicht ad hoc DML erlauben gegen Ihre Tabellen und steuern Sie alle DML über gespeicherte Prozeduren. In diesem Fall brauchen Sie nur exec über das Verfahren zu gewähren, selbst, und nicht auf die Objekte, die es berührt:

GRANT EXEC ON dbo.procedure TO user; 

Ebenso, wenn Sie exec auf alle Verfahren in einem bestimmten Schema zulassen möchten, können Sie sagen:

GRANT EXEC ON SCHEMA::dbo TO user; 

Die einzige Ausnahme ist, wenn Ihre gespeicherte Prozedur dynamisches SQL zusammensetzt. In diesen Fällen müssen Sie möglicherweise noch Berechtigungen für die zugrunde liegenden Tabellen im Kontext der dynamischen SQL-Ausführung zuweisen, oder Sie können möglicherweise EXECUTE AS OWNER verwenden.

+0

Wird die Berechtigung 'update' und 'delete' erteilt, damit der Benutzer Tabellen ändern und löschen kann? Kann ich außerdem Berechtigungen für ein Schema statt für eine Tabelle erteilen? – jprusakova

+1

Nein, aktualisieren und löschen beziehen sich auf die Daten in der Tabelle, nicht die Daten selbst. Du kannst das immer versuchen. Und ja, ich habe ein Beispiel gepostet, in dem Sie das Schema anstatt pro Objekt beeinflussen können (das kann hilfreich sein, wenn Sie Tabellen später hinzufügen, Berechtigungen werden vererbt, es sei denn, Sie möchten eine Tabelle hinzufügen, auf die der Benutzer * keinen Zugriff hat). dann müssen Sie explizit für diese Tabelle leugnen). –

+0

Danke, das hilft! – jprusakova