Назад | Перейти на главную страницу

опция предоставления 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 привилегии. Ему не хватает 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;