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?
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.
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;
Vous pouvez essayer de donner l'autorisation ALTER:
GRANT ALTER ON SCHEMA::IC TO [username];
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.