sábado, 18 de maio de 2013

Usuários do MySQL :: Doações :: mysql_config_editor :: Segurança

Original post: http://anothermysqldba.blogspot.com/2013/05/mysql-users-grants-mysqlconfigeditor.html

Acesso seguro ao banco de dados é provavelmente a prioridade número um para qualquer administrador de banco de dados. Se não for, então você precisa olhar seriamente para porque não é. 

Diretrizes gerais através do manual já estão disponíveis: 


Um dos principais problemas com a segurança em MySQL é, naturalmente, as permissões que dão aos usuários. 
Estas são algumas orientações simples. 

Primeiramente, tenha "super usuário" ou contas de "raiz" a um mínimo. Um usuário com acesso total ou "GRANT ALL" ainda terá acesso quando tiver atingido suas conexões max.Assim, a última coisa que você quer é um programa a ser a execução de comandos com um usuário com acesso completo. 

Tenha em mente que tipos de contas que você está criando. Você pode limitar o usuárioCONSULTAS MAX, atualizações MAX, as conexões MAX e MAX conexões de usuários por hora . 

Tenha em mente que o ambiente de rede, os usuários estão se conectando. Se os usuários estão indo usar endereços de rede DHCP dentro da mesma sub-rede que você seria apenas criar mais trabalho para si mesmo se você limita-los a um único IP. Você ainda pode limitá-los para a sub-rede, embora com um curinga. Por exemplo '192 .168.0.2 "versus '192 .168.0.% ' 

Fique longe de todo o acesso wildcard para o anfitrião e os usuários. 



> CREATE USER ''@'192.168.0.56' ;
Query OK, 0 rows affected (0.02 sec)

> show grants for ''@'192.168.0.56';
+-----------------------------------------+
| Grants for @192.168.0.56 |
+-----------------------------------------+
| GRANT USAGE ON *.* TO ''@'192.168.0.56' |
+-----------------------------------------+


Isto deixá-lo aberto para qualquer pessoa a partir de 192.168.0.56 e não é uma coisa inteligente a fazer seguro. 
Também poderia violar outras contas de 192.168.0.56 porque MySQL verifica anfitrião de primeira e segunda username. 


> GRANT SELECT ON test.* TO 'exampleuser'@'192.168.0.%' IDENTIFIED BY 'somepassword';

> show grants for 'exampleuser'@'192.168.0.%';
+----------------------------------------------------------------------------------------------------------------------+
| Grants for exampleuser@192.168.0.% |
+----------------------------------------------------------------------------------------------------------------------+
| GRANT USAGE ON *.* TO 'exampleuser'@'192.168.0.%' IDENTIFIED BY PASSWORD '*DAABDB4081CCE333168409A6DB119E18D8EAA073' |
| GRANT SELECT ON `test`.* TO 'exampleuser'@'192.168.0.%' |
+----------------------------------------------------------------------------------------------------------------------+

Isso permitirá que seleciona apenas para exampleuser de '192 .168.0.%. Você também deve ter em mente que, se exampleuser está se conectando a partir de locais de acolhimento que o sistema provavelmente localhost usuário antes de o.% Endereço de sub-rede 192.168.0, a menos que o usuário usou o endereço de sub-rede do host para se conectar. 

Isso significa que você pode criar um usuário e senha com diferentes privilégios por host. 


> SHOW GRANTS FOR 'exampleuser'@'localhost';
+--------------------------------------------------------------------------------------------------------------------+
| Grants for exampleuser@localhost |
+--------------------------------------------------------------------------------------------------------------------+
| GRANT USAGE ON *.* TO 'exampleuser'@'localhost' IDENTIFIED BY PASSWORD '*DAABDB4081CCE333168409A6DB119E18D8EAA073' |
| GRANT SELECT, UPDATE, DELETE ON `test`.* TO 'exampleuser'@'localhost' |
+--------------------------------------------------------------------------------------------------------------------+

Tente o seu melhor para não usar o parâmetro - password = opção <senha> via o cliente mysql. Você pode usá-p para solicitar uma senha. 

Você também tem a opção com o MySQL 5.6 para usar o utilitário de configuração do MySQL. 


# mysql_config_editor set --login-path=local --host=localhost --user=root --password
Enter password: 




# mysql_config_editor print --all
[local]
user = root
password = *****
host = localhost 


# Mysql
ERROR 1045 (28000): Acesso negado para o usuário 'root' @ 'localhost' (using password: NO)

# Mysql - login-path = local
Welcome to the MySQL monitor.

# Mysql - login-path = local-e 'SELECT NOW ()';

Você tem opções para nomear diferentes caminhos, como local ou remoto e etc também.Assim, você pode criptografar mais de uma conta de usuário de acesso em seu arquivo ~ mylogin.cnf /. Que é criado uma vez que você usar o comando set. 

Se você tiver scripts shell que utilizam o cliente mysql e, provavelmente, em seguida, ter senhas nos scripts atualizando-os a usar o "- login-path =" é um caminho mais seguro para ir. 


É claro que quando você não precisa mais de um usuário ... Solte o usuário. 


> DROP USER 'exampleuser'@'localhost';