web-dev-qa-db-fra.com

Quelles autorisations sont nécessaires pour voir les définitions d'affichage via une requête?

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.

Read_only_user_permission

5
Bruder Lustig

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]

3
S4V1N

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

2
sepupic