web-dev-qa-db-fra.com

Comment accorder des droits d'utilisateur pour créer des procédures stockées dans un schéma personnalisé

J'essaie d'accorder des droits de connexion à SQL Server pour créer des procédures stockées et les lier à un schéma personnalisé. Dans ce cas, j'ai créé un schéma appelé IC. Un compte de service sera ensuite ajouté au schéma avec des droits d'exécution pour les procédures stockées.

Ma question est: comment accorder à cette connexion SQL Server les droits pour créer de nouvelles procédures stockées liées à IC?

J'ai essayé GRANT CREATE ON SCHEMA::IC TO [username]; mais seulement

Msg 102, Level 15, State 1, Line 1
Incorrect syntax near 'CREATE'.

Aucune suggestion?

2
Jonathan

Vous ne pouvez pas modifier la possibilité de créer des procédures en un seul schéma en accordant uniquement des autorisations sur le schéma. (En supposant que l'utilisateur n'a pas d'autres droits.)

Pourquoi?

L'utilisateur a toujours besoin du droit de créer des objets dans la base de données, qui sont dans ce cas des procédures.

Ce que vous pouvez faire, c'est accorder à l'utilisateur CREATE PROCEDURE droits, puis modifiez le propriétaire du schéma en cet utilisateur (plus sécurisé, voir ci-dessous pour plus d'informations) ou accordez à cet utilisateur des autorisations sur le "IC" SCHEMA.

Accordant uniquement CREATE PROCEDURE ne permet pas à l'utilisateur de créer des procédures sur des schémas tels que dbo.

Créez la connexion, l'utilisateur correspondant et le schéma IC

USE [master]
GO
CREATE LOGIN [TestIC] WITH PASSWORD=N'Test', DEFAULT_DATABASE=[master], CHECK_EXPIRATION=OFF, CHECK_POLICY=OFF;
GO
USE [test]
GO
CREATE USER [TestIC] FOR LOGIN [TestIC];
GO
CREATE SCHEMA IC;

Accorder la procédure de création à l'utilisateur

GRANT CREATE PROCEDURE TO [TestIC];

Soit Changer le propriétaire du schéma (Option plus sûre)

ALTER AUTHORIZATION ON SCHEMA::IC TO [TestIC];

Ou accordez à l'utilisateur l'accès au schéma

GRANT 
     ALTER

ON SCHEMA::IC


      TO [TestIC] ;

Risque lié à l'octroi de droits sur le schéma

Accorder à un utilisateur la possibilité de modifier le schéma d'un autre utilisateur lui permet de sélectionner, d'insérer, de mettre à jour et de supprimer des lignes dans n'importe quelle table appartenant au propriétaire de ce schéma. Ceci est appelé "chaînage de propriété" et c'est ce qui fait que les vues et les procédures stockées sont des moyens très simples de contrôler la sécurité, car un utilisateur qui a des autorisations sur une vue ou une procédure stockée n'a pas besoin de se voir accorder des autorisations sur la table sous-jacente, tant que le View/Proc a le même propriétaire que la table.

Source

Jetez un œil à la réponse de @ DavidBrowne-Microsoft pour l'origine de la citation et pour obtenir plus d'informations sur les risques de sécurité liés au "chaînage de propriété" lors de l'octroi de droits de modification de schéma.

Test

EXECUTE AS LOGIN  = 'TestIC';

CREATE PROCEDURE IC.test
as
select * from sys.databases; 

Résultat:

Les commandes ont abouti.

Cela échoue

CREATE PROCEDURE dbo.test
as
select * from sys.databases; 

Msg 2760, niveau 16, état 1, test de procédure, ligne 1 [ligne de démarrage par lots 35] Le nom de schéma spécifié "dbo" n'existe pas ou vous n'êtes pas autorisé à l'utiliser.

Annuler l'emprunt d'identité

REVERT;
3
Randi Vertongen

Vous pouvez essayer de donner l'autorisation ALTER:

GRANT ALTER ON SCHEMA::IC TO [username];

Documents

De la documentation:

Un utilisateur avec l'autorisation ALTER sur un schéma peut utiliser le chaînage de propriété pour accéder aux éléments sécurisables dans d'autres schémas, y compris les éléments sécurisables auxquels cet utilisateur se voit explicitement refuser l'accès. En effet, le chaînage de la propriété contourne les autorisations vérifie les objets référencés lorsqu'ils appartiennent au principal propriétaire des objets qui s'y réfèrent. Un utilisateur avec l'autorisation ALTER sur un schéma peut créer des procédures, des synonymes et des vues qui appartiennent au propriétaire du schéma. Ces objets auront accès (via le chaînage de propriété) aux informations d'autres schémas appartenant au propriétaire du schéma. Lorsque cela est possible, vous devez éviter d'accorder l'autorisation ALTER sur un schéma si le propriétaire du schéma possède également d'autres schémas.

0
Viorel Ciucu