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

Nel*_*son 27 mysql permissions view grant database-permissions

以下问题适用于MySQL 5.1.44

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

那么,是否有可能创建一个只能访问单个用户的mysql用户VIEW?这个用户也可以这样做,以便他们只读访问权限VIEW吗?

谢谢!

PS:在我的例子中,我称之为用户的是真正的附属办事处,他们希望使用自己的应用程序访问他们的记录.

Nak*_*lda 35

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

  • 请注意,发出create view命令的用户(称为视图定义器)也会对此产生影响.if definer!=使用该视图的用户,这可能相当混乱.例如,如果定义者仅对基础表具有选择权限,而另一个用户对视图具有更新权限,则尝试更新视图将导致权限被拒绝错误. (5认同)

Dex*_*ang 10

除了

GRANT SELECT ON <database_name>.<view_name>
TO <user>@<host>
IDENTIFIED BY '<password>'
Run Code Online (Sandbox Code Playgroud)

它也更好

GRANT SHOW VIEW
ON <database_name>.<view_name> TO <user>@<host>
IDENTIFIED BY '<password>'
Run Code Online (Sandbox Code Playgroud)

这样很多SQL UI工具都可以获得视图定义并适合视图.


小智 6

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

您可以通过将 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;
Run Code Online (Sandbox Code Playgroud)


Ana*_*nax 5

GRANT SELECT ON <database name>.<view name>
TO <user>@<host> IDENTIFIED BY '<password>'
Run Code Online (Sandbox Code Playgroud)

来源:MySQL文档