У меня есть пользователь 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
привилегии. Ему не хватает 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
клиент или отключиться при использовании клиента с графическим интерфейсом, такого как HeidiSQL) и sys-maint@localhost
должен иметь возможность выдать GRANT ALL
команда.
Это работает, потому что ваш sys-maint@localhost
уже имеет достаточные привилегии для обновления user
стол.
И, как всегда, переделывая разрешения MySQL, не забудьте сделать FLUSH PRIVILEGES;