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:
- http://dev.mysql.com/doc/refman/5.6/en/password-security.html
- http://dev.mysql.com/doc/refman/5.6/en/password-security-user.html
- http://dev.mysql.com/doc/refman/5.6/en/create-user.html
- http://dev.mysql.com/doc/refman/5.6/en/grant.html
- http://dev.mysql.com/doc/refman/5.6/en/mysql-config-editor.html
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';