web-dev-qa-db-fra.com

Comment autoriser un utilisateur SQL Server à insérer / mettre à jour / supprimer des données, mais pas à modifier le schéma?

Mon application (C #, ASP.Net) doit insérer, mettre à jour et supprimer des données dans la base de données et exécuter des procédures stockées. Je dois l'empêcher de modifier le schéma de la base de données - pas de modification des tables, de création ou de suppression, pas de modification des procédures stockées.

Quelle combinaison d'autorisations dois-je accorder à l'utilisateur de l'application? Il ne suffit pas de "sélectionner", car il doit insérer/mettre à jour/supprimer des données dans les tableaux.

Comment vérifier les autorisations et l'accès pour une connexion particulière? Comment accorder ou refuser des autorisations et un accès pour une connexion? Je dois accorder des autorisations à un nouvel utilisateur (connexion) pour accéder à une seule base de données.

Utilisation de SQL Server 2008 R2, avec SSMS.

18
jprusakova

Si vous voulez vraiment contrôler cela au niveau de l'objet, vous pouvez faire:

GRANT SELECT,UPDATE,INSERT,DELETE ON dbo.table TO user;

Au niveau du schéma:

GRANT SELECT,UPDATE,INSERT,DELETE ON SCHEMA::dbo TO user;

Idéalement, cependant, vous n'autoriseriez pas le DML ad hoc par rapport à vos tables et contrôleriez tout le DML via des procédures stockées. Dans ce cas, il vous suffit d'accorder exec sur la procédure elle-même, et non aux objets qu'elle touche:

GRANT EXEC ON dbo.procedure TO user;

De même, si vous souhaitez autoriser exec sur toutes les procédures d'un schéma spécifique, vous pouvez dire:

GRANT EXEC ON SCHEMA::dbo TO user;

La seule exception est lorsque votre procédure stockée compose du SQL dynamique. Dans ces cas, vous devrez peut-être encore appliquer des autorisations aux tables sous-jacentes dans le contexte de l'exécution SQL dynamique, ou vous pourrez peut-être utiliser EXECUTE AS OWNER.

28
Aaron Bertrand