MySQL:授予 CREATE VIEW 权限

Thi*_*n91 5 permissions mysql-5.6

我创建了一个新的数据库架构作为“company_security”,并使用非常流行的 Company-Employee 表的表结构填充数据库,其中包含 DEPARTMENT、DEPENDENT、DEPT_LOCATIONS、EMPLOYEE、PROJECT 和 WORKS_ON 表。然后我在根用户会话中创建了一个新用户,

CREATE USER 'user1'@'localhost' IDENTIFIED BY 'password1'

我想做的是在 EMPLOYEE 和 user1 的 WORKS_ON 上创建一个视图 WORKS_ON1(Fname,Lname,Pno) 。为此,我首先以 root 身份向 user1 授予必要的权限,如下所示。

GRANT SELECT ON company_security.WORKS_ON TO 'user1'@'localhost'
GRANT SELECT company_security.EMPLOYEE TO 'user1'@'localhost' 
GRANT CREATE VIEW ON company_security.* TO 'user1'@'localhost' 
Run Code Online (Sandbox Code Playgroud)

然后我刷新了权限,这是输出SHOW GRANTS for 'user1'@'localhost'

显示补助金的输出

然后我尝试从 user1 创建视图,

CREATE VIEW WORKS_ON1 AS select Fname,Lname,Pno from EMPLOYEE,WORKS_ON;
Run Code Online (Sandbox Code Playgroud)

但我遇到了这样的错误,

ERROR 1142 (42000): CREATE VIEW command denied to user 'user1'@'localhost' for table 'WORKS_ON1'
Run Code Online (Sandbox Code Playgroud)

我在 MySQL 论坛中发现了类似的问题,但他在解决方案中提到的 MySQL DOC 参考链接似乎已被删除。

所以我的问题是如何解决这个问题?即使我尝试通过授予 user1 在全局级别创建视图的权限来解决此问题,但也失败了。要么我们无法像错误所述那样授予 WORKS_ON1 视图的权限,因为数据库中尚不存在该视图。

我正在使用的 MySQL 版本:mysql Ver 14.14 Distrib 5.6.28,使用 EditLine 包装器的 debian-linux-gnu (x86_64)

Phi*_*lᵀᴹ 3

MySQL 文档中的权限更改何时生效对此进行了详细说明。

授权表重新加载会影响每个现有客户端连接的权限,如下所示:

表和列权限更改将在客户端发出下一个请求时生效。

数据库权限更改将在客户端下次执行 USE db_name 语句时生效。

注意 客户端应用程序可能会缓存数据库名称;因此,如果不实际更改到不同的数据库或刷新权限,他们可能看不到这种效果。

连接的客户端的全局权限和密码不受影响。这些更改仅对后续连接生效。