SQL Server - Erteilen von Berechtigungen für ein gesamtes Schema vs. Objekt?

25

Ich bin sehr grün, wenn es um die Verwaltung von Datenbankberechtigungen in SQL Server geht.

Lassen Sie uns ein Beispiel einfach halten.

Angenommen, das Konto "admin" ist der Eigentümer der Schemata A, B und C.

Es gibt ein anderes Konto 'Schergen', das Sie volle Rechte (Aktualisieren / Löschen / Einfügen / Auswählen / Ändern) für jedes Objekt (Tabelle / Ansicht) haben möchten, das unter den Schemata A, B und C erstellt wurde.

Ist das möglich? Oder müssen Sie jedes Mal eine Grant-Anweisung ausführen, wenn Sie eine Tabelle / Sicht unter diesen Schemata hinzufügen? (kommt mir etwas albern vor).

user45867
quelle

Antworten:

36

Sie können GRANTSchema-Berechtigungen festlegen, die für alle vorhandenen und in diesem Schema vorhandenen Elemente gelten.

Erteilen Sie Schemaberechtigungen

GRANT SELECT, INSERT, UPDATE, DELETE ON SCHEMA :: <schema> TO <user>;

Wenn Sie dann Berechtigungen für ein bestimmtes Objekt innerhalb dieses Schemas verweigern möchten, können Sie dies auch tun.

Objektberechtigungen verweigern

DENY INSERT ON OBJECT::<schema>.<object> TO <user>;
Mark Sinkinson
quelle
1
Verwenden Sie auch eckige Klammern, wenn das Schema oder der Benutzername Sonderzeichen enthält. zB.... SCHEMA :: [schema] TO [company-name/joshua.duxbury]
Joshua Duxbury
Funktioniert nicht in Azure, warum? (Die Befehle funktionieren, aber SSMS wird aufgerufen und sagt, dass Sie nicht der DB-Besitzer sind. Sie können die Tabelle möglicherweise nicht speichern.) Und Sie können mit Sicherheit nicht ALLES für die Datenbank gewähren (Zeigt die Berechtigungen 'Database', '<db name>', TheUserId, 'Create Table' und state_desc von 'GRANT' an.) Gibt es eine andere Magie, die benötigt wird, oder kann Azure nur von den Dbo verwendet werden?
Traderhut Games
13

Zur weiteren Vereinfachung können Sie Rollen verwenden, um den gewünschten Job auszuführen.

Nachdem Sie der Rolle Berechtigungen zugewiesen haben, können Sie der Rolle einfach Benutzer hinzufügen. Auf diese Weise müssen Sie keine Berechtigungen für einzelne Benutzer verwalten. Die Benutzer erben die Berechtigungen, die der Rolle erteilt wurden.

Nachfolgend finden Sie ein Beispiel für den Einstieg:

 -- Create the database role
CREATE ROLE TableSelector AUTHORIZATION [dbo]
GO
 ---- Grant access rights to a specific schema in the database
GRANT 
      SELECT, INSERT, UPDATE, DELETE, ALTER 

ON SCHEMA::dbo
      TO TableSelector 
GO

-- Add an existing user to the new role created 
EXEC sp_addrolemember 'TableSelector', 'MyDBUser'
GO

-- Revoke access rights on a schema from a role 
DENY ALTER  -- you can customize here ...
ON SCHEMA::dbo
      TO TableSelector 
Kin Shah
quelle