SQL Server - octroi d'autorisations à un schéma complet par rapport à un objet?

25

Je suis très vert en ce qui concerne le monde de la gestion des autorisations de base de données dans SQL Sever.

Gardons un exemple simple.

Supposons que le compte «admin» soit le propriétaire des schémas A, B et C.

Il y a un autre compte «minion» que vous souhaitez avoir tous les droits (mise à jour / supprimer / insérer / sélectionner / modifier) ​​sur n'importe quel objet (table / vue) créé sous les schémas A, B et C.

Est-ce possible? Ou devez-vous exécuter une déclaration de subvention à chaque fois que vous ajoutez une table / vue sous ces schémas? (me semble un peu idiot).

user45867
la source

Réponses:

36

Vous pouvez GRANTschématiser les autorisations qui sont efficaces pour tout ce qui existe et tout ce qui existera dans ce schéma.

Accorder des autorisations au schéma

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

De plus, si vous souhaitez ensuite refuser les autorisations sur un certain objet dans ce schéma, vous pouvez le faire.

Refuser les autorisations d'objet

DENY INSERT ON OBJECT::<schema>.<object> TO <user>;
Mark Sinkinson
la source
1
Utilisez également des crochets si le schéma ou le nom d'utilisateur contient des caractères spéciaux. par exemple.... SCHEMA :: [schema] TO [company-name/joshua.duxbury]
Joshua Duxbury
Ne fonctionne pas dans Azure, une idée pourquoi? (les commandes fonctionnent, mais SSMS apparaît et dit "vous n'êtes pas le propriétaire de la base de données .. bla bla bla. Vous ne pourrez peut-être pas enregistrer la table" et bien sûr, vous ne pouvez pas (affiche les autorisations 'Database', '<nom de la base de données>', TheUserId, 'Create Table' et state_desc de 'GRANT') Existe-t-il une autre magie nécessaire? Ou Azure n'est-il utilisable que par le Dbo?
Traderhut Games
13

Pour simplifier un peu plus, vous pouvez utiliser des rôles pour faire le travail que vous recherchez.

Une fois que vous avez attribué des autorisations au rôle, vous pouvez simplement ajouter des utilisateurs au rôle. De cette façon, vous n'avez pas à gérer les autorisations pour les utilisateurs individuels. Les utilisateurs héritent des autorisations accordées au rôle.

Voici un exemple pour vous aider à démarrer:

 -- 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
la source