Предоставьте разрешение пользователя только для просмотра представления mysql

приведенный ниже вопрос относится к MySQL 5.1.44

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

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

спасибо!

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

5 ответов


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


кроме того

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 UI могут получить определение представления и работать соответствующим образом для представления.


GRANT SELECT ON <database name>.<view name>
TO <user>@<host> IDENTIFIED BY '<password>'

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


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

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

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

-- 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;

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

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

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