Questão de Banco de Dados — Consultas e Comandos em SQL — FGV 2024
Banco de Dados›Consultas e Comandos em SQL
Código
fg165228
Banca
FGV
Órgão
ALEP
Ano
2024
Cargo
Ana Leg ( )
Seja o esquema de um banco de dados relacional seguinte, criado pelo usuário U1, que possui direito de criação de tabelas no ambiente: AUTOR ( id_autor <PK>, nome_autor ) RELATORIO ( id_rel <PK>, conteudo, id_autor <FK>, data_registro ) Restrições de integridade: Tabela AUTOR: id_autor é chave primária; nome_autor \ne NULO. Tabela RELATORIO: id_rel é chave primária; conteudo \ne NULO; data_registro \ne NULO; id_autor é chave estrangeira e referencia LOCALIDADE(id_loc). Os usuários U2 e U3 receberam de U1 o direito de consulta e atualização nas tabelas AUTOR e RELATORIO. Dado que o usuário U2 desfruta da confiança de U1, ele recebeu o benefício de propagação dos direitos que recebeu. Já o usuário U4 recebeu de U1 apenas o direito de consulta na tabela RELATORIO. Mais adiante, o usuário U1 soube que o usuário U2 propagou o direito de atualização para o usuário U4 na tabela RELATORIO, sem que ele (usuário U1) tivesse conhecimento do fato. Tendo em vista a quebra de confiança, o usuário U1 decidiu revogar todos os direitos concedidos anteriormente a U2, deixando-o sem acesso ao seu banco de dados. Considerando os mecanismos de segurança discricionários de sistemas de bancos de dados relacionais, assinale a opção que indica o comando SQL a seguir reflete alguma das situações descritas no contexto apresentado.
AGRANT select ON Relatorio TO U4 WITH GRANT OPTION
BGRANT select, update ON Autor, Relatorio TO U2 WITH GRANT OPTION
CGRANT select, update ON Autor, Relatorio TO U2, U3
DREVOKE select, update ON Autor, Relatorio FROM U2 WITHOUT GRANT OPTION
EREVOKE select, update ON Relatorio FROM U3
Revelar gabarito e comentário▾
GabaritoB — GRANT select, update ON Autor, Relatorio TO U2 WITH GRANT OPTION
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”.
Controle de Acesso Discricionário (DAC) e Propagação de Privilégios no SQL
Gabarito: letra B. O comando GRANT select, update ON Autor, Relatorio TO U2 WITH GRANT OPTION reflete exatamente a situação descrita: U1 concedeu a U2 os direitos de consulta e atualização nas tabelas AUTOR e RELATORIO, e, por desfrutar de sua confiança, U2 recebeu o benefício de propagação desses direitos (a cláusula WITH GRANT OPTION). É essa cláusula que permite a U2 repassar os privilégios a outros usuários, como fez com U4, gerando a quebra de confiança que motivou a revogação.
O controle de acesso discricionário (DAC – Discretionary Access Control) é o mecanismo de segurança em que o proprietário de um objeto (no caso, U1, dono das tabelas) decide, a seu critério, quem pode acessar seus recursos e com quais permissões. No SQL, esse controle é implementado principalmente pelos comandos GRANT (conceder) e REVOKE (revogar), que pertencem à sublinguagem DCL (Data Control Language). A ideia central é que o dono do objeto tem total discricionariedade para administrar os acessos, podendo delegar essa administração a outros usuários.
A propagação de privilégios é o ponto-chave deste tema. Quando um usuário recebe uma permissão com a cláusula WITH GRANT OPTION, ele não apenas passa a ter o direito de executar a ação, mas também o direito de conceder essa mesma permissão a outros usuários. Isso cria uma cadeia de delegação de autoridade. No contexto apresentado, U1 concedeu a U2 os direitos com essa opção, e U2, por sua vez, concedeu o direito de atualização a U4. Essa propagação é legítima do ponto de vista técnico (U2 tinha a opção de conceder), mas configurou uma quebra de confiança do ponto de vista administrativo, levando U1 a revogar todos os direitos de U2.
A revogação de privilégios também tem suas nuances. Quando U1 revoga os direitos de U2, o que acontece com os privilégios que U2 concedeu a U4? Em muitos SGBDs, a revogação é em cascata (cascade): se U2 perde o direito de conceder (por ter perdido o privilégio original), os privilégios que ele concedeu a outros também são revogados. No entanto, a questão não pergunta sobre o efeito da revogação em U4, mas sim qual comando reflete a situação inicial de concessão. A alternativa B é a única que descreve corretamente a concessão inicial de U1 para U2, com a opção de propagação.
A pegadinha da questão está em confundir os comandos de concessão e revogação, e em não identificar corretamente a cláusula que permite a propagação. O candidato que não domina o WITH GRANT OPTION pode não entender por que U2 conseguiu repassar o direito a U4, e pode se confundir entre as alternativas que tratam de GRANT e REVOKE. A chave é ler atentamente o enunciado e identificar qual comando corresponde a cada ação descrita.
Guarde a distinção entre os comandos e a função da cláusula WITH GRANT OPTION: é ela que habilita a propagação de privilégios, e é exatamente nesse ponto que as alternativas se dividem.
Controle de acesso discricionário (DAC)
1GRANT
Concede privilégios
WITH GRANT OPTION
Permite propagar a outros
2REVOKE
Retira privilégios
Efeito em cascata
Revoga o que foi propagado
LEVEL · soulevel.com.br
Alternativa A — ❌ Incorreta
Este comando concede apenas o direito de select (consulta) na tabela RELATORIO a U4, sem a opção de propagação (WITH GRANT OPTION). No enunciado, U4 recebeu de U1 apenas o direito de consulta na tabela RELATORIO, o que esta alternativa até reflete parcialmente. Porém, o comando não corresponde à situação descrita como a principal: a concessão inicial de U1 a U2 com propagação. Além disso, U4 recebeu o direito de atualização de U2, não de U1, e este comando não reflete essa propagação. O erro está em não representar a concessão com WITH GRANT OPTION que U1 fez a U2, que é o cerne da questão.
Alternativa B — ✅ Correta ⟵ GABARITO
Este comando concede os direitos de select e update (consulta e atualização) nas tabelas AUTOR e RELATORIO a U2, com a opção de propagação (WITH GRANT OPTION). Isso corresponde exatamente à situação descrita: U1 concedeu a U2 os direitos de consulta e atualização nas duas tabelas, e, por confiar em U2, deu-lhe o benefício de propagar esses direitos. É essa cláusula que permite a U2 conceder o direito de atualização a U4, gerando a quebra de confiança. A alternativa B é a única que reflete fielmente a concessão inicial com a opção de propagação.
Alternativa C — ❌ Incorreta
Este comando concede os direitos de select e update nas tabelas AUTOR e RELATORIO a U2 e U3, sem a opção de propagação (WITH GRANT OPTION). O enunciado afirma que U2 recebeu o benefício de propagação, o que esta alternativa não reflete. Além disso, U3 recebeu de U1 o direito de consulta e atualização, mas não há menção a U3 ter recebido a opção de propagação. O erro está em omitir a cláusula WITH GRANT OPTION para U2, que é o ponto central da questão.
Alternativa D — ❌ Incorreta
Este comando revoga os direitos de select e update nas tabelas AUTOR e RELATORIO de U2, sem a opção de propagação (WITH GRANT OPTION). A cláusula WITH GRANT OPTION no REVOKE não é uma sintaxe válida para revogar a opção de propagação; ela é usada no GRANT para conceder essa opção. No REVOKE, a sintaxe correta para revogar a opção de propagação seria REVOKE GRANT OPTION FOR .... Além disso, o comando não reflete a situação descrita, pois U1 decidiu revogar todos os direitos de U2, não apenas a opção de propagação. O erro está na sintaxe inválida e na incompletude da revogação.
Alternativa E — ❌ Incorreta
Este comando revoga os direitos de select e update na tabela RELATORIO de U3. No enunciado, U3 recebeu de U1 o direito de consulta e atualização nas tabelas AUTOR e RELATORIO, mas não há menção a U3 ter propagado esses direitos ou a U1 ter revogado os direitos de U3. A revogação descrita no contexto é a de U2, não a de U3. O erro está em revogar os direitos de um usuário que não teve seus privilégios revogados no contexto apresentado.