Concediendo permisos a un Rol
Un rol es una forma de simplificar el proceso de gestión de privilegios, ya que nos permite agrupar un conjunto de privilegios los cuales pueden ser otorgados o revocados al usuario. Por tanto, un rol por si solo no tiene funcionalidad, debemos asignarle los permisos o privilegios asociados al mismo.
Asignar privilegio de sistema.
La forma de dar permisos a un rol es muy similar a la forma de dar permisos a un usuario. Por ejemplo, si quisiéramos darle permiso para consultar cualquier tabla al rol DESARROLLO, podemos escribir:
- GRANT SELECT ANY TABLE TO DESARROLLO
Para ejecutar la línea pulsamos Intro. Si se muestra el mensaje [Grant succeeded], es señal que se ha realizado la operación correctamente. De esta forma le hemos asignado el privilegio de sistema SELECT ANY TABLE al rol DESARROLLO.
Podemos asignarle también el privilegio de crear tablas ejecutando la siguiente línea:
- GRANT CREATE TABLE TO DESARROLLO
Ahora el rol DESARROLLO contiene los permisos de sistema para seleccionar y crear tablas. Para ver los permisos que tiene asignado un rol podemos hacerlo consultando la tabla DBA_SYS_PRIVS. Está tabla contiene tanto los permisos asignados a los usuarios como a los roles.
Por ejemplo, podemos escribir la consulta:
- SELECT GRANTEE, PRIVILEGE FROM DBA_SYS_PRIVS WHERE GRANTEE=[DESARROLLO]
De esta forma estamos indicando que se nos muestren los registros de la tabla pertenecientes al rol desarrollo. Al ejecutar la consulta obtenemos como resultado que el rol DESARROLLO tiene los privilegios que le hemos asignado anteriormente, ¨CREATE TABLE¨ y ¨SELECT ANY TABLE¨.
Asignar privilegios sobre objetos.
Para asignar privilegios sobre objetos específicos como tablas, a los roles podemos usar el comando GRANT.
Por ejemplo, podemos ejecutar:
- GRANT SELECT ON SYS.PRODUCTOS TO DESARROLLO
De esta forma estamos asignando el privilegio SELECT sobre la tabla PRODUCTOS al rol DESARROLLO. En la línea anterior hemos asignado el privilegio a la tabla a través del administrador de la misma, esto es conveniente cuando el usuario conectado no es el propietario de la tabla, en el caso de que sea el propietario podríamos escribir o no el usuario antes de la tabla.
Para ver los privilegios a nivel de objetos podemos hacerlo consultando la tabla DBA_TAB_PRIVS. Para esto ejecutaremos la consulta:
- SELECT GRANTEE, TABLE_NAME, PRIVILEGE, OWNER FROM DBA_TAB_PRIVS WHERE GRANTEE=[DESARROLLO]
De esta forma podremos ver las tab
asignando permisos rol