Por causa de alguns problemas, decidi recriar todos os usuários, exceto o root@localhost
. Isso funciona bem, mas o usuário recém-criado não tem o direito de fazer nada. O que eu quero é simplesmente dar todos os direitos de root em algum IP local. Eu (as root@localhost
) tentei
CREATE USER 'root'@'10.0.3.210';
GRANT ALL ON *.* TO 'root'@'10.0.3.210';
O primeiro comando funciona, o segundo falha com a mensagem
ERROR 1045 (28000): Access denied for user 'root'@'localhost'
Não entendo por root@localhost
que não posso fazer tudo, tenho certeza de que não mexi com seus privilégios. De
SHOW GRANTS FOR 'root'@'localhost'
eu recebo
Grants for root@localhost
GRANT SELECT, INSERT, UPDATE, DELETE, CREATE, DROP, RELOAD, SHUTDOWN, PROCESS, FILE, REFERENCES, INDEX, ALTER, SHOW DATABASES, SUPER, CREATE TEMPORARY TABLES, REPLICATION SLAVE, REPLICATION CLIENT, CREATE USER ON *.* TO 'root'@'localhost' WITH GRANT OPTION
GRANT ALL PRIVILEGES ON `%`.* TO 'root'@'localhost' WITH GRANT OPTION
o que isso significa. Estou perdendo um privilégio necessário? Pode ser consertado?
Estou trabalhando com o mysql Ver 14.14 Distrib 5.1.61, para debian-linux-gnu (x86_64).
mysql
permissions
maaartinus
fonte
fonte
GRANT SELECT ON *.* TO 'root'@'10.0.3.210';
?Respostas:
Oh meu Deus, acho que o problema decorre da mistura do esquema mysql de diferentes versões do mysql. Primeiro de tudo, execute esta consulta:
Para o MySQL 5.6, você obtém 43 colunas
Para o MySQL 5.5, você obtém 42 colunas
Para o MySQL 5.1, você obtém 39 colunas
Para o MySQL 5.0, você recebe 37 colunas
Para o MySQL 4.x, você obtém 31 colunas
Imagine este cenário:
As permissões do usuário começam a ser alteradas. Sempre que você executa
SHOW GRANTS;
, é difícil esperar colunas em locais específicos no mysql.user (dado que o mysql.user é um MyISAM e seu ROW_FORMAT é dinâmico (padrão)). É muito fácil ver um usuário perder permissões repentinamente quando você recarrega uma versão do MySQL 5.0 do mysql.user em uma instância do MySQL 5.1.No futuro, se você decidir recarregar usuários no MySQL, tente despejá-los em um arquivo de texto usando pt-show-grant em vez de mysqldump.
Na verdade, eu escrevi minha própria versão do pt-show-grant da seguinte maneira:
Isso produzirá todas as concessões de usuário como SQL, que é muito mais portátil que as técnicas padrão do mysql. Simplesmente recarregue o script SQL e os GRANTS serão executados. Obviamente, esse recarregamento é compatível apenas para a frente, nunca para trás.
fonte
O comentário de
gbn
me trouxe a solução: não fazia ideia de como ele veio, masroot@localhost
estavam faltando alguns privilégios. Então, primeiro obtenha-os todos viaExistem algumas colunas, portanto, usar algo como
pode economizar bastante digitação. Provavelmente
FLUSH PRIVILEGES
é necessário após as atualizações. Depois de ter todos os privilégios, também posso concedê-los.fonte
Vi um problema em que você não pode
GRANT CREATE TABLESPACE
.No entanto, não tenho certeza de todos os detalhes e vi no 5.5 / Solaris
Meu comentário acima e sua resposta indicam que isso pode ser aplicado aqui. Ou seja, você pode conceder tudo, exceto
CREATE TABLESPACE
permissõesfonte
Como o @RolandoMYSQLDBA afirmou corretamente, esse problema ocorre devido à atualização da sua versão do MySQL, mantendo os arquivos mais antigos por aí (sem descarregar / restaurar). O @gbn também concluiu corretamente que isso está relacionado ao
CREATE TABLESPACE
privilégio que foi adicionado no MySQL 5.5. Você provavelmente possui arquivos de banco de dados do MySQL 5.1.A solução simples (que também está documentada no manual de referência do MySQL ) é executar
mysql_upgrade
e, eventualmente, pular asGRANT
tabelas:fonte