En el vasto mundo de la administración de bases de datos Oracle, la gestión eficiente de los usuarios es fundamental. Una herramienta poderosa para lograrlo son los perfiles. Los perfiles permiten definir límites de recursos y políticas de seguridad de contraseñas para grupos de usuarios, simplificando enormemente la administración y garantizando un comportamiento predecible y seguro. Sin embargo, a menudo surge la necesidad de ajustar estos perfiles después de su creación, ya sea para modificar un límite existente, añadir una nueva restricción o, como es muy común en entornos de desarrollo, relajar ciertas políticas como la caducidad de contraseñas. Aquí es donde entra en juego la sentencia ALTER PROFILE.

La sentencia ALTER PROFILE es tu aliada para modificar perfiles existentes en Oracle. A través de ella, puedes ajustar los parámetros que un perfil define, afectando así a todos los usuarios que tienen asignado dicho perfil. Es importante notar que los cambios realizados en un perfil solo tienen efecto en las sesiones futuras de los usuarios; las sesiones actualmente activas no se ven afectadas por las modificaciones del perfil hasta que el usuario se desconecte y vuelva a iniciar sesión.

¿Qué son los Perfiles de Usuario en Oracle?
Un perfil de usuario en Oracle es un conjunto con nombre de límites de recursos y parámetros de gestión de contraseñas. Cuando creas un usuario, le asignas un perfil. Si no asignas explícitamente un perfil, el usuario hereda automáticamente el perfil DEFAULT. Estos perfiles controlan aspectos como:
- Límites de recursos (tiempo de CPU por sesión, tiempo de conexión, cantidad de lecturas lógicas, etc.).
- Parámetros de gestión de contraseñas (tiempo de vida de la contraseña, número de intentos fallidos de inicio de sesión antes de bloquear la cuenta, tiempo de bloqueo de la cuenta, requisitos de complejidad de la contraseña, historial de reutilización de contraseñas).
La capacidad de agrupar estas configuraciones en perfiles simplifica la administración, permitiendo aplicar políticas uniformes a diferentes categorías de usuarios (por ejemplo, desarrolladores, administradores, usuarios de aplicación).
¿Por Qué Necesitarías Alterar un Perfil?
Existen diversas razones para modificar un perfil existente:
- Ajuste de Límites: Puede que los límites de recursos definidos inicialmente resulten ser demasiado restrictivos o, por el contrario, demasiado laxos para el uso real de los usuarios asignados a ese perfil.
- Modificación de Políticas de Contraseña: Las políticas de seguridad pueden cambiar, requiriendo ajustes en la complejidad, caducidad o reutilización de contraseñas.
- Entornos de Desarrollo/Pruebas: Un caso muy común, mencionado en la información proporcionada, es la necesidad de deshabilitar la caducidad de contraseñas en entornos de desarrollo o pruebas para evitar la frustración de los desarrolladores que no acceden a la base de datos con la misma frecuencia que en producción. Recibir constantemente el error
ORA-28002: the password will expire within 7 dayso tener cuentas bloqueadas por inactividad puede ser muy molesto. - Optimización del Rendimiento: Ajustar límites de recursos puede ayudar a prevenir que una sola sesión consuma demasiados recursos y afecte el rendimiento general de la base de datos.
Uso de la Sentencia ALTER PROFILE
La sintaxis básica de la sentencia ALTER PROFILE es directa y permite modificar los mismos parámetros que se pueden definir al crear un perfil con CREATE PROFILE.
Prerrequisitos
Para poder ejecutar la sentencia ALTER PROFILE, necesitas tener el privilegio de sistema ALTER PROFILE.
Si estás trabajando en una base de datos contenedor (CDB) y quieres modificar un perfil en el contenedor actual (PDB), debes estar conectado a esa PDB y, si especificas la cláusula CONTAINER, usar CONTAINER = CURRENT. Si quieres modificar un perfil común (disponible en el root y en todas las PDBs) o un perfil en el contenedor root, debes estar conectado al root y, si especificas la cláusula CONTAINER, usar CONTAINER = ALL (desde el root) o no especificar la cláusula (para perfiles comunes en el root) o usar CONTAINER = CURRENT (para perfiles locales en el root, aunque es menos común). La información proporcionada menciona CONTAINER = ALL (desde el root) y CONTAINER = CURRENT (desde una PDB).
Semántica
Los parámetros y cláusulas utilizados con ALTER PROFILE tienen el mismo significado que en la sentencia CREATE PROFILE. Puedes modificar cualquier límite o parámetro de gestión de contraseñas definido en el perfil. Para cambiar un límite, simplemente especificas el nombre del parámetro seguido de su nuevo valor (un número, UNLIMITED o NULL, dependiendo del parámetro).
Es importante recordar una restricción clave: no puedes eliminar un límite del perfil DEFAULT. Sin embargo, sí puedes modificar sus valores a UNLIMITED (ilimitado) o NULL (sin función de verificación de contraseña).
Alterando el Perfil DEFAULT
El perfil DEFAULT es particularmente relevante porque es el que se asigna automáticamente a los nuevos usuarios si no se especifica otro perfil. Modificar el perfil DEFAULT afecta a todos los usuarios que lo utilizan, lo cual, como se muestra en el ejemplo proporcionado, a menudo incluye a la mayoría de los usuarios del sistema, especialmente en instalaciones nuevas o de desarrollo.
Uno de los ajustes más comunes y, como se menciona en la fuente, una causa frecuente de problemas en entornos de desarrollo, es la caducidad de contraseñas. El perfil DEFAULT en muchas versiones de Oracle viene configurado para que las contraseñas expiren después de un cierto período (por ejemplo, 180 días) y requiera que no se reutilicen las últimas N contraseñas.
Identificando la Configuración Actual del Perfil DEFAULT
Antes de modificar, es útil saber la configuración actual del perfil. Puedes consultar la vista DBA_PROFILES para ver los límites definidos para cada perfil en la base de datos. Aunque la sentencia exacta para consultarla no se proporciona en la fuente, una consulta típica sería:
SELECT *
FROM DBA_PROFILES
WHERE PROFILE = 'DEFAULT'
ORDER BY RESOURCE_NAME;La fuente proporcionada muestra un ejemplo de salida que incluye columnas como PLT (Password Life Time), FLA (Failed Login Attempts), RUM (Password Reuse Max), PGT (Password Grace Time), PWD_LOK (Password Lock Time) y si hay una función de verificación de contraseña (PWD_VERIFY).
Basándonos en la salida de ejemplo, los parámetros clave de gestión de contraseñas y sus significados son:
PASSWORD_LIFE_TIME(PLT): Número de días que una contraseña es válida.FAILED_LOGIN_ATTEMPTS(FLA): Número de intentos fallidos antes de que la cuenta se bloquee.PASSWORD_REUSE_TIME(RUT) /PASSWORD_REUSE_MAX(RUM): Controla si se pueden reutilizar contraseñas antiguas, ya sea después de un tiempo (TIME) o después de un número de cambios (MAX).PASSWORD_GRACE_TIME(PGT): Número de días adicionales después de la caducidad de la contraseña durante los cuales el usuario aún puede iniciar sesión y cambiarla.PASSWORD_LOCK_TIME(PWD_LOK): Número de días que una cuenta permanece bloqueada después de exceder los intentos fallidos.PASSWORD_VERIFY_FUNCTION(PWD_VERIFY): Especifica una función de validación que la contraseña debe cumplir (por ejemplo, longitud mínima, mezcla de caracteres).
Deshabilitando la Caducidad y Reutilización de Contraseñas en DEFAULT
Para deshabilitar la caducidad de contraseñas y la restricción de reutilización (común en entornos de desarrollo), puedes usar las siguientes sentencias ALTER PROFILE, tal como se muestra en la información fuente:
ALTER PROFILE DEFAULT LIMIT
PASSWORD_LIFE_TIME UNLIMITED;ALTER PROFILE DEFAULT LIMIT
PASSWORD_REUSE_TIME UNLIMITED;ALTER PROFILE DEFAULT LIMIT
PASSWORD_REUSE_MAX UNLIMITED;También puedes deshabilitar la función de verificación de contraseña si no deseas que se apliquen reglas de complejidad:
ALTER PROFILE DEFAULT LIMIT
PASSWORD_VERIFY_FUNCTION NULL;Además, basándonos en los campos mostrados en la salida de la consulta de perfiles, es posible que quieras modificar el comportamiento del bloqueo por intentos fallidos:
ALTER PROFILE DEFAULT LIMIT
FAILED_LOGIN_ATTEMPTS UNLIMITED;ALTER PROFILE DEFAULT LIMIT
PASSWORD_LOCK_TIME UNLIMITED;Puedes combinar varias modificaciones en una sola sentencia ALTER PROFILE:
ALTER PROFILE DEFAULT LIMIT
PASSWORD_LIFE_TIME UNLIMITED
PASSWORD_REUSE_TIME UNLIMITED
PASSWORD_REUSE_MAX UNLIMITED
PASSWORD_VERIFY_FUNCTION NULL
FAILED_LOGIN_ATTEMPTS UNLIMITED
PASSWORD_LOCK_TIME UNLIMITED;Después de ejecutar estas sentencias, el perfil DEFAULT habrá sido alterado y los usuarios que lo utilicen no tendrán sus contraseñas caducadas ni restricciones de reutilización (o bloqueo por intentos fallidos si también se modificaron esos parámetros) en sus próximas sesiones.

Precaución en Sistemas de Producción
La información fuente enfatiza la precaución al deshabilitar políticas de seguridad como la vida útil de la contraseña, la reutilización o los requisitos de complejidad en sistemas de producción. Los atacantes se dirigen cada vez más a las bases de datos para el robo de datos. Deshabilitar estas características de seguridad aumenta significativamente el riesgo. Es altamente recomendable mantener políticas de contraseñas robustas en entornos de producción.
Creando y Asignando un Perfil Personalizado
En lugar de modificar el perfil DEFAULT globalmente, una práctica más segura, especialmente en entornos donde conviven diferentes tipos de usuarios con distintas necesidades, es crear un nuevo perfil con la configuración deseada y asignárselo solo a los usuarios específicos que lo necesiten. Esto permite mantener el perfil DEFAULT con políticas de seguridad más estrictas para la mayoría de los usuarios, mientras que un grupo selecto (por ejemplo, cuentas de servicio o usuarios de desarrollo específicos) puede tener un perfil con políticas más relajadas.
Para crear un nuevo perfil, se utiliza la sentencia CREATE PROFILE. La información fuente proporciona un ejemplo para bases de datos multi-tenant (12c y posteriores), donde los perfiles locales en una PDB deben seguir una convención de nombres específica (prefijo c##) a menos que la PDB esté configurada de otra manera.
CREATE PROFILE c##mi_perfil_dev LIMIT
PASSWORD_LIFE_TIME UNLIMITED
PASSWORD_GRACE_TIME UNLIMITED
PASSWORD_REUSE_TIME UNLIMITED
PASSWORD_REUSE_MAX UNLIMITED
FAILED_LOGIN_ATTEMPTS UNLIMITED
PASSWORD_VERIFY_FUNCTION NULL
PASSWORD_LOCK_TIME UNLIMITED;Una vez creado el perfil, puedes asignarlo a uno o varios usuarios utilizando la sentencia ALTER USER:
ALTER USER nombre_usuario PROFILE c##mi_perfil_dev;Esta es una mejor práctica que modificar el perfil DEFAULT, ya que aísla las configuraciones especiales a un grupo específico de usuarios.
Parámetros Comunes de Perfil y sus Valores
Aquí tienes una tabla que resume algunos de los parámetros de perfil más comunes relacionados con la gestión de contraseñas, junto con sus posibles valores al usar ALTER PROFILE LIMIT:
| Parámetro | Descripción | Valores Posibles | Notas |
|---|---|---|---|
PASSWORD_LIFE_TIME | Días antes de que la contraseña expire. | Número de días, UNLIMITED | UNLIMITED deshabilita la caducidad. |
PASSWORD_GRACE_TIME | Días adicionales después de expirar para cambiarla. | Número de días, UNLIMITED | Permite iniciar sesión temporalmente con contraseña expirada. |
PASSWORD_REUSE_TIME | Días antes de poder reutilizar una contraseña antigua. | Número de días, UNLIMITED | UNLIMITED deshabilita la restricción basada en tiempo. |
PASSWORD_REUSE_MAX | Número de cambios antes de poder reutilizar una contraseña antigua. | Número de cambios, UNLIMITED | UNLIMITED deshabilita la restricción basada en historial. |
FAILED_LOGIN_ATTEMPTS | Intentos fallidos antes de bloquear la cuenta. | Número de intentos, UNLIMITED | UNLIMITED deshabilita el bloqueo por intentos fallidos. |
PASSWORD_LOCK_TIME | Días que la cuenta permanece bloqueada. | Número de días, UNLIMITED | UNLIMITED significa bloqueo permanente hasta que un DBA la desbloquee. |
PASSWORD_VERIFY_FUNCTION | Función para validar la complejidad de la contraseña. | Nombre de función, NULL | NULL deshabilita la verificación de complejidad. |
Preguntas Frecuentes
¿Los cambios en un perfil afectan a los usuarios inmediatamente?
No, los cambios realizados con ALTER PROFILE solo afectan a las sesiones futuras. Los usuarios actualmente conectados seguirán operando bajo la configuración del perfil que estaba vigente cuando iniciaron sesión.
¿Puedo eliminar un límite del perfil DEFAULT?
No, no puedes eliminar un límite del perfil DEFAULT. Sin embargo, puedes modificar su valor a UNLIMITED o NULL (para la función de verificación de contraseña) para relajar o deshabilitar la restricción.
¿Es seguro deshabilitar la caducidad de contraseñas en producción?
Generalmente, no es seguro deshabilitar la caducidad de contraseñas ni otras políticas de seguridad en sistemas de producción. Esto aumenta el riesgo de que contraseñas comprometidas sigan siendo válidas indefinidamente. Es una práctica más común en entornos de desarrollo o pruebas.
¿Cuál es la diferencia entre PASSWORD_REUSE_TIME y PASSWORD_REUSE_MAX?
PASSWORD_REUSE_TIME prohíbe reutilizar una contraseña si no ha pasado un cierto período de tiempo. PASSWORD_REUSE_MAX prohíbe reutilizar una contraseña si no se han realizado un cierto número de cambios de contraseña intermedios. Puedes usar uno, el otro, o ambos simultáneamente.
¿Qué es el prefijo c## en nombres de perfil?
En bases de datos Oracle 12c y posteriores configuradas como Multitenant Container Databases (CDB), los nombres de objetos comunes (que existen en el root y pueden ser referenciados en PDBs) deben comenzar con c##. Esto incluye perfiles que creas en el root y quieres que estén disponibles en las PDBs. Si creas un perfil local dentro de una PDB, normalmente no necesita el prefijo c## a menos que la PDB esté configurada para requerirlo.
Conclusión
La sentencia ALTER PROFILE es una herramienta esencial para la administración de usuarios en Oracle, permitiendo ajustar dinámicamente los límites de recursos y las políticas de seguridad definidas en los perfiles. Ya sea que necesites relajar temporalmente las políticas de contraseña en un entorno de desarrollo modificando el perfil DEFAULT o ajustar los límites para optimizar el rendimiento, comprender cómo usar ALTER PROFILE te brinda un control granular sobre el comportamiento de tus usuarios. Recuerda siempre evaluar cuidadosamente el impacto de tus cambios, especialmente en entornos de producción, donde la seguridad de las contraseñas es primordial. La flexibilidad que ofrecen los perfiles y la capacidad de alterarlos te permiten adaptar la configuración de la base de datos a las necesidades cambiantes de tu organización.
Si quieres conocer otros artículos parecidos a Alterando Perfiles SQL en Oracle puedes visitar la categoría Bases de datos.

Aprende mas sobre MySQL