MariaDB
 sql >> Base de Dados >  >> RDS >> MariaDB

Protegendo o MySQL - Fazendo uso de privilégios de acesso a dados para uma instalação segura

A segurança da instalação do MySQL é algo que deve estar na  mente de todo DBA do MySQL. Embora tenhamos discutido como você deve cuidar da segurança do MySQL como um todo (dê uma olhada em algumas de nossas postagens anteriores, especificamente a série de segurança do MySQL Parte Um e Parte Dois), não discutimos problemas específicos relacionados à segurança, incluindo os problemas relacionados a privilégios. Fazemos isso aqui.

O que são privilégios no MySQL?

Privilégios no MySQL podem ser concedidos a contas. Se você conceder privilégios de conta no MySQL, você determinará quais operações a conta pode realizar. Privilégios podem ser concedidos a bancos de dados ou objetos de banco de dados (tabelas, índices, visualizações etc.). Os privilégios também podem ser dinâmicos ou estáticos. Privilégios estáticos são incorporados ao servidor, enquanto privilégios dinâmicos podem ser definidos em tempo de execução.

Como usar privilégios para  segurança do MySQL

Para usar privilégios no MySQL, é isso que você deve lembrar:

  • Para atribuir ou revogar privilégios, você precisa ter um usuário MySQL. Os usuários podem ser criados executando uma consulta CREATE USER:

    CREATE USER ‘demouser’@’localhost’ IDENTIFIED BY ‘password’;


  • Para atribuir ou revogar privilégios, use as instruções GRANT e REVOKE respectivamente:

    GRANT ALL ON demo_db.* TO ‘demouser’@’localhost’;
    REVOKE INSERT ON *.* FROM ‘demouser’@’localhost’;


  • Você pode salvar privilégios executando FLUSH PRIVILEGES. Visualize-os executando SHOW GRANTS.

  • A instrução GRANT não pode ser usada para conceder privilégios e funções; a instrução deve conceder privilégios ou funções.

Para tornar sua instalação do MySQL mais segura, considere o seguinte:

  • Conceda apenas a seus usuários os privilégios necessários para realizar suas tarefas (por exemplo, não use GRANT ALL se for não é necessário)

  • Em geral, evite executar o MySQL como um usuário root do Unix porque qualquer usuário com o privilégio FILE pode causar o servidor para criar arquivos como root.

  • Não conceda o privilégio FILE a usuários que não sejam administradores (consulte a explicação acima)

  • Considere executar o mysqld como um usuário comum sem privilégios.

  • Não conceda privilégios PROCESS ou SUPER a usuários que não sejam administradores. O privilégio PROCESS permite ao usuário visualizar todos os processos em execução no MySQL. O privilégio SUPER, entre outras coisas, habilita mudanças na configuração do servidor, habilita o uso das instruções CREATE SERVER, ALTER SERVER e DROP SERVER, e também habilita o uso da instrução KILL permitindo que o usuário mate as instruções pertencentes a outras contas. Tenha em mente que o MySQL reserva uma conexão extra para usuários que possuem o privilégio SUPER. O privilégio SUPER também permite que um usuário controle os servidores de replicação.

Siga o conselho acima e você deve estar no caminho certo para uma instalação MySQL mais segura. No entanto, se você estiver usando uma versão mais recente do MySQL, há mais uma coisa que precisamos que você esteja ciente - o MySQL introduziu funções no MySQL 8.0.16.

Funções na segurança do MySQL

Se você nunca ouviu falar de funções no MySQL, não se preocupe. Os papéis são muito semelhantes aos privilégios, e é por isso que os incluímos nesta postagem do blog. Na verdade, as funções são apenas isso:são conjuntos de privilégios, ou seja, quando uma função é atribuída a um usuário, todos os privilégios relacionados a essa função são atribuídos a um usuário. As funções podem ser adicionadas e removidas usando as instruções CREATE ROLE e DROP ROLE. Para usar funções no MySQL, crie um nome de função, conceda privilégios a essa função e, em seguida, atribua-o a um usuário como este:

CREATE ROLE [IF NOT EXISTS] ‘role_1’;
GRANT SELECT ON db_name.* TO user_name;
GRANT role_1 TO [email protected];

Quais privilégios você deve conceder?

Ao conceder privilégios, siga o princípio de privilégio mínimo:uma conta MySQL deve receber apenas os privilégios necessários para seus propósitos. Os privilégios mais usados ​​são:

  • TODOS OS PRIVILÉGIOS que concede todos os privilégios a uma conta.

  • CREATE concede os privilégios necessários para criar bancos de dados e tabelas.

  • DROP concede os privilégios necessários para eliminar bancos de dados e tabelas.

  • DELETE concede os privilégios necessários para excluir linhas de tabelas.

  • INSERT concede os privilégios necessários para inserir linhas em tabelas.

  • SELECT concede os privilégios necessários para executar consultas SELECT.

  • UPDATE concede os privilégios necessários para atualizar linhas em uma tabela (para executar consultas UPDATE)

Em geral, é uma boa ideia evitar conceder todos os privilégios a uma conta; em vez disso, considere seguir o princípio do privilégio mínimo. Lembre-se também de que conceder privilégios adicionais a um determinado usuário não remove privilégios que estavam em vigor anteriormente. Você também pode visualizar os privilégios de um usuário específico usando esta sintaxe (substitua o nome de usuário pelo nome de usuário do seu usuário):

SHOW GRANTS FOR ‘username’;

Resumo

Ao lidar com privilégios no MySQL, tenha em mente que você deve seguir o princípio do privilégio mínimo (ou seja, conceder apenas privilégios necessários). Seguir os conselhos descritos neste blog deve ajudar a tornar sua instalação do MySQL mais segura. Lembre-se de que seus privilégios precisam ser salvos para entrar em vigor (a instrução FLUSH PRIVILEGES pode ajudá-lo a fazer isso), além disso, lembre-se de que a partir do MySQL 8.0.16 você pode usar funções no MySQL para atribuir conjuntos de privilégios a um usuário específico.

Esperamos que esta postagem do blog tenha ajudado você a proteger suas instâncias do MySQL. Se você tiver alguma dúvida ou pensamento, sinta-se à vontade para comentar, considere também dar uma olhada em nossa série de segurança do MySQL (aqui e aqui)