38

这个问题最初是使用 MySQL 5.1.44,但也适用于 MySQL 8.0+。

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

那么,是否可以创建一个只能访问单个的 MySQL 用户VIEW?也可以让这个用户成为只读访问权限VIEW吗?

谢谢!

PS:在我的示例中,我所说的用户实际上是希望使用自己的应用程序访问其记录的附属办公室。

4

5 回答 5

50

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

于 2010-06-24T09:28:50.983 回答
13

除了

GRANT SELECT ON <database_name>.<view_name>
TO <user>@<host>

最好也这样做

GRANT SHOW VIEW
ON <database_name>.<view_name> TO <user>@<host>

这样很多 SQL UI 工具就可以获取视图定义并为视图正常工作。

于 2013-06-26T23:29:29.743 回答
5
GRANT SELECT ON <database name>.<view name>
TO <user>@<host> IDENTIFIED BY '<password>'

资料来源:MySQL 文档

于 2010-06-24T09:33:59.937 回答
5

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

您可以通过将 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;
于 2013-12-11T00:15:30.333 回答
0

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

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

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

于 2015-04-22T13:41:47.193 回答