Предоставьте разрешение пользователя только для просмотра представления mysql
приведенный ниже вопрос относится к MySQL 5.1.44
предположим, у меня есть таблица с записями, вставленными разными пользователями моего приложения. Как я могу предоставить конкретному пользователю доступ только к его / ее записям в этой таблице? Я думал о создании VIEW
с его / ее записями, но я не знаю, как создать пользователя mysql, который может видеть только это VIEW
.
Итак, можно ли создать mysql-пользователя, который имеет доступ только к одному VIEW
? может ли этот пользователь там доступ только для чтения к этому VIEW
?
спасибо!
PS: что я называю пользователи в моем примере действительно дочерние офисы, которые хотят получить доступ к своим записям со своими собственными приложениями.
5 ответов
кроме того
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.