M2 - Bases de dades / Continguts UF3: Perfils
Aquest material s'ha elaborat a partir de la pàgina de Orlando Olguin
Contingut
Introducción
La forma en que funciona un perfil, es que al mismo, se le asignan valores que serán los límites para modelar el comportamiento del usuario o esquema al que será asignado. Un límite, puede ser la cantidad de segundos que el usuario estará sin realizar actividades en la base de datos antes de ser desconectado. Otro límite, puede ser la cantidad de intentos fallidos de conexión por contraseña incorrecta. Estos límites, los detallo más adelante. Los profiles existen desde la versión 7 de la base de datos, prácticamente con la misma estructura.
Para que los perfiles funcionen, el parámetro de la base de datos resource_limit, deberá tener el valor a true.
SQL> show parameter resource_limit NAME TYPE VALUE ------------------- -------- ------- resource_limit boolean TRUE Per activar/desactivar la limitació de recursos: ALTER SYSTEM SET RESOURCE_LIMIT=TRUE [SCOPE = BOTH] La clàusula SCOPE = BOTH fa que la modificació sigui persistent en cas de es reinicií la base de dades.
Creación, borrado y alteración de perfiles
Para crear un perfil, se requiere tener el privilegio CREATE PROFILE asignado en el usuario que lo quiere crear, y se usa el siguiente comando:
create profile nombre_perfil limit nombre_limite_1 [valor entero | unlimited | default ] nombre_limite_2 [valor entero | unlimited | default ] ... nombre_limite_n [valor entero | unlimited | default ];
Por defecto, cada perfil creado tiene todos los límites posibles del mismo de acuerdo a la versión de la base de datos. Existe un perfil llamado default el cual, regirá a todos los usuarios de la base de datos, mientras no sea creado uno nuevo y asignado a un usuario en especial. En el perfil creado, los límites que no sean asignados con un valor predefinido, tendrán el valor del perfil default de la base de datos, como se ve en el siguiente ejemplo:
SQL> create profile lim_prueba limit connect_time 45; Profile created. SQL> select * 2 from dba_profiles 3 where profile = 'LIM_PRUEBA' 4 order by resource_name; PROFILE RESOURCE_NAME RESOURCE LIMIT -------------------- ------------------------- -------- --------------- LIM_PRUEBA COMPOSITE_LIMIT KERNEL DEFAULT LIM_PRUEBA CONNECT_TIME KERNEL 45 LIM_PRUEBA CPU_PER_CALL KERNEL DEFAULT LIM_PRUEBA CPU_PER_SESSION KERNEL DEFAULT LIM_PRUEBA FAILED_LOGIN_ATTEMPTS PASSWORD DEFAULT LIM_PRUEBA IDLE_TIME KERNEL DEFAULT LIM_PRUEBA LOGICAL_READS_PER_CALL KERNEL DEFAULT LIM_PRUEBA LOGICAL_READS_PER_SESSION KERNEL DEFAULT LIM_PRUEBA PASSWORD_GRACE_TIME PASSWORD DEFAULT LIM_PRUEBA PASSWORD_LIFE_TIME PASSWORD DEFAULT LIM_PRUEBA PASSWORD_LOCK_TIME PASSWORD DEFAULT LIM_PRUEBA PASSWORD_REUSE_MAX PASSWORD DEFAULT LIM_PRUEBA PASSWORD_REUSE_TIME PASSWORD DEFAULT LIM_PRUEBA PASSWORD_VERIFY_FUNCTION PASSWORD DEFAULT LIM_PRUEBA PRIVATE_SGA KERNEL DEFAULT LIM_PRUEBA SESSIONS_PER_USER KERNEL DEFAULT 16 rows selected.
Este perfil, lo podemos modificar si nuestro usuario tiene el privilegio ALTER PROFILE. Gracias a éste, podemos asignar o desasignar valores a los distintos límites del perfil.
SQL> alter profile lim_prueba limit password_life_time 30; Profile altered. SQL> select * 2 from dba_profiles 3 where profile = 'LIM_PRUEBA' 4 order by resource_name; PROFILE RESOURCE_NAME RESOURCE LIMIT -------------------- ------------------------- -------- --------------- LIM_PRUEBA COMPOSITE_LIMIT KERNEL DEFAULT LIM_PRUEBA CONNECT_TIME KERNEL 45 LIM_PRUEBA CPU_PER_CALL KERNEL DEFAULT LIM_PRUEBA CPU_PER_SESSION KERNEL DEFAULT LIM_PRUEBA FAILED_LOGIN_ATTEMPTS PASSWORD DEFAULT LIM_PRUEBA IDLE_TIME KERNEL DEFAULT LIM_PRUEBA LOGICAL_READS_PER_CALL KERNEL DEFAULT LIM_PRUEBA LOGICAL_READS_PER_SESSION KERNEL DEFAULT LIM_PRUEBA PASSWORD_GRACE_TIME PASSWORD DEFAULT LIM_PRUEBA PASSWORD_LIFE_TIME PASSWORD 30 LIM_PRUEBA PASSWORD_LOCK_TIME PASSWORD DEFAULT LIM_PRUEBA PASSWORD_REUSE_MAX PASSWORD DEFAULT LIM_PRUEBA PASSWORD_REUSE_TIME PASSWORD DEFAULT LIM_PRUEBA PASSWORD_VERIFY_FUNCTION PASSWORD DEFAULT LIM_PRUEBA PRIVATE_SGA KERNEL DEFAULT LIM_PRUEBA SESSIONS_PER_USER KERNEL DEFAULT 16 rows selected.
Nota. Si se desea regresar un valor al default, se tendrá que poner dicho valor en vez de un número propiamente.
Para borrar un perfil, nada más tenemos que aplicar el comando drop como en muchos tipos de objetos en Oracle.
SQL> drop profile lim_prueba; Profile dropped. SQL> select * 2 from dba_profiles 3 where profile = 'LIM_PRUEBA' 4 order by resource_name; no rows selected
Ok, entonces ya sabemos crear un perfil y que le podemos asignar un límite con algún valor que nos sea de utilidad. Ahora, ¿cuáles son los límites que podemos asignar a un perfil? A continuación, muestro una lista de los valores y lo que afectan.
Límites aplicables a perfiles
COMPOSITE_LIMIT Suma del máximo de CPU_PER_SESSION, CONNECT_TIME, LOGICAL_READS_PER_SESSION y PRIVATE_SGA. Si este limite es excedido, Oracle aborta la sesión y regresa un error.
CONNECT_TIME Tiempo permitido de conexión por sesión en minutos.
CPU_PER_CALL Máximo tiempo de CPU por llamada en centésimas de segundo.
CPU_PER_SESSION Máximo tiempo de CPU por sesión en centésimas de segundo.
IDLE_TIME Tiempo máximo permitido sin actividad por el usuario antes de ser desconectado. Se expresa en minutos.
LOGICAL_READS_PER_CALL Máximo número de bloques de base de datos leídos por llamada.
LOGICAL_READS_PER_SESSION Máximo numero de bloques de base de datos leídos por sesión.
PRIVATE_SGA Máxima cantidad de bytes de espacio privado reservado en la SGA. Se puede expresar en el formato enteroK para kilobytes o enteroM para megabytes.
SESSIONS_PER_USER Máximo número de sesiones concurrentes permitidas por usuario.
FAILED_LOGIN_ATTEMPTS Número de intentos fallidos de conexión de un usuario, antes de que Oracle ponga la cuenta bloqueada.
PASSWORD_GRACE_TIME Número de días de gracia para realizar un cambio de password de nuestra cuenta. Si en el periodo de tiempo delimitado no fue cambiado el password, el password expira.
PASSWORD_LIFE_TIME Número de días de vida de un password.
PASSWORD_LOCK_TIME Número de días que permanecerá bloqueado un usuario después de rebasar el límite FAILED_LOGIN_ATTEMPTS.
PASSWORD_REUSE_MAX Número de veces que debe cambiar una contraseña antes de poder ser re-usada la original.
PASSWORD_REUSE_TIME Número de días que tienen que pasar para poder re-usar un password.
PASSWORD_VERIFY_FUNCTION En este parámetro, se puede especificar un script para validar el password. Por ejemplo, que tenga una determinada cantidad de caracteres, que tenga letras y números, etcétera.
Asignando el perfil a un usuario
Cuando ya tenemos creado nuestro perfil, podemos asignarlo a los distintos usuarios por medio de un alter user, o al momento de crearlos con create user.
alter user nombre_usuario profile nombre_perfil; create user nombre_usuario identified by password_usuario default tablespace nombre_tbs temporary tablespace nombre_tbs profile nombre_perfil;
por ejemplo,
SQL> alter user curso profile lim_prueba; User altered. SQL> select username, default_tablespace, temporary_tablespace, profile 2 from dba_users 3 where username = 'CURSO'; USERNAME DEFAULT_TABLESPACE TEMPORARY_TABLESPACE PROFILE -------------------- ------------------------- ------------------------- -------------------- CURSO DATOS TEMP LIM_PRUEBA SQL> create user usr_prueba 2 identified by pwdprueba 3 default tablespace datos 4 temporary tablespace temp 5 profile lim_prueba; User created. SQL> select username, default_tablespace, temporary_tablespace, profile 2 from dba_users 3 where username = 'USR_PRUEBA'; USERNAME DEFAULT_TABLESPACE TEMPORARY_TABLESPACE PROFILE -------------------- ------------------------- ------------------------- -------------------- USR_PRUEBA DATOS TEMP LIM_PRUEBA
de esta forma, ya el usuario curso y el usuario usr_prueba, tienen asignado el perfil lim_prueba.
Para quitar la desasignación del perfil, se tendrá que asignar el perfil default al usuario. Por ejemplo:
SQL> alter user curso profile default; User altered. SQL> select username, default_tablespace, temporary_tablespace, profile 2 from dba_users 3 where username = 'CURSO'; USERNAME DEFAULT_TABLESPACE TEMPORARY_TABLESPACE PROFILE -------------------- ------------------------- ------------------------- -------------------- CURSO DATOS TEMP DEFAULT
Viendo el perfil en acción
Ahora vamos a probar un perfil como el que mostramos en este post a manera de ejemplo. Tendrá un tiempo de inactividad de 1 minuto y un límite de intentos fallidos de 3:
SQL> create profile lim_prueba limit 2 idle_time 1 3 failed_login_attempts 3; Profile created. SQL> select * 2 from dba_profiles 3 where profile = 'LIM_PRUEBA' 4 order by resource_name; PROFILE RESOURCE_NAME RESOURCE LIMIT -------------------- ------------------------- -------- --------------- LIM_PRUEBA COMPOSITE_LIMIT KERNEL DEFAULT LIM_PRUEBA CONNECT_TIME KERNEL DEFAULT LIM_PRUEBA CPU_PER_CALL KERNEL DEFAULT LIM_PRUEBA CPU_PER_SESSION KERNEL DEFAULT LIM_PRUEBA FAILED_LOGIN_ATTEMPTS PASSWORD 3 LIM_PRUEBA IDLE_TIME KERNEL 1 LIM_PRUEBA LOGICAL_READS_PER_CALL KERNEL DEFAULT LIM_PRUEBA LOGICAL_READS_PER_SESSION KERNEL DEFAULT LIM_PRUEBA PASSWORD_GRACE_TIME PASSWORD DEFAULT LIM_PRUEBA PASSWORD_LIFE_TIME PASSWORD DEFAULT LIM_PRUEBA PASSWORD_LOCK_TIME PASSWORD DEFAULT LIM_PRUEBA PASSWORD_REUSE_MAX PASSWORD DEFAULT LIM_PRUEBA PASSWORD_REUSE_TIME PASSWORD DEFAULT LIM_PRUEBA PASSWORD_VERIFY_FUNCTION PASSWORD DEFAULT LIM_PRUEBA PRIVATE_SGA KERNEL DEFAULT LIM_PRUEBA SESSIONS_PER_USER KERNEL DEFAULT SQL> create user usr_prueba 2 identified by pwdprueba 3 default tablespace datos 4 temporary tablespace temp 5 profile lim_prueba; User created. SQL> select username, default_tablespace, temporary_tablespace, profile 2 from dba_users 3 where username = 'USR_PRUEBA'; USERNAME DEFAULT_TABLESPACE TEMPORARY_TABLESPACE PROFILE -------------------- ------------------------- ------------------------- -------------------- USR_PRUEBA DATOS TEMP LIM_PRUEBA SQL> grant connect to usr_prueba; Grant succeeded. Intentamos iniciar sesión equivocandonos en el password 3 veces i la cuenta se bloquerá. ORA-28000: the account is locked