En el vasto mundo de las bases de datos, la gestión de usuarios es un pilar fundamental para garantizar la seguridad, la organización y el control de acceso a la información. Oracle Database, siendo uno de los sistemas gestores de bases de datos más robustos y utilizados a nivel empresarial, ofrece un sistema sofisticado para la creación y administración de usuarios. Cada usuario en Oracle es una entidad distinta, con su propia identidad y, lo que es crucial, la propiedad de los objetos de base de datos que cree (como tablas, vistas, secuencias, etc.). Entender cómo crear correctamente un usuario es el primer paso para una gestión de base de datos eficiente y segura.

Para crear un usuario en Oracle, es indispensable contar con los privilegios adecuados. Típicamente, esta tarea la realiza un administrador de base de datos, conectándose con una cuenta que posea el privilegio del sistema CREATE USER. Las cuentas administrativas por defecto como SYSTEM o SYS suelen tener este privilegio.

Sintaxis Básica para la Creación de Usuarios
La sentencia fundamental para crear un usuario en Oracle es CREATE USER. Su sintaxis básica, que incluye los elementos más comunes y necesarios, es la siguiente:
CREATE USER nombre_usuario IDENTIFIED BY contraseña DEFAULT TABLESPACE tablespace_por_defecto QUOTA cantidad ON tablespace_cuota [TEMPORARY TABLESPACE tablespace_temporal] [PROFILE nombre_perfil] [PASSWORD EXPIRE] [ACCOUNT { LOCK | UNLOCK }];Analicemos las cláusulas más importantes de esta sintaxis:
nombre_usuario: Es el nombre único que identificará al usuario dentro de la base de datos.IDENTIFIED BY contraseña: Esta cláusula es esencial y se utiliza para especificar la contraseña con la que el usuario se autenticará al intentar conectarse a la base de datos. Las contraseñas en Oracle son sensibles a mayúsculas y minúsculas por defecto.DEFAULT TABLESPACE tablespace_por_defecto: Define el tablespace (espacio de tablas) donde se almacenarán por defecto los objetos (como tablas, índices, etc.) que cree este usuario, a menos que se especifique un tablespace diferente explícitamente al crear el objeto. Si esta cláusula se omite, el tablespace por defecto del usuario será el tablespaceSYSTEM, lo cual generalmente no es una práctica recomendada para usuarios normales.QUOTA cantidad ON tablespace_cuota: Permite limitar la cantidad de espacio que el usuario puede consumir en un tablespace específico. Lacantidadpuede ser un número seguido deK(Kilobytes),M(Megabytes),G(Gigabytes),T(Terabytes). También se puede especificarUNLIMITEDpara permitir al usuario usar todo el espacio disponible en el tablespace. Es crucial asignar cuotas de espacio, ya que un usuario sin cuota asignada en un tablespace no podrá crear objetos dentro de él, incluso si tiene permisos para crear objetos como tablas. Puedes especificar múltiples cláusulasQUOTApara diferentes tablespaces.TEMPORARY TABLESPACE tablespace_temporal: Especifica el tablespace que se utilizará para almacenar los segmentos temporales del usuario durante operaciones que requieren espacio de trabajo, como ordenaciones grandes o joins complejos. Si se omite, se utilizará el tablespace temporal por defecto de la base de datos, oSYSTEMsi no hay uno configurado.PROFILE nombre_perfil: Asigna un perfil de recursos al usuario. Un perfil define límites sobre el uso de recursos del sistema (como tiempo de CPU por sesión, número de sesiones concurrentes, etc.) y políticas de contraseña (complejidad, expiración, reuso). Si se omite, se asigna el perfilDEFAULT.PASSWORD EXPIRE: Fuerza a que la contraseña del usuario expire inmediatamente después de su creación. Esto obliga al usuario a cambiar su contraseña en el primer intento de conexión, lo cual es una buena práctica de seguridad.ACCOUNT { LOCK | UNLOCK }: Permite especificar si la cuenta del usuario debe estar bloqueada (LOCK) o desbloqueada (UNLOCK) al momento de la creación. Por defecto, las cuentas se crean comoUNLOCK.
Ejemplos Prácticos
Veamos algunos ejemplos concretos de cómo crear usuarios utilizando la sentencia CREATE USER.
Ejemplo 1: Creación básica de un usuario
Este es el ejemplo más sencillo, pero omite cláusulas importantes como el tablespace por defecto y las cuotas. El usuario 'ana' se creará con la contraseña 'anita', su tablespace por defecto será SYSTEM y no tendrá cuota en ningún tablespace.
CREATE USER ana IDENTIFIED BY anita;Ejemplo 2: Creación de un usuario con tablespace por defecto y cuota
En este ejemplo, creamos al usuario 'juan' con la contraseña 'juancito'. Asignamos users como su tablespace por defecto y le otorgamos una cuota de 100 Megabytes en el tablespace users.
CREATE USER juan IDENTIFIED BY juancito DEFAULT TABLESPACE users QUOTA 100M ON users;Este es un enfoque mucho mejor, ya que evita que los objetos del usuario se almacenen en SYSTEM y limita el espacio que puede consumir.
Ejemplo 3: Usuario con cuota ilimitada en un tablespace
Si deseas que un usuario pueda crear objetos sin una restricción de espacio en un tablespace particular (siempre dentro de los límites del tablespace mismo), puedes usar UNLIMITED.

CREATE USER maria IDENTIFIED BY maria123 DEFAULT TABLESPACE data_ts QUOTA UNLIMITED ON data_ts TEMPORARY TABLESPACE temp_ts;Aquí, 'maria' tiene su tablespace por defecto en data_ts con espacio ilimitado y usa temp_ts para sus operaciones temporales.
Ejemplo 4: Forzar cambio de contraseña y cuenta bloqueada inicialmente
Para mejorar la seguridad, puedes forzar al usuario a cambiar su contraseña al primer login y mantener la cuenta bloqueada hasta que un administrador la desbloquee explícitamente.
CREATE USER pedro IDENTIFIED BY temporal_pass DEFAULT TABLESPACE app_data QUOTA 500M ON app_data PASSWORD EXPIRE ACCOUNT LOCK;Después de crear a 'pedro', un administrador necesitará ejecutar ALTER USER pedro ACCOUNT UNLOCK; para que pueda intentar conectarse y cambiar su contraseña temporal.
Entendiendo la Importancia de las Cláusulas
Cada cláusula en la sentencia CREATE USER tiene un propósito específico y su correcta configuración es vital para la seguridad y el rendimiento de la base de datos.
La cláusula IDENTIFIED BY es la forma más común de autenticación local. Oracle soporta otros métodos como IDENTIFIED EXTERNALLY (autenticación por el sistema operativo o un servicio externo) o IDENTIFIED GLOBALLY (autenticación a través de un directorio empresarial como Oracle Internet Directory o Azure AD). Existe también la opción NO AUTHENTICATION para crear un esquema que no puede ser utilizado para iniciar sesión, útil para cuentas que solo poseen objetos.

El tablespace por defecto y las cuotas son fundamentales para la administración del espacio en disco. Si un usuario necesita crear una tabla, Oracle intentará crearla en su tablespace por defecto. Si el usuario no tiene una cuota asignada en ese tablespace (o la cuota es 0), la creación de la tabla fallará con un error como "ORA-01950: no hay privilegios en el tablespace '...". Gestionar las cuotas previene que un único usuario consuma todo el espacio disponible en un tablespace, afectando a otros usuarios o al funcionamiento de la base de datos.
El tablespace temporal es crucial para el rendimiento. Si no se asigna uno específicamente, las operaciones temporales pueden terminar usando el tablespace SYSTEM, lo cual es perjudicial. Asignar un tablespace temporal dedicado (que debe ser de tipo TEMPORARY) mejora la eficiencia de estas operaciones.
El perfil asignado controla el consumo de recursos y las políticas de contraseña. Usar perfiles personalizados en lugar del perfil DEFAULT permite aplicar políticas de seguridad y límites de recursos más estrictos y adaptados a las necesidades de diferentes tipos de usuarios.
Verificando la Creación del Usuario
Una vez ejecutada la sentencia CREATE USER, Oracle confirmará su éxito. Para verificar que el usuario ha sido creado y consultar su información, puedes usar la vista del diccionario de datos dba_users (si tienes los permisos adecuados, generalmente como administrador).
SELECT username, account_status, default_tablespace, temporary_tablespace, created FROM dba_users WHERE username = 'ANA' OR username = 'JUAN' OR username = 'MARIA' OR username = 'PEDRO';Esta consulta te mostrará el nombre del usuario, su estado (OPEN, LOCKED, EXPIRED), su tablespace por defecto, su tablespace temporal y la fecha de creación.

El Siguiente Paso: Otorgando Permisos
Es vital entender que crear un usuario por sí solo no le otorga la capacidad de conectarse a la base de datos ni de realizar ninguna operación útil (como crear tablas, insertar datos, etc.). Para que un usuario pueda iniciar una sesión, necesita el privilegio del sistema CREATE SESSION. Para que pueda realizar otras acciones, necesitará otros privilegios del sistema (ej. CREATE TABLE, CREATE SEQUENCE) o privilegios sobre objetos específicos (ej. SELECT ON nombre_tabla, INSERT ON otra_tabla).
Los privilegios se otorgan utilizando la sentencia GRANT. Por ejemplo, para permitir que 'ana' se conecte:
GRANT CREATE SESSION TO ana;Para permitirle crear tablas:
GRANT CREATE TABLE TO ana;La gestión de permisos es un tema extenso por sí mismo, pero es el paso lógico y necesario después de crear un usuario para que este sea funcional.
Consideraciones Adicionales
Al crear usuarios, ten en cuenta las reglas de nombramiento de Oracle. Los nombres de usuario no pueden contener ciertos caracteres especiales y, en entornos Multitenant Container Database (CDB), los nombres de usuarios comunes (aquellos que existen en la base de datos raíz y en todos los PDBs) deben comenzar con un prefijo específico, por defecto C##.
Si intentas crear un usuario con un nombre que ya existe, Oracle generará un error indicando que el nombre ya está en uso. Debes utilizar un nombre único.
Aquí tienes una tabla comparativa simplificada de la creación básica vs. una creación más completa:
| Característica | Creación Básica (Ej. CREATE USER ana IDENTIFIED BY anita;) | Creación Completa (Ej. CREATE USER juan ... QUOTA ...) |
|---|---|---|
| Tablespace por defecto | SYSTEM (no recomendado) | Específico (ej. users, data_ts) |
| Cuota de espacio | 0 (no puede crear objetos) | Definida (ej. 100M, UNLIMITED) |
| Tablespace temporal | Temporal por defecto de DB o SYSTEM | Específico (ej. temp_ts) |
| Perfil de recursos/contraseña | DEFAULT | DEFAULT o perfil personalizado |
| Seguridad inicial | Contraseña no expira, cuenta desbloqueada | Puede forzar expiración de contraseña, bloquear cuenta |
| Funcionalidad inicial | No puede crear objetos | Puede crear objetos (si hay cuota) |
Preguntas Frecuentes sobre Creación de Usuarios en Oracle
- ¿Necesito ser administrador para crear un usuario?
- Sí, o al menos tener el privilegio del sistema
CREATE USERotorgado por un administrador. - ¿Por qué mi usuario recién creado no puede conectarse?
- Después de crear un usuario, debes otorgarle explícitamente el privilegio del sistema
CREATE SESSIONusando la sentenciaGRANT. - ¿Qué significa la cláusula
QUOTA? - Define la cantidad máxima de espacio que el usuario puede consumir en un tablespace específico. Sin una cuota (o con cuota 0) en un tablespace, el usuario no puede crear objetos allí.
- ¿Es la contraseña sensible a mayúsculas y minúsculas en Oracle?
- Sí, por defecto, las contraseñas son sensibles a mayúsculas y minúsculas.
- ¿Puedo crear un usuario sin contraseña?
- Sí, utilizando métodos de autenticación como
IDENTIFIED EXTERNALLY,IDENTIFIED GLOBALLYo la cláusulaNO AUTHENTICATION. La cláusulaIDENTIFIED BYsiempre requiere una contraseña. - ¿Qué pasa si omito la cláusula
DEFAULT TABLESPACE? - El tablespace por defecto del usuario se establecerá en
SYSTEM, lo cual no es recomendable para usuarios normales. Es mejor especificar un tablespace de usuario dedicado.
En conclusión, la creación de usuarios en Oracle es un proceso directo utilizando la sentencia CREATE USER. Sin embargo, es crucial ir más allá de la sintaxis básica y configurar adecuadamente el tablespace por defecto, las cuotas de espacio y, opcionalmente, el tablespace temporal, el perfil y el estado inicial de la cuenta y la contraseña. Recordar que la creación es solo el primer paso y que el usuario necesitará privilegios, especialmente el privilegio CREATE SESSION, para ser funcional. Una correcta gestión de usuarios y permisos es la base de una base de datos Oracle segura y bien organizada.
Si quieres conocer otros artículos parecidos a Crear Usuarios en Oracle: Guía Completa puedes visitar la categoría Bases de datos.

Aprende mas sobre MySQL