我有一个当前具有以下权限的 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 |
+--...--+
Run Code Online (Sandbox Code Playgroud)
我希望它能够对另一个用户这样做:
mysql> grant all privileges on *.* to 'foo'@'%' identified by 'bar';
ERROR 1045 (28000): Access denied for user 'debian-sys-maint'@'localhost' (using password: YES)
Run Code Online (Sandbox Code Playgroud)
我究竟做错了什么?
您的sys-maint@localhost用户没有ALL权限。它缺乏CREATE TABLESPACE特权。
如果您的用户确实拥有ALL特权,那么当您执行 a 时,SHOW GRANTS;您会看到:
GRANT ALL PRIVILEGES ON *.* TO 'debian-sys-maint'@'localhost' IDENTIFIED BY PASSWORD '*DA604C65D4EFF216D1F61FCD42726FA881FB6562' WITH GRANT OPTION
Run Code Online (Sandbox Code Playgroud)
为了能够GRANT ALL对另一个或新用户执行操作,发出该命令的用户GRANT ALL必须自己拥有所有权限,否则授予将失败。
要授予您的“sys-maint@localhost”用户CREATE TABLESPACE权限,请从具有足够权限的帐户(例如 root)发出以下命令:
GRANT CREATE TABLESPACE ON *.* TO 'sys-maint@localhost';
Run Code Online (Sandbox Code Playgroud)
或者当以身份登录sys-maint@localhost(这适用于 MySQL 5.5)时,请执行以下操作:
USE mysql;
UPDATE user SET `Create_tablespace_priv`='Y'
WHERE user='sys-maint' AND host='localhost';
FLUSH PRIVILEGES;
Run Code Online (Sandbox Code Playgroud)
注销然后重新登录(QUIT如果使用命令行mysql客户端,或者如果使用诸如 HeidiSQL 之类的 GUI 客户端则断开连接)并且sys-maint@localhost应该能够发出GRANT ALL命令。
这是有效的,因为您sys-maint@localhost已经有足够的权限来更新user表。
和往常一样,在修改 MySQL 权限时,请记住执行以下操作 FLUSH PRIVILEGES;
| 归档时间: |
|
| 查看次数: |
2201 次 |
| 最近记录: |