opção de concessão do mysql

5

Eu tenho um usuário mysql que atualmente possui os seguintes privilégios:

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 |
+--...--+

Gostaria que fosse capaz de fazer isso com outro usuário:

mysql> grant all privileges on *.* to 'foo'@'%' identified by 'bar';
ERROR 1045 (28000): Access denied for user 'debian-sys-maint'@'localhost' (using password: YES)

O que estou fazendo de errado?

    
por Johannes Ernst 08.05.2012 / 03:17

1 resposta

5

Seu usuário sys-maint@localhost não tem ALL privileges. Está faltando o privilégio CREATE TABLESPACE .

Se o seu usuário realmente tivesse ALL privileges, você teria SHOW GRANTS; :

GRANT ALL PRIVILEGES ON *.* TO 'debian-sys-maint'@'localhost' IDENTIFIED BY PASSWORD '*DA604C65D4EFF216D1F61FCD42726FA881FB6562' WITH GRANT OPTION

Para poder fazer um GRANT ALL em outro usuário ou em um novo usuário, o usuário que emite o GRANT ALL precisa ter todas as permissões ou a concessão falhará.

Para conceder ao usuário 'sys-maint @ localhost', o usuário CREATE TABLESPACE permissions emite o seguinte comando em uma conta que tenha direitos suficientes para fazer isso (por exemplo, root):

GRANT CREATE TABLESPACE ON *.* TO 'sys-maint@localhost';

Ou quando logado como sys-maint@localhost (e isso funciona no MySQL 5.5) faça o seguinte:

USE mysql;
UPDATE user SET 'Create_tablespace_priv'='Y' 
            WHERE user='sys-maint' AND host='localhost';
FLUSH PRIVILEGES;

Efetue logout e, em seguida, efetue login novamente ( QUIT se estiver usando a linha de comando mysql client ou desconecte se estiver usando um cliente GUI como HeidiSQL) e sys-maint@localhost poderá emitir o comando GRANT ALL .

Isso funciona porque seu sys-maint@localhost já tem privilégios suficientes para atualizar a tabela user .

E como sempre, ao mexer com as permissões do MySQL, lembre-se de fazer um FLUSH PRIVILEGES;

    
por 08.05.2012 / 04:06