it-swarm.com.de

Was macht GRANT CONTROL für ein Schema in MSSQL?

Ich verwende SQL Server 2016 für diese Tests.

Im Folgenden konnte ich keine Tabelle in Schema S für Benutzer U erstellen

USE [D];
GRANT CONTROL ON SCHEMA :: [S] TO [U];

Aber das tat:

USE [D]
GRANT ALTER ON SCHEMA :: [S] TO [U];
GRANT CREATE TABLE TO [U];

Was soll die GRANT CONTROL tun, wenn Sie diese beiden zusätzlichen Befehle ausführen müssen, damit der Benutzer eine Tabelle in einem bestimmten Schema erstellen kann?

Diese Beschreibung ist nett, aber welche Art von Anwendungsfall kann ich ausführen, der bestätigen kann (mit Erfolg oder Misserfolg), dass der Befehl GRANT CONTROL die Sicherheit des Benutzers in der Datenbank mit und ohne dieses Schema vor und nach dem Ausführen des Befehls physisch beeinträchtigt hat?

https://blogs.msdn.Microsoft.com/lcris/2009/08/11/basic-sql-server-security-concepts-ownership-control-take-ownership/

CONTROL-Berechtigung: Mit der CONTROL-Berechtigung können auf einfache Weise alle Berechtigungen für eine Entität einem Principal erteilt werden. Es ist das nächstbeste nach dem Besitz des Unternehmens, aber es ist nicht ganz so mächtig wie das Eigentum. Der Hauptunterschied besteht darin, dass einem Berechtigten von CONTROL noch einige andere Berechtigungen für das Unternehmen verweigert werden können. Zum Beispiel kann mir CONTROL für eine Tabelle gewährt werden, während mir gleichzeitig SELECT für diese Tabelle verweigert werden kann, wodurch ich daran gehindert werde, daraus auszuwählen. Dies kann dem Eigentümer niemals passieren, da dem Eigentümer keine Berechtigungen erteilt oder verweigert werden können .

4
MacGyver

Um zu sehen, was CONTROL für das Schema zu Ihnen bringt, erstellen Sie einen Testbenutzer ohne Berechtigung, erteilen Sie ihm CONTROL für das Schema und überprüfen Sie, welche Berechtigungen er danach hat:

create user test;
grant control on schema::dbo to test;

execute as user = 'test';
select *
from sys.fn_my_permissions('dbo', 'schema');
revert;

Folgendes erhalten Sie:

(enter image description here

Wenn Sie CREATE TABLE Wollen möchten, sollten Sie den BOL-Artikel CREATE TABLE (Transact-SQL) öffnen und nach unten zu PERMISSIONS scrollen:

(enter image description here

Jetzt sehen Sie, dass Sie Ihrem Benutzer auch dann die Berechtigung CREATE TABLE Erteilen müssen, wenn Ihre Tabelle keine Spalten vom Typ CLR benutzerdefiniert haben soll, damit er eine Tabelle erstellen kann.

Der Testbenutzer hat bereits ALTER SCHEMA Durch CONTROL im Schema impliziert, aber CREATE TABLE Sollte erteilt werden (sowie die Berechtigung REFERENCE im Fall eines benutzerdefinierten CLR-Typs ).

4
sepupic

CONTROL verleiht einem "sicherungsfähigen" Objekt (z. B. Datenbank usw.) in SQL Server gottähnliche Berechtigungen.

https://docs.Microsoft.com/en-us/sql/relational-databases/security/permissions-database-engine?view=sql-server-2017

0
openwonk