Подтвердить что ты не робот

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

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

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

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

Спасибо!

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

4b9b3361

Ответ 1

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

Ответ 2

Кроме того,

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

Ответ 4

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

Вы можете сделать это, вставив ссылку 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;

Ответ 5

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

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

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