mysql 授予选项

mysql 授予选项

我有一个 mysql 用户,当前具有以下权限:

mysql> show grants;
+--...--+
| Grants for debian sys-maint@localhost
+--...--+
| GRANT SELECT, INSERT, UPDATE, DELETE, CREATE, DROP, RELOAD, SHUTDOWN, PROCESS, FILE, REFERENCES, INDEX, ALTER, SHOW DATABASES, SUPER, CREATE TEMPORARY TABLES, LOCK TABLES, EXECUTE, REPLICATION SLAVE, REPLICATION CLIENT, CREATE VIEW, SHOW VIEW, CREATE ROUTINE, ALTER ROUTINE, CREATE USER, EVENT, TRIGGER ON *.* TO 'debian-sys-maint'@'localhost' IDENTIFIED BY PASSWORD '*DA604C65D4EFF216D1F61FCD42726FA881FB6562' WITH GRANT OPTION |
+--...--+

我希望它能够对另一个用户执行此操作:

mysql> grant all privileges on *.* to 'foo'@'%' identified by 'bar';
ERROR 1045 (28000): Access denied for user 'debian-sys-maint'@'localhost' (using password: YES)

我究竟做错了什么?

答案1

您的sys-maint@localhost用户没有ALL权限。缺少CREATE TABLESPACE权限。

如果您的用户确实有ALL权限,那么当您执行时,SHOW GRANTS;您会看到:

GRANT ALL PRIVILEGES ON *.* TO 'debian-sys-maint'@'localhost' IDENTIFIED BY PASSWORD '*DA604C65D4EFF216D1F61FCD42726FA881FB6562' WITH GRANT OPTION

为了能够GRANT ALL对另一个用户或新用户执行操作,发出操作的用户GRANT ALL自己必须拥有所有权限,否则授予将失败。

要授予您的“sys-maint@localhost”用户CREATE TABLESPACE权限,请从具有足够权限的帐户(例如 root)发出以下命令:

GRANT CREATE TABLESPACE ON *.* TO 'sys-maint@localhost';

或者以以下身份登录sys-maint@localhost(这在 MySQL 5.5 上有效)时执行以下操作:

USE mysql;
UPDATE user SET `Create_tablespace_priv`='Y' 
            WHERE user='sys-maint' AND host='localhost';
FLUSH PRIVILEGES;

注销然后重新登录(QUIT如果使用命令行mysql客户端,或者如果使用 GUI 客户端(如 HeidiSQL)则断开连接)并且sys-maint@localhost应该能够发出GRANT ALL命令。

这是有效的,因为您sys-maint@localhost已经拥有足够的权限来更新user表。

和往常一样,在修改 MySQL 权限时,记得执行FLUSH PRIVILEGES;

相关内容