Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

Como proteger o MySQL:parte um

Sempre que a segurança do aplicativo é mencionada, as pessoas pensam em proteger os aplicativos contra alguns dos ataques mais frequentes, como injeção, autenticação quebrada, exposição de dados confidenciais e similares. No entanto, embora esses ataques sejam predominantes, saber como proteger seu aplicativo apenas deles não será suficiente - especialmente quando você estiver executando o MySQL. Hoje vamos olhar para um lado diferente da segurança - vamos ver como proteger adequadamente o MySQL.

Como a segurança do MySQL é uma coisa muito importante, trate este post como o início de uma série de posts sobre as medidas de segurança do MySQL. Não abordaremos tudo, mas este post deve fornecer a base de algumas das medidas de segurança do MySQL.

Por que você precisa proteger o MySQL?

Primeiro de tudo, devemos responder a pergunta por que queremos proteger o MySQL. Afinal, se protegermos nosso aplicativo contra as ameaças mais prevalentes, devemos estar seguros, certo? Bem, sim e não.

Você vê, quando você protege seu aplicativo contra certos ataques, você garante que os invasores tenham mais dificuldade em penetrar nas defesas de seu aplicativo - para proteger seu banco de dados, proteger contra tais ataques irá não ser suficiente. Proteger seu banco de dados pode ser a gota d'água que pode salvar seu aplicativo (e seu banco de dados!) da destruição.

Como faço para proteger o MySQL?

Agora, para a questão principal. Como você realmente protege o MySQL?

Ao pensar na segurança de sua(s) instância(s) MySQL, você deve considerar uma ampla gama de opções possíveis. Felizmente, algumas dessas opções não estão limitadas ao MySQL, o que significa que elas também serão aplicáveis ​​em outros cenários! Vamos começar com as coisas gerais.

Segurança MySQL - Geral

Ao proteger o MySQL, lembre-se de que ele usa listas de controle de acesso (ACLs) baseadas em segurança para operações realizadas por usuários (listas de controle de acesso são uma lista de permissões associadas a um objeto). Veja como cuidar de alguns dos problemas de segurança mais básicos:

  • Proteja a conta inicial do MySQL - isso é muito óbvio, mas você deve garantir que a conta root tenha uma senha. A conta root pode ou não ter uma senha quando o MySQL é instalado pela primeira vez - você pode descobrir qual é a senha verificando o log de erros e, em seguida, altere-a para uma mais forte, se desejar. Todas as outras contas também devem ter senhas.
  • Nunca armazene senhas em qualquer banco de dados MySQL em texto simples - use uma função de hash unidirecional como BCrypt.
  • Não conceda a nenhum usuário acesso à tabela de usuários no banco de dados mysql (o usuário root é uma exceção).

Além disso, familiarize-se com o controle de acesso e gerenciamento de contas no MySQL. Este assunto merece um livro inteiro por si só, mas as coisas básicas que você deve saber incluem:

  • Controlando o acesso no MySQL;
  • Criando, alterando e removendo usuários;
  • Conceder e revogar privilégios para e de usuários;
  • Saber como verificar quais privilégios são atribuídos;
  • Quais são as categorias de conta;
  • O que são contas reservadas;
  • Quais são as funções;
  • Como funciona o gerenciamento de senhas;
  • Como funciona o bloqueio de conta;
  • Dê uma olhada nos plugins de segurança oferecidos pelo MySQL;
  • Saber como proteger backups do MySQL.

No que diz respeito à segurança do MySQL, os backups também devem ser cobertos.

Agora, examinaremos cada uma dessas opções mais detalhadamente.

Controlando o acesso no MySQL

  • Como já mencionado acima, nunca dê a nenhuma conta, exceto a conta root, acesso à tabela de usuários no banco de dados mysql;
  • Certifique-se de que todas as contas MySQL existentes usem apenas os privilégios de que absolutamente precisam para realizar suas ações.

Criando, alterando e removendo usuários no MySQL


No MySQL, os usuários podem ser criados executando a consulta CREATE USER:
CREATE USER ‘demouser’@’localhost’ IDENTIFIED BY ‘password’;

Os usuários podem ser alterados executando a consulta ALTER USER - a consulta permite que você faça muitas coisas diferentes, incluindo bloquear e desbloquear contas, exigir que a conta se conecte usando SSL, estabelecer a quantidade máxima de conexões por hora, descartar senhas antigas etc. Aqui está um exemplo de consulta que pode alterar sua própria senha:
ALTER USER USER() IDENTIFIED BY ‘password’;

Os usuários podem ser removidos executando a consulta DROP USER:
DROP USER ‘demouser’@’localhost’;

Conceder e revogar privilégios para e de usuários no MySQL


A instrução GRANT deve conceder privilégios ou funções. A instrução ON é capaz de informar se privilégios ou funções serão concedidos. A consulta a seguir concede privilégios:
GRANT ALL ON demo_db.* TO ‘demouser’@’localhost’;

A consulta a seguir concede papéis:
GRANT ‘demo_role’ TO ‘demouser’@’localhost’;

GRANT deve responder com Query OK, 0 linhas afetadas.

Para revogar certos privilégios dos usuários, use a instrução REVOKE (a parte do nome do host do nome da conta é “%”):
REVOKE SELECT ON *.* FROM ‘demouser’@’localhost’;

Para revogar todos os privilégios, REVOKE ALL pode ser usado:
REVOKE ALL PRIVILEGES ON *.* FROM ‘demouser’@’localhost’;

Você pode querer emitir um FLUSH PRIVILEGES; após executar as etapas acima.

Verificando quais privilégios são atribuídos no MySQL

  • Para verificar quais privilégios são atribuídos, emita o SHOW GRANTS; declaração.
  • Para cada solicitação emitida, o servidor determina a operação que você deseja executar e verifica se seus privilégios são suficientes para executar a operação em questão.
  • O servidor usa as tabelas user e db no banco de dados mysql para garantir o controle de acesso.
  • As tabelas user e global_grants concedem privilégios globais.

As demais opções serão abordadas nas próximas postagens.

Resumo


No que diz respeito à segurança do MySQL, você tem uma ampla gama de opções para escolher. As opções incluem medidas básicas de segurança que podem ser aplicáveis ​​a praticamente todos os aplicativos, mas algumas das opções são bastante específicas para o MySQL. Tenha em mente que nem todas as opções disponíveis foram cobertas ainda - elas também serão discutidas nas próximas edições da série de segurança do MySQL.