No mundo do gerenciamento de banco de dados, controlar o acesso do usuário é crucial para manter a integridade e a segurança dos dados. Esta postagem do blog irá guiá-lo por um cenário real de configuração de permissões de usuário do MySQL, incluindo o processo, possíveis armadilhas e etapas de depuração.
Imagine que você é administrador de banco de dados de uma empresa que possui vários bancos de dados:
Sua tarefa é configurar permissões para um usuário chamado 'analista' com os seguintes requisitos:
Vamos ver como podemos conseguir isso usando as instruções GRANT e REVOKE do MySQL.
Primeiro, precisamos nos conectar ao servidor MySQL com uma conta administrativa:
mysql -h hostname -P port -u admin -p
Substitua 'hostname', 'port' e 'admin' pelos detalhes reais do servidor e nome de usuário do administrador.
Se o usuário ainda não existir, precisamos criá-lo:
CREATE USER 'analyst'@'%' IDENTIFIED BY 'password';
Substitua 'senha' por uma senha forte e segura.
Agora, vamos conceder as permissões necessárias:
-- Grant SELECT on original databases GRANT SELECT ON products.* TO 'analyst'@'%'; GRANT SELECT ON customers.* TO 'analyst'@'%'; GRANT SELECT ON orders.* TO 'analyst'@'%'; GRANT SELECT ON analytics.* TO 'analyst'@'%'; -- Grant all privileges on copy databases GRANT ALL PRIVILEGES ON products_copy.* TO 'analyst'@'%'; GRANT ALL PRIVILEGES ON customers_copy.* TO 'analyst'@'%'; GRANT ALL PRIVILEGES ON orders_copy.* TO 'analyst'@'%'; GRANT ALL PRIVILEGES ON analytics_copy.* TO 'analyst'@'%'; -- Grant global privileges GRANT PROCESS, SHOW DATABASES ON *.* TO 'analyst'@'%'; -- Apply the changes FLUSH PRIVILEGES;
Depois de configurar as permissões, é crucial verificá-las:
SHOW GRANTS FOR 'analyst'@'%';
Em nosso cenário, inicialmente encontramos um problema em que o 'analista' tinha muitos privilégios:
mysql> SHOW GRANTS FOR 'analyst'@'%'; --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | Grants for analyst@% | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | GRANT SELECT, INSERT, UPDATE, DELETE, CREATE, DROP, RELOAD, PROCESS, REFERENCES, INDEX, ALTER, SHOW DATABASES, CREATE TEMPORARY TABLES, LOCK TABLES, EXECUTE, REPLICATION SLAVE, REPLICATION CLIENT, CREATE VIEW, SHOW VIEW, CREATE ROUTINE, ALTER ROUTINE, CREATE USER, EVENT, TRIGGER ON *.* TO "analyst"@"%" WITH GRANT OPTION | | GRANT REPLICATION_APPLIER,ROLE_ADMIN ON *.* TO "analyst"@"%" WITH GRANT OPTION | ... ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
Para corrigir isso, revogamos todos os privilégios e concedemos apenas os necessários:
REVOKE ALL PRIVILEGES, GRANT OPTION FROM 'analyst'@'%'; GRANT PROCESS, SHOW DATABASES ON *.* TO 'analyst'@'%'; -- Then re-grant the specific permissions as shown in Step 3
Depois de corrigir os privilégios excessivos, notamos que faltavam as permissões para os bancos de dados de cópia:
mysql> SHOW GRANTS FOR 'analyst'@'%'; ----------------------------------------------------- | Grants for analyst@% | ----------------------------------------------------- | GRANT PROCESS, SHOW DATABASES ON *.* TO "analyst"@"%"| | GRANT SELECT ON "products".* TO "analyst"@"%" | | GRANT SELECT ON "customers".* TO "analyst"@"%" | | GRANT SELECT ON "orders".* TO "analyst"@"%" | | GRANT SELECT ON "analytics".* TO "analyst"@"%" | -----------------------------------------------------
Adicionamos as concessões ausentes para os bancos de dados de cópia:
GRANT ALL PRIVILEGES ON products_copy.* TO 'analyst'@'%'; GRANT ALL PRIVILEGES ON customers_copy.* TO 'analyst'@'%'; GRANT ALL PRIVILEGES ON orders_copy.* TO 'analyst'@'%'; GRANT ALL PRIVILEGES ON analytics_copy.* TO 'analyst'@'%'; FLUSH PRIVILEGES;
Depois de aplicar todas essas alterações e correções, as concessões finais deverão ficar assim:
mysql> SHOW GRANTS FOR 'analyst'@'%'; ----------------------------------------------------- | Grants for analyst@% | ----------------------------------------------------- | GRANT PROCESS, SHOW DATABASES ON *.* TO "analyst"@"%"| | GRANT SELECT ON "products".* TO "analyst"@"%" | | GRANT SELECT ON "customers".* TO "analyst"@"%" | | GRANT SELECT ON "orders".* TO "analyst"@"%" | | GRANT SELECT ON "analytics".* TO "analyst"@"%" | | GRANT ALL PRIVILEGES ON "products_copy".* TO "analyst"@"%"| | GRANT ALL PRIVILEGES ON "customers_copy".* TO "analyst"@"%"| | GRANT ALL PRIVILEGES ON "orders_copy".* TO "analyst"@"%"| | GRANT ALL PRIVILEGES ON "analytics_copy".* TO "analyst"@"%"| -----------------------------------------------------
Configurar permissões de usuário MySQL adequadas pode ser complicado, mas é um aspecto crucial do gerenciamento de banco de dados. Usando cuidadosamente as instruções GRANT e REVOKE e sempre verificando os resultados, você pode criar um ambiente seguro e funcional para seus usuários.
Lembre-se destes pontos-chave:
Seguindo essas diretrizes e as etapas descritas nesta postagem, você estará bem equipado para gerenciar as permissões de usuário do MySQL de maneira eficaz.
Isenção de responsabilidade: Todos os recursos fornecidos são parcialmente provenientes da Internet. Se houver qualquer violação de seus direitos autorais ou outros direitos e interesses, explique os motivos detalhados e forneça prova de direitos autorais ou direitos e interesses e envie-a para o e-mail: [email protected]. Nós cuidaremos disso para você o mais rápido possível.
Copyright© 2022 湘ICP备2022001581号-3