无法使用mysql的root用户授予用户权限

8

我正在尝试为MySQL上的用户授予显式权限,我正在为已创建的用户执行以下操作:

GRANT SELECT, INSERT, UPDATE, DELETE, CREATE, INDEX, ALTER, SHOW DATABASES, 
 CREATE TEMPORARY TABLES, LOCK TABLES, EXECUTE, CREATE VIEW, SHOW VIEW, 
 CREATE ROUTINE, ALTER ROUTINE, EVENT, TRIGGER 
ON mydatabase.* 
TO 'myuser'@'localhost' ;

但是我遇到这个奇怪的错误:
Incorrect usage of DB GRANT and GLOBAL PRIVILEGES

我尝试使用其他用户进行GRANT ALL PRIVILEGES的其他模式,似乎可以正常工作。有什么想法吗?

3个回答

20

有些权限只有当授权参照 ON *.* 时才有意义。

手册页面 https://dev.mysql.com/doc/refman/5.7/en/grant.html 列出了所有可用的权限,并针对每个权限标注了全局数据库表格,这取决于您是否可以在不同级别的范围内授予它们。

SHOW DATABASES 权限只能在全局级别上授予。

因此,您必须以这种方式执行:

GRANT SHOW DATABASES 
ON *.* 
TO 'myuser'@'localhost' ;

GRANT SELECT, INSERT, UPDATE, DELETE, CREATE, INDEX, ALTER, 
 CREATE TEMPORARY TABLES, LOCK TABLES, EXECUTE, CREATE VIEW, SHOW VIEW, 
 CREATE ROUTINE, ALTER ROUTINE, EVENT, TRIGGER 
ON mydatabase.* 
TO 'myuser'@'localhost' ;

就像这样运行,但是当我使用用户myuser登录时,我看不到模式:s好像它没有权限。 - jpganz18

0

我遇到了一个奇怪的问题,即“root”用户具有授予权限的权限,但我仍然必须使用用户“admin”。

使用root,我得到:

SQL Error [1045] [28000]: Access denied for user 'root'@'%' (using password: YES)

可能只是配置问题,但是当我在DBeaver的GUI中查找它(连接 --> 用户 --> 授权 --> 查看授权),它们都有所有的权限被选中,但我仍然无法以"root"用户授予权限。

也许对于另一种奇怪的数据库设置会有所帮助。

管理员:

enter image description here

根:

enter image description here


0
我遇到了与下面相同的错误:
错误 1221 (HY000):DB GRANT 和 GLOBAL PRIVILEGES 的使用不正确
当我使用用户 root 登录,并且按照下面的方式给用户 john 在数据库 apple 中的所有表上授予 PROCESS 权限时,出现了这个错误:
```sql GRANT PROCESS ON apple.* TO john WITH GRANT OPTION; ```
GRANT PROCESS ON apple.* TO 'john'@'localhost';

所以,我在所有数据库的所有表上给予了PROCESS权限(*.*),如下所示,然后我就能解决这个错误了:
GRANT PROCESS ON *.* TO 'john'@'localhost';

实际上,文档 下面有说:
因为任何静态全局权限都被视为对所有数据库的权限,...
而且,我只在所有数据库的 *.person 表上给予了 PROCESS 权限,如下所示,但是我遇到了错误:
GRANT PROCESS ON *.person TO 'john'@'localhost';

所以,我们需要在所有数据库的所有表上授予类似于PROCESSFILEREPLICATION SLAVE等的全局静态权限,如下所示,否则会出现错误:
GRANT [STATIC_GLOBAL_PRIVILEGES] ON *.* TO <USER>;

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接