web-dev-qa-db-fra.com

Que fait GRANT CONTROL sur un schéma dans MSSQL?

J'utilise SQL Server 2016 pour ces tests.

Ce qui suit ne m'a pas permis de créer une table dans le schéma S pour l'utilisateur U

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

Mais cela a fait:

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

Qu'est-ce que GRANT CONTROL est censé faire si vous devez exécuter ces deux commandes supplémentaires pour permettre à l'utilisateur de créer une table dans un schéma spécifique?

Cette description est sympa, mais quel type de cas d'utilisation puis-je exécuter pour confirmer (avec succès ou échec) que la commande GRANT CONTROL a physiquement affecté la sécurité de l'utilisateur sur la base de données avec et sans ce schéma, avant et après l'exécution de la commande?

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

Autorisation CONTROL: l'autorisation CONTROL peut être utilisée pour accorder facilement toutes les autorisations sur une entité à un principal. C'est la meilleure chose après la propriété de l'entité, mais ce n'est pas aussi puissant que la propriété. La principale différence est qu'un bénéficiaire de CONTROL peut toujours se voir refuser d'autres autorisations sur l'entité. Par exemple, on peut me donner CONTROL sur une table, alors qu'en même temps on peut me refuser SELECT sur cette table, m'empêchant de faire une sélection - cela ne peut jamais arriver au propriétaire, car le propriétaire ne peut pas se voir accorder ou refuser des autorisations .

4
MacGyver

Pour voir ce que vous apporte CONTROL sur schéma, créez un utilisateur de test sans aucune autorisation, accordez-lui CONTROL sur schéma et vérifiez les autorisations qu'il a après:

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

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

Voici ce que vous obtiendrez:

enter image description here

Quand tu veux CREATE TABLE vous devez ouvrir l'article BOL CREATE TABLE (Transact-SQL) et faites défiler jusqu'à PERMISSIONS:

enter image description here

Maintenant, vous voyez que même si votre table n'est pas censée avoir des colonnes de type défini par l'utilisateur CLR, vous avez toujours besoin de CREATE TABLE autorisation à accorder à votre utilisateur pour lui permettre de créer une table.

L'utilisateur de test a déjà ALTER SCHEMA implicite par CONTROL sur le schéma, mais CREATE TABLE doit être accordé (ainsi que l'autorisation REFERENCE en cas de type défini par l'utilisateur CLR).

4
sepupic

CONTROL confère des autorisations de type divin à un objet "sécurisable" (par exemple, une base de données, etc.) dans SQL Server.

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

0
openwonk