Pular para o conteúdo principal

Questão de Banco de Dados — Segurança em Banco de Dados — FCC 2026

Banco de DadosSegurança em Banco de Dados
Código
fc142271
Banca
FCC
Órgão
ARTESP
Ano
2026
Cargo
Esp RT ( )
Uma agência adotou o PostgreSQL como SGBD principal e iniciou a organização de acessos para equipes de desenvolvimento. O administrador do banco precisa permitir que o usuário analista_app possa consultar registros da tabela vendas e inserir novos registros, porém sem permissão para atualizar ou excluir dados existentes.   Os requisitos são:   - O banco já possui o usuário analista_app criado;   - A tabela vendas pertence ao esquema padrão public;   - O analista deve ter privilégios apenas de leitura e inserção.   A política interna determina que cada privilégio deve ser concedido diretamente via comandos SQL executados pelo DBA, sem uso de funções especiais ou extensões externas.   Considerando esse cenário, o conjunto de comandos que configura as permissões desejadas é:
  1. AGRANT SELECT ON DATABASE postgres TO analista_app;
  2. BGRANT ALL PRIVILEGES ON TABLE public.vendas TO analista_app;
  3. CGRANT UPDATE, DELETE ON TABLE public.vendas TO analista_app;
  4. DGRANT SELECT, INSERT ON TABLE public.vendas TO analista_app;
  5. EREVOKE ALL ON TABLE public.vendas FROM analista_app;
Revelar gabarito e comentário

GabaritoD — GRANT SELECT, INSERT ON TABLE public.vendas TO analista_app;

Comentário gerado por IA. É um apoio ao estudo, ancorado em fontes, mas pode conter imprecisões — confira sempre na fonte oficial (lei, súmula, edital e gabarito da banca). Encontrou um erro? Use “Reportar”.

PostgreSQL: concessão de privilégios com GRANT

Gabarito: letra D. Para permitir que o usuário analista_app apenas consulte (SELECT) e insira (INSERT) registros na tabela public.vendas, o comando correto é GRANT SELECT, INSERT ON TABLE public.vendas TO analista_app;. O comando GRANT é o mecanismo padrão do SQL para conceder privilégios, e a sintaxe exige a lista de privilégios, o objeto (ON TABLE) e o destinatário (TO).

O comando GRANT é a instrução da sublinguagem DCL (Data Control Language) do SQL responsável por conceder permissões a usuários ou papéis (roles) sobre objetos do banco de dados, como tabelas, visões, esquemas ou o próprio banco. A sintaxe básica é GRANT <privilégios> ON <objeto> TO <usuário>. Os privilégios mais comuns em nível de tabela são SELECT (leitura), INSERT (inserção), UPDATE (atualização) e DELETE (exclusão). O comando REVOKE, por sua vez, é usado para retirar privilégios previamente concedidos.

No cenário apresentado, o usuário analista_app precisa de dois privilégios específicos sobre a tabela public.vendas: SELECT e INSERT. A alternativa D expressa exatamente isso, listando os dois privilégios na ordem correta e referenciando a tabela com seu esquema (public.vendas). É importante notar que o comando GRANT adiciona privilégios aos já existentes — ele não substitui nem remove permissões anteriores. Portanto, se o usuário já tivesse outros privilégios, eles permaneceriam; a concessão de SELECT e INSERT apenas garante que ele possa consultar e inserir, sem afetar outras permissões que porventura existam.

A distinção crucial aqui é entre os privilégios de leitura (SELECT) e modificação (INSERT, UPDATE, DELETE). O requisito do enunciado é claro: o analista deve ter apenas leitura e inserção, sem permissão para atualizar ou excluir. Isso significa que UPDATE e DELETE devem ficar de fora da concessão. A alternativa D atende exatamente a esse critério, enquanto as demais ou concedem privilégios demais, ou de menos, ou usam sintaxe incorreta.

NÃO CAIA NESSA!

A banca explora a confusão entre os privilégios de modificação. O candidato pode ser tentado a escolher a alternativa C (GRANT UPDATE, DELETE), que concede exatamente os privilégios que o enunciado proíbe — o analista não pode atualizar nem excluir. A pegadinha está em inverter o requisito: em vez de conceder o que é pedido (SELECT, INSERT), a alternativa C concede o oposto. Fique atento: leia sempre o que o enunciado pede e o que cada alternativa concede.

PEGA ESSA DICA!

Para questões de GRANT, monte mentalmente a tabela de privilégios: SELECT = leitura, INSERT = inserção, UPDATE = atualização, DELETE = exclusão. Depois, compare com o requisito do enunciado. Se o requisito é "apenas leitura e inserção", a resposta será GRANT SELECT, INSERT. Se o requisito é "sem atualizar ou excluir", elimine qualquer alternativa que contenha UPDATE ou DELETE.

Alternativa A — ❌ Incorreta

GRANT SELECT ON DATABASE postgres TO analista_app; — Este comando concede o privilégio SELECT sobre o banco de dados postgres, não sobre a tabela public.vendas. O privilégio SELECT em nível de banco de dados não permite consultar tabelas específicas; ele se aplica ao banco como um todo, e mesmo assim, no PostgreSQL, SELECT em banco de dados não é um privilégio comum — o correto seria conceder sobre a tabela. Além disso, o comando não concede INSERT, que é um dos requisitos. O erro está no objeto da concessão: deveria ser ON TABLE public.vendas, não ON DATABASE postgres.

Alternativa B — ❌ Incorreta

GRANT ALL PRIVILEGES ON TABLE public.vendas TO analista_app; — Este comando concede todos os privilégios sobre a tabela, incluindo UPDATE, DELETE, TRUNCATE, REFERENCES, TRIGGER, entre outros. O requisito é que o analista tenha apenas SELECT e INSERT. Conceder ALL PRIVILEGES dá muito mais do que o necessário, violando o princípio do menor privilégio. O erro está no escopo da concessão: em vez de listar apenas os privilégios desejados, concede tudo.

Alternativa C — ❌ Incorreta

GRANT UPDATE, DELETE ON TABLE public.vendas TO analista_app; — Este comando concede exatamente os privilégios que o enunciado proíbe: UPDATE (atualizar) e DELETE (excluir). O analista deve ter apenas leitura e inserção, sem permissão para atualizar ou excluir. Esta alternativa inverte o requisito, concedendo o oposto do que é pedido. O erro está na lista de privilégios: deveria ser SELECT, INSERT, não UPDATE, DELETE.

Alternativa D — ✅ Correta ⟵ GABARITO

GRANT SELECT, INSERT ON TABLE public.vendas TO analista_app; — Este comando concede exatamente os dois privilégios desejados: SELECT (consulta/leitura) e INSERT (inserção), sobre a tabela public.vendas, para o usuário analista_app. A sintaxe está correta: GRANT <privilégios> ON <objeto> TO <usuário>. O objeto é referenciado com o esquema (public.vendas), o que é uma boa prática e evita ambiguidades. O comando atende integralmente aos requisitos do enunciado.

Alternativa E — ❌ Incorreta

REVOKE ALL ON TABLE public.vendas FROM analista_app; — Este comando revoga todos os privilégios do usuário sobre a tabela, em vez de concedê-los. O enunciado pede para conceder privilégios de leitura e inserção, não para revogá-los. O comando REVOKE é o oposto do GRANT: enquanto GRANT adiciona permissões, REVOKE as remove. O erro está no tipo de comando: deveria ser GRANT, não REVOKE.

Gabarito: letra D — o comando GRANT SELECT, INSERT ON TABLE public.vendas TO analista_app; configura corretamente as permissões de leitura e inserção para o usuário, sem conceder privilégios de atualização ou exclusão.

Link permanente: /questoes/fc142271