Ramos da InformáticaBanco de DadosGuia SQL: Gerenciamento de Usuários, Permissões e Roles

Guia SQL: Gerenciamento de Usuários, Permissões e Roles

Aprenda tudo sobre gerenciamento de permissões em bancos de dados com comandos avançados em MySQL, PostgreSQL e SQL Server. Descubra práticas de segurança, controle granular de acesso, normalização de dados e hacks para otimizar seu banco de dados. Artigo completo e detalhado!

-

Aprenda a gerenciar permissões no MySQL, PostgreSQL e SQL Server. Domine comandos de GRANT, REVOKE, criação de Roles e segurança granular (RLS).

O gerenciamento de permissões em um banco de dados relacional é uma prática essencial para garantir segurança, eficiência e controle de acesso aos dados. Neste artigo, abordaremos os fundamentos, estratégias avançadas e os comandos mais relevantes para implementar um controle de permissões robusto. Exploraremos diferentes sistemas de gerenciamento de banco de dados (SGBDs), como MySQL, PostgreSQL e SQL Server, utilizando exemplos práticos e hacks úteis.


O que é o Gerenciamento de Permissões?

O gerenciamento de permissões consiste no controle de quem pode acessar, modificar ou administrar dados em um banco de dados. Isso envolve conceder ou revogar privilégios específicos a usuários ou funções, assegurando que apenas entidades autorizadas tenham acesso a recursos específicos.

Principais Conceitos:

  1. Usuários e Roles: Representam as identidades que acessam o banco de dados.
  2. Privilégios: Ações específicas que um usuário pode realizar, como SELECT, INSERT, UPDATE, e DELETE.
  3. Segurança Granular: Capacidade de controlar permissões em níveis diferentes, como tabelas, colunas ou linhas.
  4. Princípio do Menor Privilégio: Garantir que cada usuário tenha apenas as permissões mínimas necessárias para desempenhar suas funções.

Privilégios Comuns em Bancos de Dados

Os privilégios podem ser gerais (nível de banco de dados) ou específicos (nível de objeto). Aqui estão os mais comuns:

Dica de Leitura: Se você está interessado em aprimorar a segurança e eficiência dos seus projetos, especialmente aqueles que envolvem bancos de dados e desenvolvimento de software, entender como integrar ferramentas de análise de código pode ser crucial. Confira nosso artigo sobre Como instalar e configurar SonarQube para projetos Node.js para saber mais sobre como melhorar a qualidade e segurança do seu código.

Privilégio Descrição
SELECT Permite consultar dados em tabelas ou views.
INSERT Permite adicionar novos registros.
UPDATE Permite modificar registros existentes.
DELETE Permite remover registros de uma tabela.
CREATE Permite criar novos objetos, como tabelas ou views.
DROP Permite excluir objetos.
GRANT Permite conceder permissões a outros usuários.
REVOKE Permite revogar permissões concedidas.

Gerenciamento de Permissões no MySQL

O MySQL utiliza um modelo baseado em tabelas de privilégios que é flexível e poderoso. Vamos explorar como criar usuários e gerenciar suas permissões.

1. Criando um Usuário

No MySQL, você pode criar um usuário com o comando CREATE USER:

CREATE USER 'usuario_teste'@'localhost' IDENTIFIED BY 'senha123';
  • 'usuario_teste'@'localhost': Define o nome do usuário e o host de onde ele pode se conectar.
  • IDENTIFIED BY 'senha123': Define a senha.

2. Concedendo Permissões

O comando GRANT é usado para conceder privilégios:

GRANT SELECT, INSERT ON banco_dados.* TO 'usuario_teste'@'localhost';
  • SELECT, INSERT: Concede os privilégios de leitura e escrita.
  • banco_dados.*: Especifica o banco de dados e todas as tabelas.

Para conceder privilégios administrativos:

GRANT ALL PRIVILEGES ON banco_dados.* TO 'usuario_teste'@'localhost';

3. Revogando Permissões

Se precisar remover privilégios:

REVOKE INSERT ON banco_dados.* FROM 'usuario_teste'@'localhost';

4. Exibindo Permissões

Para verificar os privilégios de um usuário:

SHOW GRANTS FOR 'usuario_teste'@'localhost';

Gerenciamento de Permissões no PostgreSQL

O PostgreSQL oferece um sistema robusto de gerenciamento de permissões baseado em roles. Roles podem ser atribuídas a usuários ou grupos.

1. Criando um Role

Crie uma role que pode ser atribuída a usuários:

CREATE ROLE desenvolvedor LOGIN PASSWORD 'senha123';
  • LOGIN: Permite que a role faça login no banco.
  • PASSWORD 'senha123': Define a senha.

2. Atribuindo Permissões

Use o comando GRANT para conceder privilégios:

GRANT SELECT, INSERT ON ALL TABLES IN SCHEMA public TO desenvolvedor;
  • ON ALL TABLES IN SCHEMA public: Aplica a permissão a todas as tabelas do schema public.

Conceder privilégios administrativos:

GRANT CONNECT ON DATABASE meu_banco TO desenvolvedor;
GRANT USAGE ON SCHEMA public TO desenvolvedor;

3. Revogando Permissões

O comando REVOKE remove privilégios:

REVOKE INSERT ON ALL TABLES IN SCHEMA public FROM desenvolvedor;

4. Exibindo Permissões

Para listar privilégios em uma tabela:

\z tabela_nome

Gerenciamento de Permissões no SQL Server

O SQL Server utiliza esquemas para organizar objetos e gerenciar permissões.

1. Criando um Login e Usuário

Crie um login para autenticação:

CREATE LOGIN usuario_teste WITH PASSWORD = 'senha123';

Associe o login a um usuário no banco de dados:

USE banco_dados;
CREATE USER usuario_teste FOR LOGIN usuario_teste;

2. Concedendo Permissões

Para conceder permissões a um usuário:

GRANT SELECT, INSERT ON tabela_nome TO usuario_teste;

Conceder permissões de nível de banco de dados:

GRANT CONNECT TO usuario_teste;

3. Revogando Permissões

Remova um privilégio com:

REVOKE INSERT ON tabela_nome FROM usuario_teste;

4. Exibindo Permissões

Para verificar permissões:

SELECT * FROM fn_my_permissions(NULL, 'DATABASE');

Segurança Granular: Controle por Colunas e Linhas

1. Controle por Coluna

Em PostgreSQL, use views para limitar colunas visíveis:

CREATE VIEW visao_limitada AS
SELECT id, nome
FROM tabela_confidencial;
GRANT SELECT ON visao_limitada TO desenvolvedor;

2. Controle por Linha

No PostgreSQL, use políticas de segurança em linhas:

ALTER TABLE tabela_confidencial ENABLE ROW LEVEL SECURITY;
CREATE POLICY politica_acesso
ON tabela_confidencial
FOR SELECT
USING (id_usuario = current_user);

Auditoria e Boas Práticas

  1. Logs de Auditoria:
    • Ative logs para rastrear comandos GRANT e REVOKE.
  2. Princípio do Menor Privilégio:
    • Nunca conceda mais permissões do que o necessário.
  3. Automatize Permissões:
    • Use scripts para gerenciar permissões em ambientes complexos.
  4. Revise Periodicamente:
    • Execute auditorias regulares para remover permissões obsoletas:

    SELECT grantee, privilege_type FROM information_schema.role_table_grants;


Conclusão

O gerenciamento de permissões em bancos de dados é crucial para proteger informações sensíveis e manter o sistema seguro e eficiente. Dominar comandos como GRANT e REVOKE, entender o uso de roles e aplicar práticas avançadas de segurança granular permite que administradores tenham controle total sobre o acesso aos dados.

Seja em MySQL, PostgreSQL ou SQL Server, o uso de estratégias como o princípio do menor privilégio e auditorias regulares garantem um banco de dados mais seguro e preparado para lidar com os desafios do mundo real.

Referências

Aqui estão algumas referências confiáveis para você aprofundar seus conhecimentos sobre o gerenciamento de permissões em bancos de dados e normalização:

Documentação Oficial dos SGBDs

  1. MySQL: Documentação Oficial MySQL – Gerenciamento de Permissões
    A documentação oficial do MySQL detalha todos os comandos relacionados a permissões, exemplos de uso e melhores práticas.
  2. PostgreSQL: Documentação Oficial PostgreSQL – Controle de Acesso
    Explica como gerenciar roles, privilégios e configurações de segurança granular.
  3. SQL Server: Documentação Oficial Microsoft SQL Server – Gerenciamento de Permissões
    Abrange conceitos de login, usuários, permissões e auditorias.

Livros Recomendados

Banco de Dados: Teoria e Desenvolvimento
Este livro aborda os principais fundamentos de bancos de dados, incluindo tipos de acesso a arquivos, estruturas de dados, métodos de ordenação, arquitetura e organização, álgebra relacional, modelagem e normalização de dados, além de segurança e proteção com níveis de acesso dos usuários.

Sistemas de Gerenciamento de Bancos de Dados
Apresenta uma abordagem clara e atualizada dos fundamentos dos sistemas de banco de dados, com muitos exemplos e aplicações, incluindo SQL e Oracle, além de aplicações para a Internet.

Banco de Dados Relacional: Arquitetura, Modelo Entidade-Relacionamento, Linguagem SQL e Normalização de Dados
Este livro aborda os conceitos de modelagem de dados utilizando o modelo Entidade-Relacionamento (ER) e demonstra como mapear um projeto de esquema conceitual para um esquema de banco de dados relacional, incluindo tópicos sobre normalização de dados.

Esses livros oferecem uma base sólida para o entendimento e aplicação de conceitos relacionados ao gerenciamento de permissões e normalização em bancos de dados.

VEJA NOSSA SEÇÃO SOBRE BANCO DE DADOS.

VAI GOSTAR:

Como Otimizar o MySQL com o Comando SET GLOBAL

Como Otimizar a Performance do PostgreSQL

Perguntas Frequentes (FAQ): Permissões no Banco de Dados

Qual a diferença entre dar GRANT ALL e dar permissões específicas?

O comando GRANT ALL PRIVILEGES dá controle quase total (ou total) sobre o banco de dados para um usuário, incluindo a capacidade de excluir tabelas (DROP) e bancos inteiros. Na prática profissional, aplica-se o “Princípio do Menor Privilégio”: a aplicação (backend) deve receber apenas as permissões de SELECT, INSERT, UPDATE e DELETE, bloqueando qualquer alteração na estrutura (DDL) do banco.

O que é uma “Role” no PostgreSQL e SQL Server?

Uma Role funciona como um “perfil” ou “grupo de cargos”. Em vez de você dar permissões de leitura, tabela por tabela, para 50 analistas de dados diferentes, você cria uma Role chamada “analista_leitura”, concede os privilégios a essa Role, e então apenas atrela os 50 usuários a esse perfil. Isso facilita incrivelmente a revogação de acessos ou auditorias de segurança.

É possível restringir o acesso apenas a certas colunas da tabela?

Sim! Se você tiver uma tabela de usuários com a coluna “salario”, mas não quer que a equipe de suporte veja essa coluna, você tem duas opções: conceder o comando GRANT SELECT (id, nome, email) ON usuarios TO suporte; (concedendo colunas específicas) ou criar uma View que omita a coluna “salario” e dar a permissão de SELECT apenas na View.

O que é o RLS (Row Level Security) no PostgreSQL?

O Row Level Security (Segurança em Nível de Linha) é um recurso avançado do Postgres. Ele permite que o banco de dados filtre automaticamente quais linhas (registros) de uma tabela o usuário pode ver. Por exemplo, você pode criar uma política que força um gerente a ver apenas as vendas realizadas na filial dele, mesmo que ele execute um comando genérico como SELECT * FROM vendas;.

Ramos da Informática
Ramos da Informáticahttps://ramosdainformatica.com.br
Ramos da Informática é um hub de comunidade dedicado a linguagens de programação, banco de dados, DevOps, Internet das Coisas (IoT), tecnologias da Indústria 4.0, cibersegurança e startups. Com curadoria de conteúdos de qualidade, o projeto é mantido por Ramos de Souza Janones.

Mais recentes

Como aprender a programar, um guia definitivo

Última atualização em 23/04/2026. Guia completo sobre: Como aprender a programar. Espero que este “guia” ou “manifesto”, como prefiro chamar, seja...

Stream Deck para Desenvolvedores: o Console de Comando do Futuro

Esqueça os streamers. Descubra como o Stream Deck se tornou o hardware essencial para Engenheiros de IA e Full...

Como Usar o Skills in Chrome no Brasil: Tutorial Completo de IA

A inteligência artificial já faz parte do nosso fluxo de trabalho, mas ter que reescrever os mesmos prompts repetidamente...

Context Engineering: Como Arquitetar Dados para LLMs e RAG

Na edição desta newsletter intitulada “Engenharia de Prompt: Não é só mais uma buzzword“: https://www.linkedin.com/pulse/engenharia-de-prompt-n%C3%A3o-%C3%A9-s%C3%B3-mais-uma-buzzword-de-souza-janones-tpkxf tratei sobre o tema...
E-Zine Dev

Evolua para Sênior

Estratégias de Node.js, arquitetura Limpa e IA que nunca publicamos no blog. Junte-se a +10.000 devs.

Assinar Gratuitamente Zero spam. Cancele quando quiser.

Aprender Idiomas com Google Tradutor: Na Prática

O Google está lançando um novo recurso experimental com tecnologia de IA no Google Tradutor, projetado para ajudar as...

Comunidades Internacionais de Desenvolvedores

Descubra as melhores comunidades internacionais de devs para 2026: GitHub, Stack Overflow, Discord e mais. Comparativo de salários Brasil vs. exterior e guia de carreira remota.

Mais Lidos

GraphRAG: Como Superar os Limites do RAG com Grafos

Este artigo foi originalmente publicado em: https://www.linkedin.com/newsletters/ezine-dev-ramos-da-inform%25C3%25A1tica-6947960536550526976/ A inteligência artificial...

Integrar Código no Google Docs (Guia Prático)

Quem utilize o Google Docs para enviar documentos contendo...

Guia Prático de RabbitMQ no Node.js (usando amqplib)

Este artigo tem como objetivo o uso do sistema...

Google Home Vulnerabilidade: Como Proteger

Recentemente, um pesquisador descobriu que um bug do Google...
E-Zine Dev

Evolua para Sênior

Estratégias de Node.js, arquitetura Limpa e IA que nunca publicamos no blog. Junte-se a +10.000 devs.

Assinar Gratuitamente Zero spam. Cancele quando quiser.

Você vai gostarrelacionados
Continue aprendendo

E-Zine Dev Ramos

Quer dominar arquitetura e IA?

Junte-se a +10.000 profissionais. Receba semanalmente estratégias de Node.js, React e IA que nunca publicamos no blog.

Assinar Gratuitamente Zero spam. Cancele quando quiser.