Questão nº 62
Questão de Tecnologia da Informação · FGV TJ-AP 2024 (nº 62)
Observe o seguinte script de concessão de privilégios em MySQL:
```
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, INSERT, DELETE ON db.t1 TO u1;
CREATE USER u2;
GRANT SELECT, INSERT, UPDATE ON db.t2 TO u2 WITH GRANT OPTION;
CREATE USER u3;
GRANT ALL PRIVILEGES ON db.* TO u3;
REVOKE INSERT ON db.t1 FROM u1;
```
Após a execução do script apresentado, é correto afirmar que o(s) usuário(s):
- Au1 e u3 poderão executar a instrução INSERT INTO db.t1 VALUES ROW (2);
- Bu2 poderá executar a instrução UPDATE db.t1 SET c=2;
- Cu2 poderá conceder o privilégio de UPDATE para o usuário u1; (alternativa correta)
- Du1 e u3 poderão executar a instrução DELETE FROM db.t2;
- Eu3 poderá conceder o privilégio de UPDATE para o usuário u1.
Resposta comentada
Gabarito Alternativa C
O controle de acesso em bancos de dados, conhecido como DCL (Data Control Language), permite gerenciar quem pode fazer o quê (privilégios) em quais objetos (tabelas, bancos de dados, etc.) usando comandos como `GRANT` (conceder) e `REVOKE` (revogar). A cláusula `WITH GRANT OPTION` é crucial, pois ela permite que um usuário não apenas execute um privilégio, mas também o conceda a outros usuários.
(A) Incorreta: O usuário `u1` teve o privilégio `INSERT ON db.t1` revogado (`REVOKE INSERT ON db.t1 FROM u1;`), portanto não pode executar a instrução `INSERT`.
(B) Incorreta: O usuário `u2` recebeu privilégios (`SELECT, INSERT, UPDATE`) apenas sobre a tabela `db.t2`, e não sobre `db.t1`.
(C) Correta: O usuário `u2` recebeu o privilégio `UPDATE ON db.t2 WITH GRANT OPTION`. A cláusula `WITH GRANT OPTION` permite que `u2` conceda o privilégio `UPDATE` (especificamente sobre `db.t2`) a outros usuários, como `u1`.
(D) Incorreta: O usuário `u1` possui o privilégio `DELETE` apenas sobre a tabela `db.t1`, e não sobre `db.t2`.
(E) Incorreta: Armadilha da banca. O usuário `u3` recebeu `ALL PRIVILEGES ON db.`. Em MySQL, quando `ALL PRIVILEGES` é concedido em nível de banco de dados (`db.`), o privilégio `GRANT OPTION` é implicitamente incluído, permitindo que `u3` conceda qualquer privilégio sobre `db.` (incluindo `UPDATE`) a outros usuários. Portanto, `u3` poderia conceder o privilégio de `UPDATE` para `u1`. No entanto, se esta alternativa é dada como incorreta, a banca pode estar exigindo que a cláusula `WITH GRANT OPTION` seja explicitamente* declarada no comando `GRANT` para que um usuário possa re-conceder privilégios, mesmo que a documentação do MySQL indique o contrário para `ALL PRIVILEGES` em nível de banco de dados. A pegadinha reside em não assumir o comportamento padrão do MySQL ou em uma interpretação mais restritiva da necessidade de declaração explícita do `GRANT OPTION`.
Fonte: FGV TJ-AP 2024 Analista Judiciário - TI - Banco de Dados (Caderno Tipo 1). Reproduzida para fins de estudo.