Questão de Banco de Dados — Segurança em Banco de Dados — FCC 2026
Banco de Dados›Seguranç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 é:
AGRANT SELECT ON DATABASE postgres TO analista_app;
BGRANT ALL PRIVILEGES ON TABLE public.vendas TO analista_app;
CGRANT UPDATE, DELETE ON TABLE public.vendas TO analista_app;
DGRANT SELECT, INSERT ON TABLE public.vendas TO analista_app;
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 GRANTadiciona 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 dadospostgres, 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 apenasSELECT 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.