Предоставьте пользователю разрешение только на просмотр MySQL - PullRequest
24 голосов
/ 24 июня 2010

Следующий вопрос относится к MySQL 5.1.44

Допустим, у меня есть таблица с записями, вставленными разными пользователями моего приложения. Как я могу дать конкретному пользователю доступ только для просмотра его / ее записей в этой таблице? Я думал о создании VIEW с его / ее записями, но я не знаю, как создать пользователя mysql, который может видеть только это VIEW.

Итак, возможно ли создать пользователя mysql, который имеет доступ только к одному VIEW? можно ли сделать этого пользователя таким, чтобы он имел доступ только для чтения к этому VIEW?

Спасибо!

PS: то, что я называю пользователи , в моем примере - это действительно вспомогательные офисы, которые хотят получить доступ к своим записям с помощью своих собственных приложений.

Ответы [ 5 ]

32 голосов
/ 24 июня 2010

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

9 голосов
/ 27 июня 2013

Кроме

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

лучше тоже сделать

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

так что многие средства пользовательского интерфейса SQL могут получить определение представления и работать соответствующим образом для представления.

5 голосов
/ 24 июня 2010
GRANT SELECT ON <database name>.<view name>
TO <user>@<host> IDENTIFIED BY '<password>'

Источник: Документация MySQL

3 голосов
/ 11 декабря 2013

Я полагаю, что первоначальный вопрос на самом деле спрашивает, как ограничить строки теми, которые принадлежат данному пользователю.(Идея создания одного представления для каждого пользователя, а затем предоставления только этого, кажется обходным решением.)

Вы можете сделать это, вставив ссылку user () в таблицу данных, а затем отфильтровав ее.

Использование MySQL 5.6.Создайте представление, которое ограничивает SELECT только записями, принадлежащими текущему пользователю:

-- 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;
0 голосов
/ 22 апреля 2015

Если вы хотите сделать просмотр только для чтения, что я подозреваю, что вы делаете. Затем вы должны создать представление с предложением ALGORITHM = TEMPTABLE.

Это сделает представление доступным только для чтения благодаря необходимости создания временной таблицы.

Еще один способ добиться только для чтения, и это зависит от ваших данных, это прикрепить агрегатную функцию. Например, если у вас есть представление, основанное на таблице и показывающее все столбцы, вы можете прикрепить отличное к выбору.

...