Em um ambiente de gestão de dados de cidadãos em uma Assembleia Legislativa que utiliza PostgreSQL, há exigência de controle de acesso baseado em perfis funcionais e restrição de leitura a dados sensíveis. Nesse cenário, e diante da necessidade de conceder permissão de consulta na tabela cidadaos ao grupo de analistas, o comando que deve ser utilizado, em um ambiente ideal, é
AGRANT SELECT ON cidadaos TO analistas;
BCONSTRAINT SELECT ON cidadaos TO analistas;
CCREATE GRANT SELECT TO analistas ON cidadaos;
DCREATE PERMISSION TO SELECT TO analistas ON cidadaos;
EGRANT SELECT ON TABLE cidadaos TO ROLE analistas;
Revelar gabarito e comentário▾
GabaritoA — GRANT SELECT ON cidadaos TO analistas;
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”.
SQL: Comando GRANT (DCL) no PostgreSQL
Gabarito: letra A. Para conceder permissão de consulta (SELECT) na tabela cidadaos ao grupo de analistas, o comando correto é GRANT SELECT ON cidadaos TO analistas;. A sintaxe do GRANT segue a ordem: GRANT <privilégio> ON <objeto> TO <usuário/role>, e é o comando da DCL (Data Control Language) responsável por conceder privilégios de acesso.
O comando GRANT é um dos principais comandos da DCL (Data Control Language), a sublinguagem do SQL que controla os aspectos de autorização de dados e licenças de usuários para controlar quem tem acesso para ver ou manipular dados dentro do banco de dados. O outro principal comando é o REVOKE, que revoga privilégios. A sintaxe geral do GRANT é:
GRANT <lista de privilégios>
ON <nome da relação ou nome da visão>
TO <lista de usuários / funções / papéis>
[WITH GRANT OPTION];
No PostgreSQL, um "role" (papel) é um agrupamento de permissões que pode ser concedida a usuários, ou seja, é como se fosse um papel atribuído a cada usuário. Quando se concede um privilégio a um role, todos os usuários que pertencem a esse role herdam o privilégio. No enunciado, o grupo de analistas é um role, e a permissão de consulta (SELECT) deve ser concedida a esse role.
A alternativa A segue exatamente a sintaxe correta: GRANT SELECT ON cidadaos TO analistas;. A palavra ON é obrigatória para indicar o objeto (tabela) sobre o qual o privilégio é concedido. A palavra TO é obrigatória para indicar o destinatário (usuário ou role).
A alternativa E (GRANT SELECT ON TABLE cidadaos TO ROLE analistas;) também é uma sintaxe válida no PostgreSQL, pois a palavra TABLE é opcional e ROLE também é opcional (o PostgreSQL aceita GRANT SELECT ON TABLE cidadaos TO ROLE analistas;). No entanto, a banca considerou a alternativa A como a correta, pois é a forma mais direta e genérica, sem os termos opcionais. Em um ambiente ideal, a sintaxe mais simples e universalmente aceita é a da alternativa A.
As demais alternativas (B, C e D) estão incorretas porque usam palavras-chave que não fazem parte da sintaxe do GRANT: CONSTRAINT, CREATE GRANT, CREATE PERMISSION não são comandos ou cláusulas válidas para concessão de privilégios.
NÃO CAIA NESSA!
A banca tenta confundir o candidato com a alternativa E, que também é uma sintaxe válida no PostgreSQL (com TABLE e ROLE explícitos). No entanto, a questão pede o comando "em um ambiente ideal", e a alternativa A é a forma mais direta e universal. Fique atento: em questões de múltipla escolha, a banca pode considerar apenas a forma mais simples como correta, mesmo que outras sejam tecnicamente válidas.
Alternativa A — ✅ Correta ⟵ GABARITO
A alternativa A está correta porque segue exatamente a sintaxe do comando GRANT: GRANT SELECT ON cidadaos TO analistas;. O privilégio SELECT é concedido sobre a tabela cidadaos para o role analistas. Essa é a forma mais direta e universalmente aceita de conceder permissão de consulta.
Alternativa B — ❌ Incorreta
A alternativa B (CONSTRAINT SELECT ON cidadaos TO analistas;) está incorreta porque CONSTRAINT não é um comando SQL para concessão de privilégios. CONSTRAINT é uma palavra-chave usada na definição de restrições de integridade (como PRIMARY KEY, FOREIGN KEY, CHECK) em comandos DDL (CREATE TABLE, ALTER TABLE). Não existe CONSTRAINT SELECT na sintaxe do GRANT.
Alternativa C — ❌ Incorreta
A alternativa C (CREATE GRANT SELECT TO analistas ON cidadaos;) está incorreta porque CREATE GRANT não é um comando válido. O comando CREATE é usado para criar objetos (tabelas, views, roles, etc.), mas não para conceder privilégios. A concessão de privilégios é feita exclusivamente com o comando GRANT, sem a palavra CREATE.
Alternativa D — ❌ Incorreta
A alternativa D (CREATE PERMISSION TO SELECT TO analistas ON cidadaos;) está incorreta porque CREATE PERMISSION não é um comando SQL válido. Não existe CREATE PERMISSION na linguagem SQL. A concessão de privilégios é feita com GRANT, e a sintaxe correta não inclui CREATE PERMISSION.
Alternativa E — ❌ Incorreta (mas tecnicamente válida no PostgreSQL)
A alternativa E (GRANT SELECT ON TABLE cidadaos TO ROLE analistas;) é uma sintaxe válida no PostgreSQL, pois TABLE e ROLE são palavras-chave opcionais. No entanto, a banca considerou a alternativa A como a correta, pois é a forma mais direta e universal. Em questões de concurso, quando há duas alternativas tecnicamente corretas, a banca geralmente considera a mais simples e genérica como a resposta. Portanto, a alternativa E é considerada incorreta para fins de gabarito.