GRANTS WITH GRANT OPTION: La propietat transitiva en la concessió de permisos

Versió per a imprimir

La instrucció grant s'utilitza per concedir determinats permisos genèrics o bé permisos sobre objectes a usuaris de la base de dades.
La sintaxi de la mateixa és la següent:

GRANT [privilegios_de_sistema | roles]
TO [usuarios | roles |PUBLIC] {WITH GRANT OPTION }


per concedir permisos genèrics

GRANT [ALL {PRIVILEGES} | SELECT | INSERT | UPDATE | DELETE] ON objeto
TO [usuario | rol | PUBLIC] {WITH GRANT OPTION}


per concedir permisos sobre objectes
La sintaxi és molt senzilla, i els privilegis els pot concedir l'usuari propietari dels objectes, o un usuari amb privilegis de concessió de permisos sobre objectes que no són seus (DBA's).
El que volia comentar és la utilització de l'opció WITH GRANT OPTION, que permet que l'usuari al que li han concedit permisos pugui al seu torn concedir a altres usuaris.
Mostraré la utilitzeu d'aquesta opció amb un exemple:

Imaginem que tenim un usuari 'U_VISTA', que crea una vista amb una consulta que consulta informació d'un objecte d'un altre usuari 'U_DATOS'. Fins aquí és senzill, ja que amb un GRANT l'usuari 'U_DATOS' a l'usuari 'U_VISTA' sobre aquests objectes el tema està solucionat.U_DATOS: U_DATOS:

SQL> GRANT SELECT ON TABLA TO U_VISTA;

El problema vindria si tenim un tercer usuari 'U_CONSULTA', que ha d'utilitzar aquesta vista. Es podria pensar que amb donar permisos d'accés a aquest usuari a la consulta per part de 'U_VISTA', i permisos d'accés als objectes que consulta la vista per part de 'U_DATOS' ja estaria tot bé:U_VISTA: U_VISTA:

SQL> GRANT SELECT ON VISTA TO U_CONSULTA;


U_DATOS:

SQL> GRANT SELECT ON TABLA TO U_CONSULTA;


Doncs no, no és suficient perquè per accedir a aquestes dades a través de la vista ha de ser el mateix propietari de la vista qui concedeixi els permisos a un tercer. Diguem que per a la concessió de privilegis no es compleix la propietat transitiva.
Perquè 'U_CONSULTA' pugui treballar sobre la VISTA sense que la base de dades li retorni un ORA-00942, el propietari dels objectes (o un usuari DBA) ha de concedir privilegis sobre aquests objectes a l'altre usuari, però amb permisos perquè aquest pugui al seu torn concedir a altres usuaris:U_DATOS: U_DATOS:

SQL> GRANT SELECT ON TABLA TO U_VISTA WITH GRANT OPTION;


U_VISTA:

SQL> GRANT SELECT ON U_DATOS.TABLA TO U_CONSULTA;
SQL> GRANT SELECT ON VISTA TO U_CONSULTA;


U_CONSULTA:

SQL> SELECT * FROM VISTA;


I això és tot, U_CONSULTA ja podeu consultar les dades de la vista.

 

 

Latest Status Updates

Investigando

   - negrito_cl fa 1 dia -

Busco Consultor ARTUS para proyecto en Panamá, será contratado en Mx, al concluir regresará en México.Enviar CV bhernandez@intellego.com.mx

   - Intellego fa 3 dies -

Intellego es líder en consultoría y servicios para la gestión de información.

   - Intellego fa 3 dies -

Infográfico sobre el nuevo escenario de la información http://bit.ly/dflh8B

   - carlos fa 1 setmana -

Anunciando el laboratorio de Dataprix: www.labs.dataprix.com

   - carlos fa 1 setmana -