Esse é um conjunto normal de privilégios do MySQL?

9

Usando o phpmyadmin em uma configuração local de wamp de teste e, assim como praticamente os estados do título, existem 3 usuários marcados como user = ANY, password = NO, como:

USER | HOST    | Password | Global Priv | Grant
-----+---------+----------+-------------+------
Any  | %       | No       | USAGE       | No
Any  | Local   | No       | USAGE       | No
Any  | Domain  | No       | USAGE       | No
-----+---------+----------+-------------+------

Nenhum dos três usuários possui privilégios específicos para nenhuma tabela; portanto, parece que eles não podem fazer muito. Isso é algum tipo de medida de segurança genérica, para declarar explicitamente que 'Qualquer usuário' que não se enquadra em nenhum outro grupo de usuários não tem privilégios?

Chris
fonte
Esta é realmente uma pergunta muito boa porque o mysql vem com permissões padrão que não são publicadas. +1 !!!
RolandoMySQLDBA

Respostas:

6

Na realidade, essas três contas de usuário são realmente bastante perigosas. Eles representam uma ameaça muito grande para testar bancos de dados.

Infelizmente, o mysql vem com acesso total aos bancos de dados de teste. Como você pode encontrá-los?

Execute esta consulta:

 SELECT user,host,db from mysql.db;

Após a instalação do mysql, você verá duas linhas que dão acesso total a qualquer banco de dados chamado 'test' ou cujos 5 primeiros caracteres sejam 'test_'.

Porque isto é um problema ???

Tente executar este comando:

$ mysql -u'' -Dtest

Você conectou o banco de dados de teste sem uma senha.

Agora, crie uma tabela e carregue-a com uma linha:

CREATE TABLE mytable (a int);
INSERT INTO mytable VALUES (1);

OK, grande coisa. Você poderia dobrar essa mesa em tamanho 30 vezes ???

INSERT INTO mytable SELECT * FROM mytable;
INSERT INTO mytable SELECT * FROM mytable;
... (30 times)
INSERT INTO mytable SELECT * FROM mytable;

O que você ganha ?? Uma tabela com 1.073.741.824 linhas. Facilmente, 4 GB +.

Imagine criar qualquer tabela de qualquer tamanho. Que tal criar um monte de tabelas no banco de dados de teste e acessá-las livremente à vontade?

A melhor coisa que você pode fazer nessas circunstâncias é executar esta consulta:

DELETE FROM mysql.db;

e reinicie o mysql. Em seguida, essas três contas serão devidamente inoperantes.

De uma chance !!!

UPDATE 2011-09-12 10:00 EDT

Esta exclusão:

DELETE FROM mysql.db;
FLUSH PRIVILEGES;

é exatamente o que você precisa para uma instalação inicial. No entanto, se você já tiver usuários estabelecidos, poderá executar isso:

DELETE FROM mysql.db WHERE db IN ('test','test_%');
FLUSH PRIVILEGES;

Isso removerá as duas permissões específicas do banco de dados.

Como mencionei na minha resposta, as três permissões são muito perigosas para bancos de dados de teste. A execução deste DELETE neutralizará essas contas por terem direitos totais para testar bancos de dados.

RolandoMySQLDBA
fonte
Obrigado pela explicação, mas DELETE FROM mysql.db excluirá mais alguma parte desses 3 usuários? Eu não quero excluir quaisquer dados / privilégios além daqueles 3
Chris
@ Chris - Eu atualizei minha resposta 3 horas atrás para endereçar seu comentário.
RolandoMySQLDBA
-1

O perigo de manter essas contas anônimas já foi muito bem explicado.

O manual fornece uma lista abrangente de etapas a serem seguidas para " Proteger as contas iniciais do MySQL ".

Em particular, a seção "Atribuindo senhas de contas anônimas" recomenda a remoção dessas contas.

Além disso, o capítulo "Protegendo bancos de dados de teste" aconselha:

Por padrão, a mysql.dbtabela contém linhas que permitem o acesso de qualquer usuário ao testbanco de dados e outros bancos de dados com nomes que começam com test_. (...) Isso significa que esses bancos de dados podem ser usados ​​mesmo por contas que não possuem privilégios. Se você deseja remover o acesso de qualquer usuário aos bancos de dados de teste, faça o seguinte:

mysql> DELETE FROM mysql.db WHERE Db LIKE 'test%';
mysql> FLUSH PRIVILEGES;

(...) Com a alteração anterior, apenas usuários que possuem privilégios de banco de dados global ou privilégios concedidos explicitamente para o banco de dados de teste podem usá-lo.

Em particular, em sistemas não Windows, é recomendável executar o mysql_secure_installationscript. O instalador do Windows, acredito, oferece vários perfis de instalação. Alguns deles desativam automaticamente configurações não seguras. Caso contrário, a lista de verificação precisará ser executada manualmente.

Cuidados devem ser tomados com instaladores de terceiros, como o WAMP. As permissões padrão indicadas no manual oficial do MySQL nem sempre podem se aplicar a essas instalações personalizadas (como "fora do escopo do manual). É claro que, para um servidor de produção, as instalações WAMP e os gostos devem ser evitados a todo custo .

RandomSeed
fonte
por que o voto negativo nesta resposta?
User12345