2009-10-27 3 views
1

Je dois configurer certains utilisateurs pour pouvoir créer des procédures stockées avec un accès READ uniquement. Aussi, en production, ils ne peuvent pas avoir SELECT, seulement EXECUTE sur les procs qu'ils ont créés. En développement, ils auraient SELECT pour qu'ils puissent créer leurs procédures.Question sur les schémas et la sécurité

J'ai configuré un schéma appelé Rapports. Le propriétaire de ce schéma est un identifiant - Report_Admin. Cet utilisateur a un accès sélectif aux tables. J'ai alors donné alter et exécute sur le schéma de rapports à mon compte d'auteur de rapport. Dbo possède la table - donc cela fonctionne si dbo possède aussi le schéma Reporting - mais alors une suppression fonctionnera aussi dans la procédure!

Nous utilisons des services de rapport et aimeriez avoir tout le SQL dans la base de données pour la maintenabilité.

Merci!

Répondre

2

Vous ne réussirez pas en utilisant le chaînage de propriété, comme vous l'avez déjà découvert. Une solution serait la suivante: report_writer doit créer ses rapports avec une clause EXECUTE AS SELF afin qu'ils soient exécutés sous les privilèges de report_writer. Ensuite, le groupe report_reader pourra utiliser l'autorisation EXECUTE sur le schéma reports pour exécuter les rapports, et les rapports pourront lire les données à cause de la clause execute as.

+0

Je ne sais pas si j'ai bien compris la question, mais il semble que dans la production, l'utilisateur de report_writer n'ait pas de droits de sélection. Ainsi, EXECUTE AS SELF empêcherait les procédures stockées de sélectionner quoi que ce soit. – Andomar

+0

@Andomar: report_writer a l'autorisation SELECT. Dans l'OP est Report_Admin. –

0

Vous pouvez attribuer des autorisations aux rôles et aux utilisateurs, pas besoin de schéma séparé. Donc, je n'utiliserais qu'un seul schéma: "dbo" (la valeur par défaut)

Créer un rôle de base de données pour les utilisateurs. Accordez data_reader à ce rôle en cours de développement. Sur le développement et la production, accorder des droits d'exécution sur les procédures stockées. Autant que je sache, vous devrez accorder le droit d'exécution pour chaque procédure stockée.

+0

Le deuxième schéma est nécessaire exactement pour être en mesure d'ignorer toutes les procédures en une seule fois. Avoir deux machines complètement séparées n'est pas exactement la même chose que d'avoir une séparation de l'autorisation SELECT pour les rédacteurs de procédure et EXECUTE seulement pour les utilisateurs qui exécutent le rapport. Tout à fait différent, je dirais. –

+0

Ok, y a-t-il une raison pour laquelle vous ne pouvez pas accorder execute à toutes les procédures dans le schéma dbo? Btw la question mentionne un système de développement séparé. – Andomar

Questions connexes