我有一个 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;