我有一个目前有以下权限的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)
我究竟做错了什么?
您的sys-maint@localhost
用户不具有ALL
权限。 它缺lessCREATE 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
login(并且这在MySQL 5.5上工作)时,请执行以下操作:
USE mysql; UPDATE user SET `Create_tablespace_priv`='Y' WHERE user='sys-maint' AND host='localhost'; FLUSH PRIVILEGES;
注销然后重新login(如果使用命令行mysql
客户端则QUIT
如果使用诸如HeidiSQL的GUI客户端则断开连接),并且sys-maint@localhost
应该能够发出GRANT ALL
命令。
这是有效的,因为你的sys-maint@localhost
已经有足够的权限来更新user
表了。
和往常一样,在修改MySQL权限时,记得做一个FLUSH PRIVILEGES;