Sidebar

Este artículo nos muestra la forma de administrar los usuarios en Oracle. (Versión 10G)

Primero comencemos por saber que necesitamos para poder crear una cuenta de Oracle

Un nombre de usuario que no pase de 30 caracteres, que no tenga caracteres especiales y que inicie con una letra.
Un metodo de autentificacion, el más comun es un password pero Oracle 10G soporta otros métodos como biometric, certificado y autentificacion por medio de token.
Un tablespace de default, el cuál es donde el usuario va a poder crear sus objetos por default. Ojo, no porque tenga un tablespace de default va a significar que puede crear objetos, o una quota de espacio. Estos permisos se asignan de forma separada.
Un tablespace temporal, donde el usuario pueda crear sus objetos temporales y hacer ordenamientos.
Un porfile de usuario, que son las restricciones que puede tener su cuenta.

CREATE USER marco IDENTIFIED BY marcopwd
DEFAULT TABLESPACE usuarios; 

Si no se escibe el tablespace de defaul, el usuario tomaria el que esta definido en la base de datos. Ahora para cambiar el tablespace de default se puede ejecutar el siguiente comando.

ALTER DATABASE DEFAULT TABLESPACE users;

Si quisieramos cambiar el tablespace de default de un usuario se hace de la siguiente manera.

ALTER USER marco DEFAULT TABLESPACE users; 

Asi como el tablespace de default, también se les asigna a los usuario un tablespace temporal donde se alamacenan operaciones de ordenamiento como ORDER BY,GROUP BY,SELECT DISTINCT,MERGE JOIN, o CREATE INDEX.
Y también es utilizado cuando se crean tablas temporales.

CREATE USER marco IDENTIFIED BY marcopwd 
DEFAULT TABLESPACE usuarios
TEMPORARY TABLESPACE temp;

Para modificar un usuario y asignar un tablespace temporal

ALTER USER marco TEMPORARY TABLESPACE temp; 


Para cambiar el tablespace temporal

ALTER DATABASE DEFAULT TEMPORARY TABLESPACE temp; 

Adicionalmente al tablespace de default y el temporal, cada usuario es asignado a un profile, que tiene dos propositos principalmente, limita el uso de recursos y refuerza la reglas de seguridad.

CREATE USER marco IDENTIFIED BY marcopwd 
DEFAULT TABLESPACE usuarios
TEMPORARY TABLESPACE temp
PROFILE resource_profile;

ALTER USER marco
PROFILE resource_profile;


Eliminando un usuario de la Base de Datos

Para eliminar un usuario de la base de datos se hace uso de la clausula DROP USER y opcionalmente se puede utilizar CASCADE, para decirle que también elimine todos los objetos del usuario.

DROP USER marco CASCADE; 


Privilegios

Existen en Oracle dos tipos de privilegios de usuario:

System: Que permiten al usuario hacer ciertas tareas sobre la base de datos, como por ejemplo crear un tablespace. Estos permisos son otorgados por el administrador o por alguien que haya recibido el permiso para administrar ese tipo de privilegio. Existen como 100 tipos distintos de privilegios de este tipo.

En general los permisos de sistema, permiten ejecutar comandos del tipo DDL (Data definition Language), como CREATE, ALTER y DROP o del tipo DML (Data Manipulation Language). Oracle 10G tiene m{as de 170 privilegios de sistema los cuales pueden ser vistos mediante la vista SYSTEM_PRIVILEGE_MAP

Entre todos los privilegios de sistema que existen, hay dos que son los más fuertes: SYSDBA y SYSOPER. Estos practicamente son dados a los administradores de base de datos.

Para otorgar estos permisos se hace de la siguiente manera

GRANT create user, alter user, drop user TO marco_dba; 


Object: Este tipo de permiso le permite al usuario hacer cierta accion en un objeto de la base de datos, como puede ser una tabla, vista, funcion etc. Si a un usuario no se le dan estos permisos solo podrias acceder a sus propios objetos. Y este tipos de permisos los da el dueño del objeto, el administrador o alguien que haya recibido este permiso explicitamente.

Para otorgar estos permisos de hace de la siguiente manera

GRANT SELECT,INSERT,UPDATE,DELETE ON marco TO tbl_ventas; 


Si quisieramos que tambien el usuario marco pudiera dar permisos sobre la tabla venta anexariamos WITH GRANT OPTION

GRANT SELECT,INSERT,UPDATE,DELETE ON marco TO tbl_ventas WITH GRANT OPTION; 


Asignando cuotas a usuarios

Por default ningun usuario tiene una cuota en los tablespaces y se tienen tres opciones para poder proveer a un usuario de una quota:
Sin limite, que permite al usuario usar todo el espacio disponible de un tablespace.
Por medio de un valor, que puede ser en kilobytes o megabytes que el usuario puede usar. Este valor puede ser mas grande que el table space o m{as chico
Por medio del privilegio UNLIMITED TABLESPACE, el cuál va a pesar más que cualquier cuota dada en un tablespace por lo que tienen disponibilidad de todo el espacio incluyendo en SYSTEM y SYSAUX.

Como recomendación, no se deben de dar cuotas a los usuarios en los tablespaces de SYSTEM y SYSAUX, pues tipicamente solo los usuarios de SYS y SYSTEM pueden crear objetos en estos. También no dar cuotas en su tablespace temporal o del tipo undo.

Roles
Por último solo nos resta hablar de los Roles, estos son simplemente un conjunto de privilegios que se pueden otorgar a un usuario o a otro rol. Por default cuando creamos un usuario pero desde el Enterprise Manager se le asigna el rol de connect, lo que permite al usuario conectarse a la base de datos y crear sus propios objetos en su propio esquema.

Para crear un rol y asignarlo a un usuario se hace de la siguiente manera

CREATE ROLE appl_dba; 

SET ROLE appl_dba IDENTIFIED BY app_pwd;

Para asignar el role a un usuario:

GRANT appl_dba TO marco

Existen algunos roles predefinidos.

CONNECT
CREATE SESSION, CREATE TABLE, CREATE
VIEW, CREATE SYNONYM, CREATE SEQUENCE,
CREATE DATABASE LINK, CREATE CLUSTER,
ALTER SESSION
RESOURCE
CREATE TABLE, CREATE PROCEDURE,
CREATE SEQUENCE, CREATE TRIGGER,
CREATE TYPE, CREATE CLUSTER, CREATE
INDEXTYPE, CREATE OPERATOR
SCHEDULER_
ADMIN
CREATE ANY JOB, CREATE JOB, EXECUTE
ANY CLASS, EXECUTE ANY PROGRAM,
MANAGE SCHEDULER
DBA
Tiene la mayoría de los privilegios, no asignar a los que no son administradores.
SELECT_CATALOG_ROLE
No tiene privilegios de sistema, pero tiene cerca de 1600 privilegios de objeto.

Modificación de Usuarios

ALTER USER NOMBRE_USUARIO 
   IDENTIFIED BY CLAVE _ACCESO
   [DEFAULT TABLESPACE ESPACIO_TABLA]
   [TEMPORARY TABLESPACE ESPACIO_TABLA]
   [QUOTA {ENTERO {K | M } | UNLIMITED } ON ESPACIO_TABLA
   [PROFILE PERFIL];

Con esto ya tienes la mayoria de conocimientos para administrar usuarios en Oracle.


Tips BD