Nenhum usuário com TODOS OS PRIVILEGIOS

1

Encontrei um problema após a atualização do servidor MySQL. Provavelmente, o procedimento de upgrade foi para o sul. O resultado foi que nenhum dos usuários tinha concessão de ALL PRIVILEGES .

Todos os administradores tiveram GRANT SELECT, INSERT, UPDATE, DELETE, CREATE, DROP, RECARREGADO, SHUTDOWN, PROCESS, FILE, REFERÊNCIAS, INDEX, ALTER, SHOW DATABASES, SUPER, CREATE TABLES TEMPORÁRIOS, LOCK TABLES, EXECUTE , REPLICATION SLAVE, REPLICATION CLIENT, CREATE VIEW, SHOW VIEW, CREATE ROUTINE, ALTER ROUTINE, CREATE USER, TRIGGER ON e GRANT OPTION

Parece muito como ALL PRIVILEGES traduzido em privilégios individuais, mas obviamente algo está faltando. Depois de analisar os privilégios listados, descobri que todos os usuários não tinham o privilégio EVENT .

mysql> SELECT * FROM mysql.user WHERE Event_priv='Y'\G
Empty set (0.01 sec)

Agora, este privilégio foi adicionado no MySQL 5.16 e é definido como enum('N','Y') CHARACTER SET utf8 NOT NULL DEFAULT 'N' , então provavelmente UPDATE em usuários existentes falhou (ou está faltando nos scripts de atualização).

Depois de perceber o que estava errado, comecei a procurar uma solução aqui (quero dizer, se o usuário NÃO tem esse privilégio, como eu faço GRANT ?), e não encontrei problema exatamente como este.

    
por poncha 28.06.2012 / 12:32

2 respostas

1

Então eu pensei em perguntar, mas então eu pensei " espere um segundo, e se ... " e tentei UPDATE a tabela de usuários eu mesmo ... e VOILA! MySQL, na verdade, deixe-me fazer isso!

Então aqui está:

Pergunta : Como recuperar um privilégio EVENT ausente?

Resposta :

 mysql> UPDATE mysql.user SET Event_priv='Y' WHERE User='root';
 Query OK, 1 row affected (0.00 sec)

 mysql> FLUSH PRIVILEGES;
 Query OK, 0 rows affected (0.14 sec)

Em seguida, faça o login novamente no MySQL e é isso - SHOW GRANTS mostra a raiz tendo ALL PRIVILEGES novamente.

Então (e este é o meu palpite, corrija-me se eu estiver errado), contanto que você ainda tenha UPDATE privilege que afeta as tabelas de privilégios do mysql, você pode conceder privilégios a si mesmo ou a outros manualmente).

Eu tenho certeza que isso é conceitualmente OK (já que eu tenho UPDATE ...), mas como uma nota lateral eu diria que isso é meio estranho que eu possa alterar o meu próprio privilégios para um conjunto maior.

    
por 28.06.2012 / 12:32
2

Você deve estar ciente das - skip-grant-tables Opção de inicialização do MySQL - permite ignorar as verificações de permissão para fins de recuperação. Um daemon iniciado com esta opção permitiria um login root sem uma senha com ALL PRIVILEGES concedido. Você pode mudar o que quiser a partir daí.

Observação: como a execução com uma conta raiz sem senha provavelmente apresenta um risco de segurança, você deve especificar - skip-networking também.

    
por 28.06.2012 / 14:14