J'ai une série de procédures stockées qui sélectionnent des données à partir d'une DB. J'ai un rôle (CCTC_Reader) qui exécute des autorisations accordées sur les procédures. L'une des procédures appelle une autre procédure stockée appelée Le problème est que dans ce processus, la requête p>
ne renvoie aucun enregistrement. CCTC_READER a des autorisations de subvention sur: p>
donc en théorie cela devrait fonctionner. Je n'ai aucun problème lorsqu'il est exécuté sous DBO. p>
Si j'accorde db_datreader à cctc_reader la requête va bien, mais je ne veux pas accorder des autorisations de lecteur à toutes les tables (par conséquent, pourquoi j'ai utilisé des Procs stockés). J'ai essayé d'accorder des autorisations de sélection sur INFORMATION_SCHEMA dans le Master DB comme suggéré dans certains articles, mais je ne peux toujours pas obtenir cela pour travailler. P>
Toute suggestion? P> reccontrol_system_option code> qui à tour requête
informations_schema.columns code>. p>
Sélectionnez colonne_name à partir d'informations_schema.columns où table_name = 'reccontrol_manager' code> p>
reccontrol_system_option code> li>
ul>
3 Réponses :
Objets Visibilité des métadonnées est soumis au Voir la définition de la vue autorisation: < pré> xxx pré>
la définition de vue autorisation permet de utilisateur Voir les métadonnées de l'établissement sur lequel la permission est accordée. Toutefois, voir la permission de définition ne confère pas l'accès à la sécurisé lui-même. Par exemple, un utilisateur qui n'est accordé qu'une définition de vue la permission sur une table peut voir des métadonnées liée à la table dans le Sys.Objects Vue du catalogue. Cependant, Sans autorisations supplémentaires telles que Sélectionner ou contrôler, l'utilisateur ne peut pas lire les données de la table. P> BlockQuote>
Le droit sécuritaire pour accorder la permission de dépend de votre scénario. Cela pourrait être le DBO ou un autre schéma, il pourrait s'agir de la base de données elle-même, elle pourrait être des tables individuelles. Si j'étais à votre place, je voudrais signaler la procédure Reccontrol_system_option et accorderais une vue de vue sur la signature au niveau du serveur, une manière bien meilleure et sécurisée qui utilise des rôles et accorder la permission sur les rôles. Voir Signature d'une procédure activée pour un exemple de signer une procédure et accordez une permission de niveau de serveur sur la signature. p> p>
Super! Merci pour l'entrée. J'ai travaillé sur la façon de résoudre ce problème et tu m'as donné beaucoup de nourriture pour la pensée ....!
Comme Remus mentionné, la vocabilité des métadonnées affecte les données renvoyées lors de la requête des tables et des vues du système. Si vous n'avez aucun droit sur un élément sécurisé (objet, connexion, peu importe), il ne sera pas visible. P>
Selon votre situation, vous permettriez à l'appel interne d'avoir exécuté en tant que propriétaire ou d'envelopper des informations_schema.columns dans un UDF que Nous utilisons cette technique où nous interrogeons des métadonnées. P> exécuter comme propriétaire p> p> P>
a trouvé cela ailleurs, faites une SPRROC qui appelle SPROC SPROC SP_COLUMNS dans votre base de données. Votre SPROC peut exécuter avec les mêmes autorisations que vos autres Sprates. L'inconvénient est que l'ensemble retourné a de nombreuses colonnes que vous n'êtes probablement pas intéressé. Je pouvais affiner la SPROC. J'ai choisi de faire le choix du champ dans le code.
SET NOCOUNT ON; exec sp_columns @table_name = 'myTable', @table_owner = 'dbo';