授予用户仅查看mysql视图的权限

时间:2010-06-24 09:24:57

标签: mysql view permissions database-permissions grant

以下问题适用于MySQL 5.1.44

假设我有一个表,其中包含由我的应用程序的不同用户插入的记录。如何授予特定用户访问权限,仅查看该表中的记录?我曾考虑用他/她的记录创建VIEW,但我不知道如何创建只能看到VIEW的mysql用户。

那么,是否可以创建一个只能访问单个VIEW的mysql用户?这个用户是否也可以这样对他们VIEW进行只读访问?

谢谢!

PS:在我的示例中,我所谓的用户实际上是想要使用自己的应用程序访问其记录的子公司。

5 个答案:

答案 0 :(得分:31)

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

答案 1 :(得分:9)

除了

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工具都可以获得视图定义并适合视图。

答案 2 :(得分:5)

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

来源:MySQL Documentation

答案 3 :(得分:3)

我认为最初的问题实际上是询问如何将行限制为给定用户拥有的行。 (为每个用户创建一个视图,然后授予它的想法,似乎是一种解决方法。)

您可以通过将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;

答案 4 :(得分:0)

如果您想让视图只读,我怀疑您这样做。然后,您应该使用ALGORITHM = TEMPTABLE子句创建视图。

这将使视图只读它必须创建一个临时表。

实现只读的另一种方法,这取决于你的数据是坚持聚合函数。例如,如果您有一个基于表格的视图并显示所有列,那么您可以在选择上粘贴一个不同的列。