Gerenciamento de Usuários e Privilégios MySQL

MySQLBeginner
Pratique Agora

Introdução

Neste laboratório, exploraremos o gerenciamento de usuários e privilégios no MariaDB, habilidades essenciais para proteger seu sistema de banco de dados. Você aprenderá como criar e gerenciar contas de usuário, atribuir privilégios apropriados e visualizar permissões. Através de exercícios práticos, você obterá experiência prática com essas operações cruciais de segurança de banco de dados e entenderá como implementar medidas básicas de segurança no MariaDB. Este conhecimento é fundamental para qualquer administrador de banco de dados para garantir o controle de acesso adequado e a proteção de dados.

Criando e Gerenciando Contas de Usuário

Primeiro, conecte-se ao MySQL como root:

sudo mysql -u root

Criando Usuários

Vamos criar usuários com diferentes padrões de acesso:

-- Create a user that can connect only from localhost
CREATE USER 'hr_user'@'localhost' IDENTIFIED BY 'hr123';

-- Create a user that can connect from any host
CREATE USER 'reports_user'@'%' IDENTIFIED BY 'reports123';

-- Create a user without a password (not recommended for production)
CREATE USER 'intern'@'localhost';

O @'localhost' restringe as conexões apenas à máquina local, enquanto @'%' permite conexões de qualquer host. Criar usuários sem senhas não é recomendado para ambientes de produção.

Para ver os usuários que criamos:

SELECT User, Host FROM mysql.user;

A saída esperada mostra todos os usuários no sistema:

+--------------+-----------+
| User         | Host      |
+--------------+-----------+
| reports_user | %         |
| hr_user      | localhost |
| intern       | localhost |
| mariadb.sys  | localhost |
| mysql        | localhost |
| root         | localhost |
+--------------+-----------+

Gerenciando Usuários Existentes

Para modificar usuários existentes:

-- Change a user's password
SET PASSWORD FOR 'intern'@'localhost' = PASSWORD('intern123');

-- Require user to change password at next login
ALTER USER 'hr_user'@'localhost' PASSWORD EXPIRE;

A opção PASSWORD EXPIRE força os usuários a alterar suas senhas no próximo login - útil para senhas temporárias.

Para remover um usuário:

-- Remove a user
DROP USER 'reports_user'@'%';

Após remover o usuário, verifique se a lista de usuários foi atualizada:

+-------------+-----------+
| User        | Host      |
+-------------+-----------+
| hr_user     | localhost |
| intern      | localhost |
| mariadb.sys | localhost |
| mysql       | localhost |
| root         | localhost |
+-------------+-----------+

Atribuindo Privilégios

Agora, aprenderemos a atribuir diferentes tipos de privilégios para controlar o que os usuários podem fazer.

Gerenciamento Básico de Privilégios

Vamos conceder alguns privilégios básicos ao nosso usuário HR:

-- Grant SELECT and INSERT privileges on company_db.employees table
GRANT SELECT, INSERT ON company_db.employees TO 'hr_user'@'localhost';

-- Verify the privileges
SHOW GRANTS FOR 'hr_user'@'localhost';

O comando GRANT concede permissões específicas (SELECT, INSERT) em objetos específicos do banco de dados aos usuários. O comando SHOW GRANTS exibe os privilégios atuais.

Saída esperada:

+----------------------------------------------------------------------------------------------------------------+
| Grants for hr_user@localhost                                                                                   |
+----------------------------------------------------------------------------------------------------------------+
| GRANT USAGE ON *.* TO `hr_user`@`localhost` IDENTIFIED BY PASSWORD '*27DB7FC6D35D1F5E6A4C37473D9018DD46DC2944' |
| GRANT SELECT, INSERT ON `company_db`.`employees` TO `hr_user`@`localhost`                                      |
+----------------------------------------------------------------------------------------------------------------+

Diferentes Níveis de Privilégio

MariaDB suporta privilégios em diferentes níveis de granularidade:

-- Global privileges (all databases)
GRANT CREATE USER ON *.* TO 'intern'@'localhost';

-- Database level privileges
GRANT ALL PRIVILEGES ON company_db.* TO 'hr_user'@'localhost';

-- Table level privileges
GRANT SELECT, UPDATE ON company_db.employees TO 'intern'@'localhost';

-- Column level privileges
GRANT SELECT (name, department), UPDATE (department)
ON company_db.employees TO 'intern'@'localhost';

A sintaxe *.* refere-se a todos os bancos de dados e tabelas, enquanto database.* refere-se a todas as tabelas em um banco de dados específico. Os privilégios no nível da coluna permitem um controle de acesso mais detalhado.

Revogando Privilégios

Para remover privilégios:

-- Revoke specific privileges
REVOKE INSERT ON company_db.employees FROM 'hr_user'@'localhost';

-- Revoke ALL privileges
REVOKE ALL PRIVILEGES ON company_db.employees FROM 'intern'@'localhost';

Sempre verifique as alterações de privilégios após revogá-los usando SHOW GRANTS.

MariaDB [(none)]> SHOW GRANTS FOR 'hr_user'@'localhost';
+----------------------------------------------------------------------------------------------------------------+
| Grants for hr_user@localhost                                                                                   |
+----------------------------------------------------------------------------------------------------------------+
| GRANT USAGE ON *.* TO `hr_user`@`localhost` IDENTIFIED BY PASSWORD '*27DB7FC6D35D1F5E6A4C37473D9018DD46DC2944' |
| GRANT ALL PRIVILEGES ON `company_db`.* TO `hr_user`@`localhost`                                                |
| GRANT SELECT ON `company_db`.`employees` TO `hr_user`@`localhost`                                              |
+----------------------------------------------------------------------------------------------------------------+
MariaDB [(none)]> SHOW GRANTS FOR 'intern'@'localhost';
+---------------------------------------------------------------------------------------------------------------+
| Grants for intern@localhost                                                                                   |
+---------------------------------------------------------------------------------------------------------------+
| GRANT USAGE ON *.* TO `intern`@`localhost` IDENTIFIED BY PASSWORD '*A381F474A9DDCAA5BC97DAB83A69431B1C8D8902' |
+---------------------------------------------------------------------------------------------------------------+

Resumo

Neste laboratório, cobrimos os aspectos essenciais do gerenciamento de usuários e privilégios do MariaDB:

  1. Criando e gerenciando contas de usuário com diferentes restrições de conexão
  2. Atribuindo e revogando privilégios em vários níveis (global, banco de dados, tabela, coluna)

Essas habilidades são fundamentais para proteger sua instalação do MariaDB e implementar o controle de acesso adequado. A compreensão do gerenciamento de usuários e privilégios é crucial para manter a segurança do banco de dados e garantir que os usuários tenham acesso apropriado aos recursos do banco de dados.