Autoriser l'utilisateur à faire quoi que ce soit dans son propre schéma mais pas à créer ou à supprimer le schéma lui-même

12

J'ai créé un schéma dans SQL Azure et accordé les autorisations suivantes à un rôle de base de données:

CREATE ROLE myrole AUTHORIZATION dbo;
EXEC sp_addrolemember 'myrole', 'myuser';

CREATE SCHEMA myschema AUTHORIZATION dbo;

GRANT ALTER, CONTROL, DELETE, EXECUTE, INSERT, REFERENCES, SELECT, UPDATE, VIEW 
DEFINITION ON SCHEMA::myschema TO myrole;

GRANT CREATE TABLE, CREATE PROCEDURE, CREATE FUNCTION, CREATE VIEW TO myrole;

Grâce aux autorisations définies ci-dessus, vous myuserpouvez créer / supprimer son propre schéma, afin de surmonter le problème, j'ai essayé l'autorisation ALTER ANY SCHEMA. Mais cette autorisation empêche également l'utilisateur de créer / supprimer des tables.

Quelles autorisations sont nécessaires pour permettre à l'utilisateur de faire quoi que ce soit au sein de son propre schéma sans pouvoir créer ou supprimer le schéma lui-même?

user960567
la source

Réponses:

8

Il n'est pas nécessaire d'accorder CONTROLsur le schéma.
L'autorisation requise pour se DROP SCHEMAtrouve CONTROLsur le schéma ou ALTER ANY SCHEMAau niveau de la base de données, et c'est pourquoi votre utilisateur a pu supprimer le schéma. La suppression de ces deux autorisations empêchera les utilisateurs associés au rôle de créer et de supprimer le schéma (sauf s'ils disposent bien sûr d'autorisations de niveau supérieur).

L'autorisation requise pour CREATE ALTERet d' DROPautres objets est l' CREATEautorisation pour le type d'objet (table \ procedure \ function \ view) combinée avec l' ALTERautorisation sur le schéma.
Vous disposez déjà de ces autorisations dans votre script. Il vous suffit donc de supprimer l' CONTROLautorisation. Pour référence, voici une liste BOL d' DDLinstructions où vous pouvez trouver l'autorisation requise pour tous les types d'objet.

Pour les paresseux, voici votre code après avoir supprimé l'autorisation inutile:

CREATE ROLE myrole AUTHORIZATION dbo;
EXEC sp_addrolemember 'myrole', 'myuser';

CREATE SCHEMA myschema AUTHORIZATION dbo;

GRANT ALTER, DELETE, EXECUTE, INSERT, REFERENCES, SELECT,
          UPDATE, VIEW DEFINITION ON SCHEMA::myschema TO myrole;

GRANT CREATE TABLE, CREATE PROCEDURE, CREATE FUNCTION, CREATE VIEW TO myrole;
Roi Gavish
la source
Mais l'utilisateur pourra également créer des objets sous un autre schéma?
u23432534
4

Notez que puisque le nouveau schéma a l'autorisation de "dbo", l'utilisateur pourra accéder indirectement à tous les objets de base de données où le schéma appartient à dbo.

Exemple:

select * from dbo.test; --fails

create view myschema.test
as 
select * 
from dbo.test; --view is created

select * from myschema.test;  --contents of dbo.test now revealed.

Il s'agit d'un fonctionnement correct du moteur SQL Server; les autorisations imprègnent d'autres schémas avec la même autorisation. Pour restreindre cet accès, voici une option pour la création de schéma:

CREATE SCHEMA myschema AUTHORIZATION myrole;
Jonathan Mears
la source
C'est un très bon point - le propriétaire du schéma est crucial pour les autorisations dont dispose l'utilisateur.
costa