Permissão de update em somente uma coluna
Ehhhh, vida bandida. Sempre caímos em velhos dilemas.
Mais uma para não esquecer.
Em sistemas concorrentes, quando há algumas tabelas compartilhadas (também conhecidas como tabelas corporativas), não é raro um dos sistemas precisar efetuar uma atualização somente em uma coluna (geralmente por questões de segurança ou auditoria).
Segue um exemplo do grant.
SQL> desc t1;
Nome Nulo? Tipo
-------------- -------- ------
C1 NUMBER
C2 NUMBER
C3 NUMBER
SQL>
Digamos que o usuário TAMTAM terá acesso irrestrito a tabela e o usuário TAMBEM terá privilégio de SELECT e UPDATE na coluna C2.
SQL> grant all on t1 to TAMTAM;
Concessao bem-sucedida
SQL> grant select on t1 to TAMBEM;
Concessao bem-sucedida
SQL> grant update (c2) on t1 to TAMBEM;
Concessao bem-sucedida
Agora um pequeno exemplo de como essas permissões funcionam, usando os usuários TAMBAM e TAMBEM.
SQL> conn tamtam/tamtam
Connected.
SQL> select * from t1;
no rows selected
SQL> insert into t1 values (1,1,1);
1 row created.
SQL> commit;
Commit complete.
SQL> select * from t1;
C1 C2 C3
---------- ---------- ----------
1 1 1
SQL> conn tambem/tambem
Connected.
SQL> select * from t1;
C1 C2 C3
---------- ---------- ----------
1 1 1
SQL> insert into t1 values (2,2,2);
insert into t1 values (2,2,2)
*
ERROR at line 1:
ORA-01031: insufficient privileges
SQL> update t1 set c1=2;
update t1 set c1=2
*
ERROR at line 1:
ORA-01031: insufficient privileges
SQL> update t1 set c2=2;
1 row updated.
SQL> commit;
Commit complete.
SQL> select * from t1;
C1 C2 C3
---------- ---------- ----------
1 2 1
SQL>
Como demonstrado, o usuário TAMTAM tem acesso irrestrito a tabela e o usuário TAMBEM, permissão de SELECT e UPDATE somente na coluna C2 na mesma tabela.