我正在尝试向 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 的错误使用
我尝试与其他用户一起尝试其他模式,授予所有权限,并且似乎有效。有什么想法吗?
某些权限仅在授予引用
ON *.*
作为 schema.table 时才有意义。
手册页 https://dev.mysql.com/doc/refman/5.7/en/grant.html 列出了所有可用的权限,并为 global、database、table、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' ;
我在下面遇到了同样的错误:
错误 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>;