2012-01-12 17 views
5

enter image description hereTABLE_PRIVILEGES oráculo valores

¿Alguien sabe los valores que se dan en los TABLE_PRIVILEGES? Ya descubrí lo que significa "A". Pero no descubrí lo que significa la "S". Creo que esto no está documentado. Tiene algo que ver con los privilegios de actualización en columnas particulares.

+4

¿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. –

+0

no, simplemente tropecé con una declaración usando table_privileges. gracias por el consejo;) –

Respuesta

3

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> 
+0

muy agradable! ¡gracias! –

4

Lo siento pero habiendo notado an answer que @JustinCave dio a esta misma pregunta en 2005 tengo que publicarlo.

De la documentación de SQL en TABLE_PRIVILEGES

http://download-west.oracle.com/docs/cd/B10501_01/server.920/a96536/ch2486.htm#1318903

"TABLE_PRIVILEGES contiene información sobre las subvenciones sobre los objetos para los que el usuario es el otorgante, concesionario o propietario, o público es el concesionario. Esta vista se incluye para compatibilidad con Oracle versión 6. Oracle Corporation recomienda que no utilice esta vista. "

Dado que Oracle recomienda que no use esta vista, le recomendaría utilizar la vista DBA_TAB_PRIVS en lugar de la . La información debería ser un poco más fácil de descifrar.

+0

Buen hallazgo. ¡Al menos Justin en 2012 es consistente con su yo más joven! – APC

+0

@Ben - Lástima que el yo más joven parecía tener mejor Google Fu. Traté de encontrar una referencia a 'TABLE_PRIVILEGES' en la documentación el día de hoy y no fue tan exitoso como lo fui hace 7 años. –

+0

@JustinCave, su Google Fu puede estar disminuyendo, pero aparentemente mi fecha Fu está teniendo muchos más problemas. He editado esta respuesta porque, como usted señaló, su publicación original fue 6 años después de lo que dije originalmente ... ¡doh! – Ben