Questão nº 63
Questão de Tecnologia da Informação · FGV TJ-SE Servidor 2023 (nº 63)
Observe o seguinte script de concessão de privilégios em MySQL a seguir.
CREATE DATABASE db;
CREATE TABLE db.t1 (c INT);
INSERT INTO db.t1 VALUES ROW (1);
CREATE TABLE db.t2 (c INT);
INSERT INTO db.t2 VALUES ROW (1);
CREATE USER u1;
GRANT SELECT, UPDATE ON db.t1 TO u1;
CREATE USER u2;
GRANT ALL PRIVILEGES ON db.t2 TO u2;
CREATE USER u3;
GRANT SELECT, INSERT, UPDATE ON db.* TO u3 WITH GRANT OPTION;
REVOKE INSERT ON db.t2 FROM u2;
Após a execução do script apresentado, é correto afirmar que o(s) usuário(s):
- Au2 poderá executar a instrução DELETE FROM db.t1;
- Bu3 poderá conceder o privilégio de INSERT para o usuário u1; (alternativa correta)
- Cu2 poderá conceder o privilégio de DELETE para o usuário u1;
- Du1 e u3 poderão executar a instrução UPDATE db.t2 SET c=2;
- Eu2 poderá executar a instrução INSERT INTO db.t2 VALUES ROW (2);
Resposta comentada
Gabarito Alternativa B
Privilégios em MySQL definem quais ações um usuário pode realizar em objetos (como bancos de dados ou tabelas). A cláusula `WITH GRANT OPTION` é fundamental, pois ela permite que um usuário não apenas execute certas ações, mas também conceda esses mesmos privilégios a outros usuários.
A) Incorreta: O usuário `u2` possui privilégios apenas sobre a tabela `db.t2` (e mesmo assim, não tem `INSERT` nela), e não sobre `db.t1`.
(B) Correta: O usuário `u3` foi concedido `INSERT` sobre `db.` (todas as tabelas do banco `db`) COM A OPÇÃO DE CONCEDER (`WITH GRANT OPTION`). Isso significa que `u3` pode conceder o privilégio de `INSERT` (que ele mesmo possui) sobre qualquer tabela do banco `db` (incluindo `db.t1`) para outro usuário, como `u1`.
C) Incorreta: Embora `u2` possua o privilégio `DELETE` na tabela `db.t2` (pois `ALL PRIVILEGES` foi concedido e `DELETE` não foi revogado), ele não recebeu a cláusula `WITH GRANT OPTION` junto com seus privilégios. Sem `WITH GRANT OPTION`, um usuário não pode conceder privilégios a outros. Armadilha da banca: A tentação aqui é pensar que "ALL PRIVILEGES" inclui a capacidade de conceder privilégios. No MySQL, `ALL PRIVILEGES` em um objeto (como uma tabela) não inclui `GRANT OPTION` por padrão; esta deve ser concedida explicitamente.
D) Incorreta: O usuário `u1` possui `UPDATE` apenas sobre `db.t1`, não sobre `db.t2`. Embora `u3` possa executar `UPDATE` em `db.t2` (pois tem `UPDATE ON db.`), a afirmação é falsa porque `u1` não pode.
E) Incorreta: O script explicitamente revoga o privilégio `INSERT` de `u2` na tabela `db.t2` com a instrução `REVOKE INSERT ON db.t2 FROM u2;`. Portanto, `u2` não pode mais inserir dados nessa tabela.
Fonte: FGV TJ-SE Servidor 2023 Analista Judiciário - Análise de Sistemas - Suporte Técnico em Infraestrutura (Caderno Tipo 1). Reproduzida para fins de estudo.