PDA

Ver la Versión Completa : grant / revoke en oracle a nivel columna


avmm2004
11-10-2006, 14:04:46
Tengo un programa hecho en delphi que hace el mantenimiento de una tabla. Hasta ahí todo bien. Si el usuario que se conecta a la base de datos no tiene permisos de select o update o insert lo controlo desde delphi perfectamente. Pero el problema se presenta cuando el usuario tiene permisos, por ejemplo de update sobre la tabla y yo quiero que no me actualice / modifique determinadas columnas de la tabla. Las combinaciones son muchas y lo que no quiero es ponerlas en programa (en codigo) ya que cuando se cree un usuario nuevo, tengo que cambiar programa. En otras bases de datos, por ejemplo postgres, existe el Grant y el revoke a nivel de tabla y tambien a nivel de columna. ¿ Existe algo parecido en Oracle ? ¿ Es otro concepto ?.
Se me ha ocurrido hacerlo a nivel de triggers (before update) pero es una lata tambien. He pensado en las views pero son de lectura y complican el tema. Se les ocurre alguna forma.??? Gracias. :confused:

lucasarts_18
12-10-2006, 15:55:12
Por lo menos hasta la versión 9i solo tiene permiso sobre tabla completa y no sobre columnas específicas. :(

Desconozco si la versión 10g posea ésta característica..

Hasta Luego--

jr_ewing
12-10-2006, 16:48:00
Se me ocurre que se pueda crear un role que se le asigne únicamente a los usuarios que pueden modificar la tabla sin restricciones, y que en el trigger BEFORE UPDATE se levante una exception si el usuario intenta modificar alguna de las columnas restringidas y no tiene ese role, controlando contra la view USER_ROLE_PRIVS.

avmm2004
14-10-2006, 12:08:55
Rebuscando en la documentación encontré que si se puede.
grant update (campo, campo, campo) on tabla to user.

Gracias a todos.

lucasarts_18
14-10-2006, 17:41:49
Rebuscando en la documentación encontré que si se puede.

Código SQL [-] (http://www.clubdelphi.com/foros/#)grant update (campo, campo, campo) on tabla to user

.

Gracias a todos.

¿En qué versión ? , Había búscado en la versión 9i, pero no había encontrado nada :(

avmm2004
14-10-2006, 17:55:33
Yo hice las pruebas en la 9i. De todas formas la documentación la encontré en un libro de Mcgraw hill del administrador de la 8i. Estaba mencionado muy por encima, como un esquema de los que podía funcionar y de hecho funciona. Ahora me queda la parte del error que me devuelve oracle. Siempre que intento, por ejemplo, actualizar una columna sobre el que no tiene permiso me devuelve el error de permisos insuficientes al delphi (lógico ¿no?) pero no me devuelve el campo que lo produjo. No todo es perfecto. Tendré que seguir mirando o alguien sabe algo de eso ????:confused: