J'ai les droits d'administrateur complets sur notre base de données et je peux donc interroger et voir les définitions des vues. Je veux cependant interroger les vues avec un utilisateur en lecture seule dans une magie de travail JDBC Jenkins. Le problème: contrairement à mon administrateur, l'utilisateur en lecture seule ne voit pas le code/les définitions d'une vue.
Cette requête me donne toutes les définitions de vue et les métadonnées dont j'ai besoin pour toutes les vues lorsque j'agis en tant qu'administrateur:
SELECT name AS VIEW_NAME,
definition,
create_date,
modify_date
FROM [my_database].[sys].[all_views]
JOIN [my_database].[sys].[sql_modules]
ON [my_database].[sys].[all_views].object_id = [my_database].[sys].[sql_modules].object_id
Par conséquent, lors de l'exécution de la requête en tant qu'administrateur, j'obtiens des entrées comme:
name | definition | create_date | modify_date
sample_view | SELECT * FROM bla | 01.01.2017 | 02.01.2017
Cependant, pas tellement quand je le fais avec mon utilisateur en lecture seule, je reçois
name | definition | create_date | modify_date
sample_view | null | 01.01.2017 | 02.01.2017
Ici, vous pouvez voir ma configuration d'autorisation pour l'utilisateur en lecture seule. Bien que je lui ai accordé l'autorisation nécessaire, les définitions de vue ne sont pas visibles pour l'utilisateur dans un jeu de résultats.
Il est en outre très étrange qu'après avoir autorisé l'utilisateur à effectuer des instructions de définition SELECT et VIEW et enregistré la configuration, une deuxième entrée pour SELECT et VIEW DEFINITION ait été ajoutée à la table de configuration.
Accorder simplement les autorisations VIEW DEFINITION et SELECT sur INFORMATION_SCHEMA
et sys
le schéma ne vous donnera pas le droit de voir la définition de la vue.
Les autorisations que vous avez ajoutées vous fourniront des informations sur tous les objets du schéma sys et du schéma_informations.
Je suppose que vous voulez voir la définition de la vue qui est créée dans un autre schéma, auquel cas vous devrez fournir à l'utilisateurVIEW DEFINITION
à ce schéma particulier.
Tel que : GRANT VIEW DEFINITION ON SCHEMA::SchemaWhereViewsAreCreated TO [YourUser]
Vous devez accorder VIEW DEFINITION
directement sur la ou les vues qui vous intéressent, afin de permettre à votre utilisateur de voir sa (leur) définition comme ceci:
grant view definition on object::sch.vw_MyView to MyUser
Vous ne devez pas donner une autorisation sur le schéma, cela violera le principe du moindre privilège car dans ce cas, votre utilisateur pourra voir toutes les définitions d'objet de ce schéma, telles que les fonctions/procédures stockées