无法在 mysql 上使用 root 向用户授予权限

问题描述 投票:0回答:3

我正在尝试向 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' ;

但是我遇到了这个奇怪的错误:

DB GRANT 和 GLOBAL PRIVILEGES 的错误使用

我尝试与其他用户一起尝试其他模式,授予所有权限,并且似乎有效。有什么想法吗?

sql mysql database privileges sql-grant
3个回答
20
投票

某些权限仅在授予引用

ON *.*
作为 schema.table 时才有意义。

手册页 https://dev.mysql.com/doc/refman/5.7/en/grant.html 列出了所有可用的权限,并为 globaldatabasetable、based是否可以在不同级别的范围内授予它们。

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' ;

0
投票

我有一个奇怪的事情,“root”用户有权授予权限,但我仍然必须使用用户“admin”来代替。

root后,我得到:

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

这可能只是设置问题,但是当我在 DBeaver 的 GUI 中查找它时(连接 --> 用户 --> 授予 --> 查看授予),它们都检查了所有权限,但我仍然无法授予“root”用户的权限。

也许它可以帮助那些进行另一种奇怪的数据库设置的人。

管理员:

根:


0
投票

我在下面遇到了同样的错误:

错误 1221 (HY000):DB GRANT 和 GLOBAL PRIVILEGES 的使用不正确

当我通过用户 apple 登录,将仅

apple.*
数据库 (
john
) 中所有表的
PROCESS
权限授予用户 root
GRANT
时,如下所示:

GRANT PROCESS ON apple.* TO 'john'@'localhost';

所以,我对所有数据库中的所有表(

PROCESS
)赋予了
*.*
权限,如下所示,然后我就可以解决错误:

GRANT PROCESS ON *.* TO 'john'@'localhost';

实际上,医生说如下:

因为任何静态全局权限都被视为所有数据库的权限,...

并且,我仅对所有数据库中的

PROCESS
表(
orange
)授予了
*.orange
权限,如下所示,但出现错误:

GRANT PROCESS ON *.orange TO 'john'@'localhost';

因此,我们需要对所有数据库(PROCESS)中的所有表授予

静态全局权限
,如*.*FILE
REPLICATION SLAVE
等,如下所示,否则会出现错误:

GRANT [STATIC_GLOBAL_PRIVILEGES] ON *.* TO <USER>;
© www.soinside.com 2019 - 2024. All rights reserved.