Transcripción Eliminando roles en Oracle DBA: pasos necesarios
En la administración de base de datos es muy importante la consulta a los roles existentes en el sistema, así como los privilegios asociados a los mismos.
Para esto podemos consultar el contenido de varias tablas. Por lo que vamos a ver algunas de las principales tablas de las que nos podemos auxiliar para acceder a la información relacionada con los roles.
Tablas a nivel de sistema.
DBA_ROLES.
La primera que veremos es la tabla DBA_ROLES, aquí podremos ver un listado con los roles existentes, así como los diferentes atributos asociados a los mismos. Por tanto, para ver el contenido de la tabla escribiremos la siguiente consulta:
- SELECT ROLE_ID, ROLE FROM DBA_ROLES
De esta manera estaremos listando el id y el nombre de todos los roles del sistema. Esta tabla contiene otros atributos como por ejemplo:
- PASSWORD_REQUIRED, AUTHENTICATION_TYPE, ORACLE_MAINTAINED, INHERITED y otros, los cuales puede consultar si son de su interés.
Al ejecutar la consulta podemos ver que nos arroja como resultado 90 registros o filas, donde se nos muestran los roles existentes ya sean del sistema o creados por un usuario.
Si por ejemplo ahora creamos un nuevo rol ejecutando la línea:
- CREATE ROLE PRODUCCIÓN
Y ahora vamos y consultamos nuevamente la tabla DBA_ROLES. Pero esta vez seleccionando los atributos ROLE, ORACLE_MAINTAINED, los cuales nos mostrarán el nombre del rol y si es mantenido por Oracle.
Vemos como resultado que nos aparece el rol PRODUCCIÓN que hemos creado, y si nos fijamos podemos ver que no es mantenido por Oracle.
Recordar que los datos mantenidos por Oracle solo pueden ser modificados por scripts desarrollados por Oracle, en este caso los dos últimos roles han sido creados por un usuario y no son mantenidos por Oracle, por lo que se pueden modificar.
DBA_ROLES_PRIVS.
Otra de las tablas más importantes relacionadas con los roles es la tabla DBA_ROLES_PRIVS.
Si por ejemplo escribimos:
- SELECT GRANTEE, GRANTED_ROLE FROM DBA_ROLES_PRIVS
Y ahora ejecutamos la consulta. Podemos ver entonces los privilegios asociados a los diferentes usuarios a nivel del rol. Anteriormente vimos que son muchos registros en la tabla DBA_ROLES_PRIVS.
Para filtrar mejor el resultado de nuestra consulta vamos a buscar por usuario:
- SELECT GRANTEE, GRANTED_ROLE FROM DBA_ROLES_PRIVS WHERE GRANTEE = 'DESA1'
De esta manera buscaremos solo los roles asignados al usuario DESA1. Si ahora ejecutamos la consulta, podemos ver que para el usuario DESA1 tenemos los roles CONNECT y DESARROLLO. Podemos también invertir la búsqueda y buscar a partir del rol, es decir listar los usuarios a partir del rol asignado.
Para esto podemos escribir:
- SELECT GRANTEE, GRANTED_ROLE FROM DBA_ROLES_PRIVS WHERE GRANTED_ROLE = 'DESARROLLO'
Al ejecutar la consulta entonces, podemos ver que con el rol DESARROLLO tenemos dos usuarios, el usuario SYS y el usuario DESA1.
Tablas a nivel de usuario.
Hasta ahora hemos visto cómo consultar información de los roles a nivel de sistema. Veamos cómo consultar información de los roles a nivel de usuario.
Para esto vamos a salir de la sesión e iniciar sesión con el usuario DESA1.
SESSION_ROLES.
Una vez iniciada la sesión lo primero que estaremos viendo es cómo obtener los roles con los que estamos trabajando en la misma. Para esto vamos a auxiliarnos de la tabla SESSION_ROLES, la cual contiene los roles asociados al usuario de la sesión. Por tanto, vamos a ejecutar la consulta:
- SELECT * FROM SESSION_ROLES
Cómo vemos se muestra de manera básica la información acerca de los roles de la sesión.
USER_ROLE_PRIVS.
Para ver más información acerca de los roles podemos consultar la tabla USER_ROLE_PRIVS. En este caso vamos a ejecutar la consulta con los atributos más importantes.
Así que escribimos:
- SELECT USERNAME, GRANTE
eliminando roles