Todo acceso a una base de datos requiere conectar mediante un usuario y contraseña. Dicho usuario dará derecho a utilizar ciertos objetos de la base de datos, pero tendrá restringido (salvo que se trate de un superadministrador) el uso de otros.
A los usuarios se les asigna una serie de privilegios que son los que dan permiso de uso a ciertos objetos. Estos privilegios suelen agruparse en lo que se conoce como roles, que permiten estructurar mejor los permisos que se conceden a los usuarios. El perfil del usuario será el conjunto de permisos y restricciones que se aplican a dicho usuario.
Por ello cuando un usuario conecta debe probar que es quien dice ser (normalmente mediante una contraseña), es decir se autentifica. Por otro lado esta autentificación dará lugar a unos privilegios (unos derechos) y unas restricciones
Todo lo que se explica en esta unidad se refiere a la gestión de usuarios en la base de datos Oracle 11g.
Durante la instalación de Oracle se instalan dos cuentas administrativas y otras dos con permisos especiales para tareas de optimización y monitorización de la base de datos:
Oracle posee dos privilegios de sistema asociados a tareas administrativas, son:
La vista V$PWFILE_USERS nos permite examinar a los usuarios administrativos.
A los usuarios de Oracle se les puede asignar la configuración referida a:
La autentificación define la forma en la que el usuario verifica quién es. Hay métodos de autentificación más seguros que otros. Asegurar la autentificación implicaría asegurar el medio la comunicación entre usuario y base de datos con protocolos de cifrado. Por otro lado hay que proteger especialmente a los usuarios administradores.
Se permite el uso sólo en usuarios con privilegios administrativos. En el sistema operativo en el que se instale Oracle se crean dos grupos de usuarios relacionados con los dos privilegios de sistema SYDBA y SYSOPER. En Windows se llaman ORA_DBA y ORA_OPER respectivamente, en Linux normalmente son dba y oper.
Los usuarios de esos grupos conectarían mediante CONNECT / AS SYSDBA o CONNECT / AS SYSOPER.
Otra posibilidad es conectar con:
CONNECT /@servicioRed AS SYSDBA |
En este caso usamos los privilegios del sistema operativo para conectar con una base de datos remota cuyo nombre de servicio de red se indique. Esta forma sólo vale para máquinas dentro de un dominio Windows.
Se usa también para usuarios administrativos, especialmente cuando no se confía la autentificación vista en el apartado anterior.
Para usar esta forma de autentificación los usuarios de tipo SYSDBA o SYSOPER indican su nombre de usuario y contraseña al conectar (opcionalmente indican el host y/o nombre de servicio al que se desean conectar) esos datos se contrastarán con los del archivo de contraseñas utilizado.
Esta forma (y la anterior) permite conectar la base de datos aunque no esté montada todavía la base de datos.
La utilidad ORAPWD permite crear, si no existe, el archivo de contraseñas:
ORAPWD FILE=ruta [ENTRIES=n [FORCE=y|n[IGNORECASE=y|n]]] |
Funcionamiento:
Por otra lado el parámetro de sistema REMOTE_LOGIN_PASSWORDFILE (modificable con el comando ALTER SYSTEM SET…) permite indicar la forma en la que funciona el archivo de contraseñas. Valores posibles:
Es la forma habitual de autentificarse de los usuarios normales (los que no son administradores). En este caso los usuarios son autentificados mediante una contraseña que se contrastará en el diccionario de datos, que es donde se almacenan estas contraseñas.
Está configuración requiere la base de datos montada y abierta (al tener que usar el diccionario de datos).
La contraseña se pasa encriptada desde el ordenador cliente al servidor mediante el algoritmo AES.
Oracle delega la autentificación a un servicio externo que se asociará a Oracle. Ejemplos de servicios externos son Kerberos o RADIUS, este último sólo disponible en Windows. Requiere el uso de las mejoras de seguridad avanzada de Oracle.
Se trata de utilizar un servicio LDAP para realizar la autentificación. Oracle dispone de un servicio LDAP global integrado en Oracle Applications (plataforma de Oracle para le creación de aplicaciones) que se llama Oracle Internet Directory.
Si los usuarios sólo están dados de alta en el directorio externo, usarán todos la misma cuenta de Oracle; para independizarles se requiere darles de alta en ambos servicios (Oracle y el Oracle Internet Directory).
La sentencia de creación de usuarios (que es compatible con SQL estándar) es:
CREATE USER nombre IDENTIFIED BY contraseña [opciones] |
El formato completo de la instrucción con todas sus cláusulas es:
CREATE USER nombre {IDENTIFIED BY contraseña | EXTERNALLY | GLOBALLY AS nombreGlobal}
[DEFAULT TABLESPACE tableSpacePorDefecto]
[TEMPORARY TABLESPACE tableSpacetTemporal]
[QUOTA {cantidad [K|M] | UNLIMITED} ON tablespace [QUOTA {cantidad [K|M] | UNLIMITED} ON tablespace […]] ] [PASSWORD EXPIRE] [ACCOUNT {UNLOCK|LOCK}];
[PROFILE {perfil | DEFAULT}]
|
Sólo la primera línea es obligatoria, el resto posee opciones por defecto que se aplican si no se especifica cada apartado (no hace falta especificar todos, sólo las líneas que nos interesen).
Ejemplo:
CREATE USER jsanchez IDENTIFIED BY Caracola DEFAULT TABLESPACE Usuarios QUOTA 15M ON Usuarios //Se dan 15MBytes de espacio en el tablespace ACCOUNT LOCK; //La cuenta estará bloqueada
|
La contraseña, si no se usan comillas dobles, no puede tener ni espacios en blanco ni caracteres nacionales como la eñe. En caso de querer usar estos símbolos se usan comillas dobles, lo que permitirá establecer contraseñas más complejas.
Cada parámetro indicado anteriormente se puede modificar mediante la instrucción ALTER USER que se utiliza igual que CREATE USER. Ejemplo:
ALTER USER jsanchez QUOTA UNLIMITED ON usuarios |
Se realiza mediante:
DROP USER usuario [CASCADE] |
La opción CASCADE elimina los objetos del esquema del usuario antes de eliminar al propio usuario. Es obligatorio si el esquema contiene objetos.´
La vista administrativa DBA_USERS muestra la lista y configuración de todos los usuarios del sistema. Para observar la estructura de la vista, siempre es conveniente usar DESCRIBE DBA_USERS con el fin de consultar las columnas que nos interesen más
Los privilegios son permisos que damos a los usuarios para que puedan realizar ciertas operaciones con la base de datos. En Oracle hay más de cien posibles privilegios. Se dividen en:
Se comentan algunos de los privilegios de sistema más importantes
|
Privilegio |
Significado |
|
CREATE SESSION |
Permite al usuario conectar con la base de datos |
|
RESTRICTED SESSION |
Permite al usuario establecer sesión con la base de datos en caso de que la base de datos esté en modo restringido mediante la instrucción: ALTER SYSTEM ENABLE RESTRICTED Sólo los usuarios con este privilegio puede conectar con la base de datos si ésta se encuentra en este modo. |
|
ALTER DATABASE |
Permite modificar la estructura de la base de datos |
|
ALTER SYSTEM |
Permite modificar los parámetros y variables del sistema |
|
CREATE TABLE |
Permite crear tablas. Incluye la posibilidad de borrarlas. |
|
GRANT ANY OBJECT PRIVILEGE |
Permite conceder privilegios sobre objetos que no son del usuario (pertenecen a otros usuarios) a terceros usuarios. |
|
CREATE ANY TABLE |
Permite crear tablas en otros esquemas de usuario |
|
DROP ANY TABLE |
Permite borrar tablas de otros usuarios |
|
SELECT ANY TABLE |
Permite seleccionar datos en tablas de otros usuarios |
|
INSERT ANY TABLE |
Permite añadir datos en tablas de otros usuarios |
|
UPDATE ANY TABLE |
Permite eliminar datos en tablas de otros usuarios |
|
DELETE ANY TABLE |
Permite eliminar datos en tablas de otros usuarios |
En la tabla anterior se ha hecho hincapié en los privilegios referidos a las tablas, para otros objetos el funcionamiento es similar: igual que hay CREATE TABLE, se puede usar CREATE VIEW para las vistas o INDEX, TRIGGER, PROCEDURE, SEQUENCE, SYNONYM, TYPE,… y de esa forma podemos conceder privilegio de creación de otros objetos. Lo mismo con el resto de operaciones
Hay dos privilegios especiales que permiten conceder nivel de DBA, son: SYSDBA y SYSOPER. Se han comentado anteriormente.
La lista completa de privilegios es:
|
Privilegio |
Significado |
|
Sesiones |
|
|
ALTER SESSION |
Modificar el funcionamiento de la sesión |
|
ALTER RESOURCE COST |
Modifica los parámetros de cálculo de coste de la sesión |
|
RESTRICTED SESSION |
Conectar aunque la base de datos se haya iniciado en modo restringido |
|
Base de datos y sistema |
|
|
ALTER DATABASE |
Modificar la base de datos (privilegio de gran capacidad administrativa) |
|
ALTER SYSTEM |
Modificar los parámetros del sistema |
|
AUDIT SYSTEM |
Auditar la base de datos |
|
Usuarios, roles, privilegios y perfiles |
|
|
CREATE USER |
Crear usuarios pudiendo indicar tablespace por defecto, cuotas y perfiles |
|
ALTER USER |
Modificar al usuario. Permite cambiar la contraseña y modo de autentificación, tablespace por defecto, cuota de uso de disco, roles y el perfil del usuario |
|
DROP USER |
Borrar usuario |
|
CREATE PROFILE |
Crear perfiles |
|
ALTER PROFILE |
Modificar perfiles |
|
DROP PROFILE |
Borrar perfiles |
|
CREATE ROLE |
Crear roles |
|
ALTER ANY ROLE |
Modificar roles |
|
GRANT ANY ROLE |
Conceder roles |
|
GRANT ANY PRIVILEGE |
Conceder privilegios de sistema |
|
Directorios |
|
|
CREATE ANY DIRECTORY |
Crear directorios |
|
DROP ANY DIRECTORY |
Borrar directorios |
|
Tablespaces (espacios de tabla) |
|
|
CREATE TABLESPACES |
Crear tablespaces |
|
ALTER TABLESPACE |
Modificar tablespaces |
|
DROP TABLESPACE |
Borrar tablespaces |
|
MANAGE TABLESPACE |
Administrar el espacio de tablas para poder hacer copia de seguridad o simplemente quedar online u offline el tablespace |
|
UNLIMITED TABLESPACE |
Usa cuota ilimitada al escribir en cualquier tablespace. Este privilegio elimina las cuotas establecidas sobre el usuario, si las hubiera. |
|
Tablas |
|
|
CREATE TABLE |
Crear tablas en el esquema del usuario, incluye insertar, modificar y eliminar datos de la misma; así como eliminar la propia tabla |
|
ALTER ANY TABLE |
Modificar tablas de cualquier usuario |
|
BACKUP ANY TABLE |
Utilizar la utilidad Export para copiar datos de otros esquemas. |
|
CREATE ANY TABLE |
Crear tablas en cualquier esquema |
|
DELETE ANY TABLE |
Borrar filas de tablas en cualquier esquema |
|
DROP ANY TABLE |
Borrar tablas en cualquier esquema |
|
INSERT ANY TABLE |
Añadir datos a cualquier tabla |
|
SELECT ANY TABLE |
Seleccionar datos de tablas en cualquier esquema |
|
UPDATE ANY TABLE |
Modificar datos de tablas de cualquier esquema |
|
LOCK ANY TABLE |
Bloquear tablas, vistas e instantáneas en cualquier esquema |
|
FLASHBACK ANY TABLE |
Realizar acción de flashback en tablas, vistas e instantáneas en cualquier esquema |
|
Vistas |
|
|
CREATE VIEW |
Crear vistas en el esquema del usuario |
|
CREATE ANY VIEW |
Crear vistas en cualquier esquema |
|
DROP ANY VIEW |
Borrar cualquier vista en cualquier esquema |
|
UNDER ANY VIEW |
Crear subvistas |
|
Instantáneas (Snapshots o vistas materializadas) |
|
|
CREATE MATERIALIZED VIEW |
Crear vistas materializadas (instantáneas) |
|
CREATE ANY MATERIALIZED VIEW |
Crear vistas materializadas (instantáneas) en cualquier esquema |
|
ALTER ANY MATERIALIZED VIEW |
Modificar vistas materializadas (instantáneas) en cualquier esquema |
|
DROP ANY MATERIALIZED VIEW |
Borrar vistas materializadas (instantáneas) en cualquier esquema |
|
GLOBAL QUERY REWRITE |
Permite realizar operaciones de lectura escritura en instantáneas que usan tablas de otros esquemas |
|
CREATE SNAPSHOT |
Crear instantáneas (obsoleto) |
|
ALTER ANY SNAPSHOT |
Modificar instantáneas de cualquier usuario (obsoleto) |
|
CREATE ANY SNAPSHOT |
Crear instantáneas a cualquier usuario (obsoleto) |
|
DROP ANY SNAPSHOT |
Borrar instantáneas (obsoleto) |
|
PL/SQL |
|
|
CREATE PROCEDURE |
Crear procedimientos y funciones PL/SQL |
|
ALTER ANY PROCEDURE |
Modificar procedimientos y funciones de cualquier usuario |
|
CREATE ANY PROCEDURE |
Crear funciones y procedimientos en cualquier esquema |
|
DROP ANY PROCEDURE |
Borrar cualquier procedimiento en cualquier esquema |
|
EXECUTE ANY PROCEDURE |
Ejecutar cualquier procedimiento en cualquier esquema |
|
CREATE TRIGGER |
Crear triggers |
|
ALTER ANY TRIGGER |
Modificar triggers de cualquier usuario |
|
CREATE ANY TRIGGER |
Crear triggers en cualquier esquema |
|
DROP ANY TRIGGER |
Borrar triggers de cualquier esquema |
|
ADMINISTER DATABASE TRIGGER |
Crear triggers de sistema (requiere además el privilegio CREATE TRIGGER) |
|
CREATE LIBRARY |
Crear librerías de procedimientos y funciones en el esquema de usuario |
|
CREATE ANY LIBRARY |
Crear librerías de procedimientos y funciones en cualquier esquema |
|
DROP ANY TRIGGER |
Borrar cualquier trigger |
|
DROP LIBRARY |
Borrar librería de procedimientos y funciones en el esquema de usuario |
|
DROP ANY LIBRARY |
Borrar librerías de procedimientos y funciones en cualquier esquema |
|
EXECUTE ANY LIBRARY |
Ejecutar cualquier librería |
|
Tipos de datos |
|
|
CREATE TYPE |
Crear tipos de datos personales |
|
ALTER ANY TYPE |
Modificar tipos de datos personales en cualquier usuario |
|
CREATE ANY TYPE |
Crear tipos de datos en cualquier esquema |
|
DROP ANY TYPE |
Borrar tipos de datos de cualquier esquema |
|
EXECUTE ANY TYPE |
Permite invocar a tipos de datos personales presentes en cualquier esquema |
|
Índices |
|
|
ALTER ANY INDEX |
Modificar índices de la base de datos (incluye modificar claves primarias, secundarias,…) |
|
CREATE ANY INDEX |
Crear índices en cualquier esquema |
|
DROP ANY INDEX |
Borrar índices en cualquier esquema |
|
Secuencias y sinónimos |
|
|
ALTER ANY SEQUENCE |
Modificar secuencias de cualquier usuario |
|
CREATE ANY SEQUENCE |
Crear secuencias en cualquier esquema |
|
CREATE ANY SYNONYM |
Crear sinónimos en cualquier esquema |
|
CREATE SEQUENCE |
Crear secuencias |
|
CREATE SYNONYM |
Crear sinónimos |
|
CREATE PUBLIC SYNONYM |
Crear sinónimos públicos |
|
DROP PUBLIC SYNONYM |
Borrar sinónimos públicos |
|
CREATE ANY SEQUENCE |
Crear secuencias en cualquier esquema |
|
DROP ANY SEQUENCE |
Borrar secuencias en cualquier esquema |
|
DROP ANY SYNONYM |
Borrar sinónimos en cualquier esquema |
|
SELECT ANY SEQUENCE |
Seleccionar cualquier secuencia de cualquier esquema |
|
Clusters |
|
|
CREATE CLUSTER |
Crea y modifica clusters en el esquema actual |
|
ALTER ANY CLUSTER |
Modificar clusters |
|
CREATE ANY CLUSTER |
Crear clusters en cualquier esquema |
|
DROP ANY CLUSTER |
Borrar cualquier cluster |
|
Segmentos de rollback |
|
|
CREATE ROLLBACK SEGMENT |
Crear segmentos de rollback |
|
ALTER ROLLBACK SEGMENT |
Modificar segmentos de rollback |
|
DROP ROLLBACK SEGMENT |
Borrar segmento de rollback |
|
Enlaces a base de datos |
|
|
CREATE DATABASE LINK |
Crear enlaces privados a bases de datos en el esquema del usuario |
|
CREATE PUBLIC DATABASE LINK |
Crear enlaces públicos a bases de datos |
|
CREATE DATABASE LINK |
Modificar enlaces privados a bases de datos |
|
CREATE PUBLIC DATABASE LINK |
Modificar enlaces públicos a bases de datos |
|
DROP PUBLIC DATABASE LINK |
Borrar enlaces públicos a bases de datos |
|
Programación de tareas |
|
|
CREATE JOB |
Crear trabajo planificado en el esquema actual |
|
Crea, modifica y elimina tareas, programas y credenciales de cualquier esquema (excepto SYS). Esto permite ejecutar código en cualquier esquema de cualquier usuario. |
|
|
Crear un trabajo en el esquema de usuario procedente del planificador de tareas del sistema operativo |
|
|
Ejecutar cualquier programa presente en un trabajo planificado del esquema de usuario. |
|
|
Asignar cualquier clase a un trbajo en el esquema de usuario. |
|
|
Administrar el planificador de tareas, |
|
|
Varios |
|
|
ANALYZE ANY |
Analizar cualquier tabla, clúster o índice en cualquier esquema. |
|
ANALYZE ANY DICTIONARY |
Analizar cualquier elemento del diccionario de datos |
|
SELECT ANY DICTIONARY |
Realizar SELECT sobre las vistas del diccionario de datos |
|
AUDIT ANY |
Auditar a cualquier objeto de la base de datos |
|
BECOME USER |
Convertirse en otro usuario al utilizar algunas de las utilidades de Oracle |
|
COMMENT ANY TABLE |
Realizar comentarios sobre tablas, columnas y vistas en cualquier esquema de la base de datos |
|
SELECT ANY TRANSACTION |
Seleccionar los datos de la vista FLASHBACK_TRANSACTION_QUERY que controla el proceso de la actual operación flashback. |
|
FORCE ANY TRANSACTION |
Forzar aceptar (COMMIT) las transacciones en duda en un sistema distribuido de bases de datos en cualquier conexión |
|
FORCE TRANSACTION |
Forzar aceptar (COMMIT) la transacción actual en caso de duda. |
|
SYSDBA |
Privilegio general de administrador |
|
Varios |
|
|
SYSOPER |
Privilegio general de administrador (más bajo que el anterior) |
|
FLASHBACK ARCHIVE ADMINISTER |
Crea, elimina o modifica cualquier archivo de flashback |
|
DEBUG CONNECT SESSION |
Conectar la sesión a un depurador |
|
DEBUG ANY PROCEDURE |
Conectar procedimientos, funciones y/o código Java a un depurador |
Se usa con la instrucción GRANT que funciona así:
GRANT privilegio1 [,privilegio2[,…]] TO usuario
[WITH ADMIN OPTION];
La opción WITH ADMIN OPTION permite que el usuario al que se le concede el privilegio puede conceder dicho privilegio a otros usuarios. Es, por tanto, una opción a utilizar con cautela.
Ejemplo:
GRANT CREATE SESSION, ALTER SESSION, CREATE TABLE,
CREATE VIEW, CREATE SYNONYM, CREATE SEQUENCE,
CREATE TRIGGER, CREATE PROCEDURE, CREATE TYPE
TO jsanchez; |
Retira privilegios concedidos a un usuario. Se realiza con la instrucción REVOKE que funciona de esta forma:
REVOKE privilegio1 [,privilegio2 [,…]] FROM usuario; |
Al revocar los privilegios, las acciones llevadas a cabo con ellos (borrar, modificar,…) no se anulan.
Las instrucciones vistas anteriormente otorgan o quitan permisos generales, es decir dictan qué operaciones, en general, puede realizar un usuario.
Los privilegios de objeto marcan qué operaciones le están permitidas a un usuario realizar sobre el objeto
Sintaxis:
GRANT {privilegio [(listaColumnas)] [,privilegio [(listaColumnas)] [,…]] |
ALL [PRIVILEGES]}
ON [esquema.]objeto TO {usuario | rol | PUBLIC} [,{usuario | rol | PUBLIC} [,…]] [WITH GRANT OPTION] |
La opción ALL concede todos los privilegios posibles sobre el objeto. Se pueden asignar varios privilegios a la vez y también varios posibles usuarios. La opción WITH GRANT OPTION permite al usuario al que se le conceden los privilegios, que pueda, a su vez, conceder esos mismos privilegios a otro usuario.
Ejemplo de uso de GRANT con privilegios de objeto:
GRANT UPDATE, INSERT ON jsanchez.personas TO anozal;
En la siguiente tabla se enumeran los posibles privilegios que se pueden aplicar a un determinado objeto:
|
Privilegio |
Aplicable a |
|
SELECT |
Tablas, vistas, instantáneas, secuencias |
|
INSERT |
Tablas, vistas, |
|
UPDATE |
Tablas, vistas |
|
DELETE |
Tablas, vistas |
|
ALTER |
Tablas, secuencias |
|
EXECUTE |
Procedimientos, funciones, paquetes, sinónimos, programas en directorios |
|
INDEX |
Tablas (para crear índices en la misma) |
|
REFERENCES |
Tablas (para crear claves secundarias, FOREIGN KEY) |
|
UNDER |
Vistas, para crear subvistas |
|
DEBUG |
Depurar procedimientos y funciones mediante programa externo |
|
ON COMMIT REFRESH |
Actualizar la vista materializada (o instantánea) al realizar un COMMIT |
|
QUERY REWRITE |
Escribir en la vista materializada (o instantánea) |
|
READ |
Directorios |
|
WRITE |
Directorios |
|
FLASHBACK ARCHIVE |
Archivos de datos flashback (activar o desactivar) |
Para hacerlo, la sintaxis es:
REVOKE {privilegio1 [,privilegio2] [,…]] |
ALL [PRIVILEGES]} ON [esquema.]objeto FROM {usuario | rol | PUBLIC} [,{usuario | rol | PUBLIC} [,…]]
[CASCADE CONSTRAINTS] |
CASCADE CONSTRAINTS elimina cualquier restricción que impida el borrado del privilegio.
Sólo puede revocar los privilegios de objeto concedidos, el usuario que concedió dichos privilegios.
Las vistas que permiten mostrar información sobre privilegios son:
|
Vista |
Significado |
|
DBA_SYS_PRIVS |
Privilegios de sistema asignados a usuarios y roles |
|
DBA_TAB_PRIVS |
Lista de todos los privilegios de todos los objetos de la base de datos |
|
DBA_COL_PRIVS |
Lista de todos los privilegios aplicados a columnas de la base de datos |
|
SESSION_PRIVS |
Privilegios en activo para el usuario y sesión actuales |
|
USER_SYS_PRIVS |
Privilegios de sistema asignados al usuario |
|
USER_TAB_PRIVS_MADE |
Privilegios de objeto asignados a los objetos del usuario actual |
|
USER_TAB_PRIVS_RECD |
Privilegios de objeto (de otros usuarios) concedidos al usuario actual |
|
USER_COL_PRIVS_MADE |
Privilegios de objeto asignados a columnas de objetos del usuario actual |
|
USER_COL_PRIVS_RECD |
Privilegios asignados a columnas de objetos (de otros usuarios) y concedidos al usuario actual |
Los roles son privilegios aglutinados sobre un mismo nombre, bajo la idea de que ese conjunto denote un uso habitual sobre la base de datos. Gracias a los roles se facilita la asignación de privilegios a los usuarios. Un usuario puede tener asignados varios roles y viceversa.
Los roles se crean usando esta sintaxis
CREATE ROLE rol [NOT IDENTIFIED | IDENTIFIED {BY password | EXTERNALLY | GLOBALLY | USING package}]; |
La opción IDENTIFIED hace que el rol sólo pueda utilizarse si el usuario se identifica con el método que indiquemos en esta instrucción. Las formas de identificarse son las mismas formas que se utilizan al identificar un usuario (vistas anteriormente), salvo que ahora disponemos de una nueva: la opción PACKAGE que hace que el rol sólo se pueda utilizar si usamos el paquete de aplicaciones indicado.
Por defecto un rol no requiere identificación.
Disponemos de la instrucción ALTER ROLE permite modificar la configuración del rol. Tiene las mismas opciones que CREATE ROLE y sólo se usa si deseamos establecer un nuevo método para autentificarnos.
Se realiza con la instrucción GRANT y se usa igual que cuando establecemos permisos a los usuarios, en la sintaxis de los comandos GRANT y REVOKE vistas anteriormente, simplemente se indicaría un nombre de rol en lugar de un nombre de usuario. Por ejemplo si deseamos asignar los privilegios CREATE TABLE y CONNECT a un rol llamado rol1. Se haría:
GRANT CREATE TABLE, CONNECT TO rol1; |
De la misma forma, podemos quitar privilegios asignados a un rol mediante el comandol REVOKE:
REVOKE CREATE TABLE FROM rol1;
La sintaxis completa para asignar roles a un usuario es:
GRANT rol1 [,rol2 [,…]] TO {usuario|rol|PUBLIC [,{usuario|rol|PUBLIC} [,…] }
[WITH ADMIN OPTION] |
Al igual que en las instrucciones anteriores, PUBLIC asigna el rol a todos los usuarios y WITH ADMIN OPTION permite al usuario al que se le concede el rol, conceder él dicho rol a otros usuarios/as.
Los usuarios tienen una serie de roles por defecto, estos son aquellos roles que van unidos al usuario, de modo que en cuanto un usuario lanza una sesión, los privilegios que contienen sus roles por defecto, comienzan a funcionar.
Cuando asignamos un rol mediante el comando GRANT, este pasa a ser un rol por defecto.
Oracle dispone de una serie de roles predefinidos que se pueden asignar a los usuarios. Hay más de cincuenta roles predefinidos. Los clásicos son:
|
rol |
significado |
|
CONNECT |
Permite crear sesiones. Se mantiene por compatibilidad |
|
RESOURCE |
Permite crear tablas y código PL/SQL del tipo que sea. Se mantiene por compatibilidad |
|
DBA |
Permite casi todo, excepto manejar la instancia de la base de datos |
No todos los roles aparecen activados. Para saber los roles que están activados en una sesión de usuario, bastará con consultar el contenido de la vista SESSION_ROLES.
Al iniciar sesión cada usuario tendrá activados los privilegios que se le asignaron explícitamente y los roles por defecto.
La activación (y también la desactivación) de un rol se realiza mediante SET ROLE (sólo podemos activar y desactivar roles que el usuario tenga asignados mediante la instrucción GRANT). Su sintaxis es:
SET ROLE { rol1 [IDENTIFIED BY contraseña]
[,rol2 [IDENTIFIED BY contraseña] [,…]] | ALL [EXCEPT rol1 [,rol2 [,…]]] | NONE };
|
Las posibilidades son:
La activación y desactivación sólo sirve para la sesión actual, en la siguiente sesión volverán a estar activados sólo los roles por defecto.
Cuando se crea un usuario mediante CREATE USER, no disponemos de la posibilidad de asignar un rol por defecto. De hecho se le asigna automáticamente la opción ALL que hace que todos los roles que se le asignen en el futuro (mediante GRANT) pasarán a ser roles por defecto.
Por ello la instrucción que administra los roles por defecto es ALTER USER:
ALTER USER usuario
DEFAULT ROLE {rol1 [,rol2 [,…]| ALL [EXCEPT rol1 [,rol2[,…]] |NONE ]};
|
La opción ALL coloca a todos los roles como roles por defecto, EXCEPT especifica una lista de roles que no serán colocados como roles por defecto. NONE hace que no haya ningún rol por defecto. Finalmente podemos simplemente especificar la lista de roles que quedarán como roles por defecto.
Lo hace la instrucción DROP ROLE, seguida del rol a borrar. Desde ese momento a los usuarios a los que se habían asignado el rol se les revoca.
Existen varias vistas para examinar los roles.
|
Vista |
Significado |
|
DBA_ROLES |
Muestra todos los roles de la base de datos |
|
DBA_ROLES_PRIVS |
Roles asignados a los usuarios |
|
ROLE_ROLE_PRIVS |
Roles asignados a otros roles |
|
DBA_SYS_PRIVS |
Privilegios de sistema asignados a usuarios y roles |
|
ROLE_SYS_PRIVS |
Privilegios de sistema asignados a roles |
|
ROLE_TAB_PRIVS |
Privilegios de objeto concedidos a roles |
|
SESSION_ROLES |
Roles en activo para el usuario actual |
Los perfiles permiten limitar los recursos que los usuarios usan de la base de datos. Hay un perfil llamado DEFAULT que se aplica automáticamente a todos los usuarios y que les da recursos ilimitados sobre la base de datos. Para limitar el número de recursos se debe de activar (poniéndola el valor TRUE) la variable de sistema RESOURCE_LIMIT (que por defecto está a FALSE). Esto se hace así:
ALTER SYSTEM SET RESOURCE_LIMIT=TRUE; |
En realidad hay dos tipos de parámetros de los perfiles:
|
Variable de perfil |
Significado |
|
FAILED_LOGIN_ATTEMPTS |
Número consecutivo de errores en las contraseñas antes de bloquear la cuenta. Por defecto son 10 |
|
PASSWORD_LOCK_TIME |
Número de días hasta que se bloquea una cuenta si se supera el límite de intentos al meter una contraseña. Por defecto es uno |
|
PASSWORD_LIFE_TIME |
Números de días que tiene vigencia una contraseña. Por defecto es 180 |
|
PASSWORD_GRACE_TIME |
Días que la contraseña se la concede un periodo extra de gracia tras consumir su tiempo de vida. Por defecto es 7 |
|
PASSWORD_REUSE_TIME |
Número de días que una contraseña puede ser reutilizada |
|
PASSWORD_VERIFY_FUNCTION |
Función a la que se invoca cuando se modifica una contraseña con el fin de verificar su validez en base a las reglas de complejidad que deseemos |
Perfiles relacionados con el uso de recursos. Establecen el máximo o mínimo uso de recursos de la base de datos por parte del usuario.
|
Variable de perfil |
Significado |
|
SESSIONS_PER_USER |
Número de conexiones de usuario concurrentes que se permiten. |
|
CPU_PER_SESSION |
Límite de tiempo (en centésimas de segundo) que se permite a un usuario utilizar la CPU antes de ser echado del sistema. De esa forma se evitan peligros de rendimiento |
|
CPU_PER_CALL |
Como la anterior pero referida a cada proceso |
|
PRIVATE_SGA |
Para conexiones en instalaciones de servidor compartido, número de KB que puede consumir cada sesión en la zona de memoria compartida (SGA) |
|
CONNECT_TIME |
Minutos como máximo que se permite a una sesión |
|
IDLE_TIME |
Minutos máximos de inactividad de una sesión |
|
LOGICAL_READS_PER_SESSION |
Máximo número de bloques leídos en una sesión |
|
LOGICAL_READS_PER_CALL |
Máximo número de bloques leídos por un proceso |
|
COMPOSITE_LIMIT |
Máximo número de recursos consumidos por una sesión. Es la media ponderada de varios parámetros anteriores |
crear perfiles
Sintaxis:
CREATE PROFILE perfil LIMIT parámetro1 valor1 [parametro2 valor [...]] |
Los parámetros a especificar son los que aparecen en la tabla anterior. A cada parámetro se le indica un valor, o bien la palabra DEFAULT si deseamos que tome su valor por defecto, o bien UNLIMITED para indicar que el parámetro tomará un valor de infinito.
Ejemplo:
CREATE PROFILE programador LIMIT
SESSIONS_PER_USER UNLIMITED CPU_PER_SESSION UNLIMITED
IDLE_TIME 15 CONNECT_TIME 150 FAILED_LOGIN_ATTEMPTS 5 PASSWORD_LOCK_TIME 2;
|
La instrucción ALTER PROFILE funciona igual que CREATE PROFILE y es la encargada de hacer modificaciones a un perfil creado.
En este caso es DROP PROFILE seguida del nombre del perfil a eliminar. Se puede usar la palabra CASCADE para eliminar todas las restricciones que impidan borrar el perfil. Sintaxis:
DROP PROFILE nombrePerfil [CASCADE] |
Cada usuario tiene un solo perfil. La instrucción de creación de usuarios (CREATE USER) dispone de la cláusula PROFILE para indicar el perfil que se asigna a ese usuario.
Si lo que deseamos es asignar un perfil a un usuario después de haberle creado, disponemos de la instrucción ALTER USER con la que podemos indicar el perfil. Ejemplo:
ALTER USER jsanchez PROFILE programador; |