Lo que hace falta es que podemos otorgar ACTUALIZACIÓN en un subconjunto de las columnas de una tabla.
Antes que nada, concedamos SELECT en una tabla. El valor de UPDATE_PRIV es 'N', para Ninguno:
SQL> grant select on t23 to mr_x;
Grant succeeded.
SQL> select select_priv, update_priv
2 from table_privileges
3 where table_name = 'T23'
4/
S U
- -
Y N
SQL>
Ahora, si Concedo UPDATE en una sola columna el valor de UPDATE_PRIV es 'S', presumiblemente para Algunos:
SQL> grant update (col2) on t23 to mr_x
2/
Grant succeeded.
SQL> select select_priv, update_priv
2 from table_privileges
3 where table_name = 'T23'
4/
S U
- -
Y S
SQL>
por último, concedo UPDATE en toda la tabla el valor de UPDATE_PRIV es 'a', por Todo:
SQL> grant update on t23 to mr_x
2/
Grant succeeded.
SQL> select select_priv, update_priv
2 from table_privileges
3 where table_name = 'T23'
4/
S U
- -
Y A
SQL>
¿Hay algún motivo por el que deba utilizar la vista 'table_privileges'? Sería mucho más común usar 'dba_tab_privs' (o' all_tab_privs ') y 'role_tab_privs' para examinar los privilegios de nivel de tabla. Creo que 'table_privileges' está algo especificado en el estándar SQL, por lo que quizás esté tratando de obtener algún nivel de independencia de la base de datos, pero mirando la documentación de la vista' table_privileges' en varias bases de datos, no parece que el conjunto de columnas es el mismo en todos los proveedores de bases de datos, así que no estoy seguro de que te compre algo. –
no, simplemente tropecé con una declaración usando table_privileges. gracias por el consejo;) –