Accorder à un utilisateur la permission de ne voir qu'une vue mysql

la question ci-dessous concerne MySQL 5.1.44

disons que j'ai une table avec des enregistrements insérés par différents utilisateurs de mon application. Comment puis-je donner à un utilisateur un accès spécifique pour voir seulement ses dossiers dans cette table? J'ai pensé à la création d'un VIEW avec l'ensemble de son dossier, mais je ne sais pas comment créer un utilisateur mysql qui peut seulement voir que VIEW.

alors, est - il possible de créer un utilisateur mysql qui n'a accès qu'à un seul VIEW? cela peut-il également être faits de sorte qu'ils accès en lecture seule à qui VIEW?

Merci!

PS: Ce que j'appelle utilisateurs dans mon exemple, il y a vraiment des bureaux secondaires qui veulent accéder à leurs dossiers avec leurs propres applications.

21
demandé sur puk 2010-06-24 13:24:57

5 réponses

GRANT SELECT ON database1.view1 TO 'someuser'@'somehost';

29
répondu Naktibalda 2012-11-14 21:44:31

Outre

GRANT SELECT ON <database_name>.<view_name>
TO <user>@<host>
IDENTIFIED BY '<password>'

il vaut mieux aussi faire

GRANT SHOW VIEW
ON <database_name>.<view_name> TO <user>@<host>
IDENTIFIED BY '<password>'

de sorte que beaucoup D'outil D'UI SQL peut obtenir la définition de la vue et travailler de manière appropriée pour la vue.

8
répondu Dexin Wang 2013-10-04 11:03:07
GRANT SELECT ON <database name>.<view name>
TO <user>@<host> IDENTIFIED BY '<password>'

Source: MySQL Documentation

5
répondu Anax 2010-06-24 09:33:59

je crois que la question originale est en fait de savoir comment limiter les lignes à celles appartenant à un utilisateur donné. (L'idée de créer une vue par utilisateur, puis d'accorder juste cela, semble comme une solution de contournement.)

Vous pouvez le faire en insérant la référence user () dans la table de données, puis en filtrant sur celle-ci.

Utilisant MySQL 5.6. Créer une vue qui limite SELECT aux seuls enregistrements appartenant à l'utilisateur courant:

-- check the current user
select user();

create table t1 (myId int, mydata varchar(200), myName varchar(200));

insert t1 select 1, 'my data yes', user();
insert t1 select 2, 'my data yes2', user();
insert t1 select 3, 'my data no', 'joe';

select * from t1;

create or replace view v1 AS
select * from t1 where myName = user();

select * from v1;
3
répondu Rich Fried 2013-12-11 00:15:30

Si vous voulez faire de l'affichage en lecture seule qui, je suppose que vous faites. Ensuite, vous devez créer la vue avec L'algorithme = TEMPTABLE clause.

ceci fera que la vue ne sera lue qu'en vertu de l'obligation de créer une table temporaire.

une autre façon d'obtenir la lecture seule et cela dépend de vos données est de coller une fonction agrégée. Par exemple si vous avez une vue qui est basée sur une table et montre toutes les colonnes alors vous pouvez coller un distinct sur le select.

0
répondu Daniel Fisher 2015-04-22 13:41:47