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) 

我究竟做错了什么?

您的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@localhostlogin(并且这在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;