Administración de usuarios en Oracle

E-mail Imprimir PDF

1. Creación de usuarios

Una de las más básicas tareas de un administrador de base de datos es identificar los usuarios. Cada usuario que conecta en la base de datos debe de tener una cuenta. En las cuentas compartidas son difíciles de aplicar una auditoria.

Para crear un usuario utilizamos la sentencia CREATE USER. Cuando creas una cuenta como mínimo tienes que asignar un único nombre (username) y una contraseña para poder autenticarse.

Para cambiar alguno de los atributos que se le ha añadido al usuario creado se utiliza la sentencia ALTER USER.

 

2. Autenticación Oracle

Cuando uno se conecta con una instancia de una base de datos la cuenta de usuario debe de estar autenticada. ORACLE provee tres métodos de autenticación para nuestra cuenta de usuario.

AUTENTICACIÓN MEDIANTE PASSWORD:

Cuando un usuario conecta con una base de datos verifica que este usuario y la contraseña introducida almacenada en la base de datos, sea correcta. Las contraseñas se guardan encriptadas en la base de datos (en el data dictionary).

SQL > CREATE USER david IDENTIFIED BY tititus;

En este caso tititus es la contraseña de david que será guardada encriptada en la base de datos.


AUTENTICACIÓN EXTERNA:

Cuando un usuario conecta con la base de datos se verifica que el nombre de usuario es el mismo que el nombre de usuario del sistema operativo para permitir la validación.

No se almacenan las cuentas en la base de datos de ninguna forma. Estas cuentas están siempre referidas con OPS$ .A partir de la versión 10g puedes configurar OS_AUTHENT_PREFIX en el spfile

SQL > CREATE USER ops$david IDENTIFIED BY tititus;

Mediante IDENTIFIED EXTERNALLY decimos a la base de datos que nuestra cuenta es externa y tiene que ser validada con el sistema operativo.

 

AUTENTICACIÓN GLOBAL:

Cuando un usuario se conecta con la base de datos se verifica globalmente cuando la información pasa por una opción avanzada de seguridad ( ADVANCED SECURITY OPTION ) para la autenticación tal como Kerberos, RADIUS ....

Para las cuentas globales no se almacena tampoco nada en la base de datos.

SQL > CREATE USER david IDENTIFIED GLOBALLY AS ‘CN=alumnos,OU=campus .......’

Mediante IDENTIFIED GLOBALLY decimos a la base de datos que nuestra cuenta se autentica globalmente, mediante otra opción de seguridad avanzada.

 

3. Asignaciones a los usuarios

ASIGNACIÓN DE UN USUARIO A UN TABLESPACE ( DEFAULT TABLESPACE )

Mediante esta sentencia asignamos un usuario a un tablespace, este será su tablespace por defecto cuando creamos un usuario.

SQL > CREATE USER david IDENTIFIED BY tititus DEFAULT TABLESPACE users;


Mediante esta sentencia, en caso de tener creado ya el usuario le asignamos un tablespace.

SQL > ALTER USER david DEFAULT TABLESPACE users;


La base de datos toma un tablespace por defecto, en caso de querer cambiar este tablespace utilizamos la siguiente sentencia

SQL > ALTER DATABASE DEFAULT TABLESPACE users;

 

ASIGNACIÓN DE UN USUARIO A UN TABLESPACE TEMPORAL

Un tablespace temporal se utiliza para almacenar “segmentos” temporales que son creados durante operaciones como ORDER BY,SELECT DISTINCT, MERGE JOIN o CREATE INDEX. A veces a los usuarios se les asocia un tablespace temporal para realizar este tipo de operaciones, cuando estas operaciones finalizan este segmento temporal que se ha creado exclusivamente para la operación desaparece.

SQL > CREATE USER david IDENTIFIED BY tititus DEFAULT TABLESPACE users TEMPORARY TABLESPACE temp;


Mediante TEMPORARY TABLESPACE asignamos como tablespace temporal temp al usuario david. En caso de que el usuario esté creado si queremos asignarle un tablespace temporal utilizamos ALTER USER

SQL > ALTER USER david TEMPORARY TABLESPACE Temp;

 

ASIGNACIÓN DE UN PERFIL A UN USUARIO

Al igual que podemos asignar un tablespace a un usuario, también podemos asignarle un perfil (profile). El principal perfil ( profile ) por defecto se denomina default.

Si el usuario no está lo podemos crear de la siguiente forma:

SQL > CREATE USER david IDENTIFIED BY tititus
DEFAULT TABLESPACE users
TEMPORARY TABLESPACE temp
PROFILE resource_profile;


En caso de que el usuario ya esté creado al igual que en los anteriores casos utilizamos la sentencia ALTER USER.

SQL > ALTER USER david PROFILE resource_profile;

 

BORRADO DE UN USUARIO

Para borrar un usuario utilizamos la sentencia DROP USER, podemos opcionalmente incluir la opción CASCADE, se utiliza para borrar recursivamente los objetos del usuario que se pretende borrar.

SQL > DROP USER david CASCADE

 

OTORGANDO PRIVILEGIOS (GRANTING)

A un usuario podemos otorgarle una serie de privilegios. Un privilegio permite a un usuario acceder a ciertos objetos o realizar ciertas acciones:.
- Privilegios sobre Objetos ( Object privileges ) a permisos sobre vistas, tablas, secuencias, procedimientos, paquetes.
- Privilegios del Sistema ( System privileges ) a permisos sobre “niveles de la base de datos” como pueden ser conexión a la base de datos, creación de usuarios, limitar cuentas.
- Privilegios sobre Roles ( Role privileges ) a muchos permisos son otorgados mediante roles agrupando un conjunto de privilegios.

Para otorgar privilegios utilizamos la sentencia GRANT, para quitar un privilegio o permiso a un usuario utilizamos la sentencia REVOKE

EJEMPLOS:

Privilegio sobre una tabla:

SQL > GRANT ALL ON tabla_alumnos TO david


Siendo tabla_alumnos una tabla de nuestra base de datos y david un usuario de esta, hemos asignado mediante GRANT ALL,todos los permisos al usuario david sobre esta tabla.

GRANT ALL = permisos SELECT, INSERT, UPDATE, DELETE


Si queremos asignar sólo uno de estos permisos utilizamos la misma sentencia pero con el permiso que queramos otorgar.

SQL > GRANT SELECT ON tabla_alumnos TO david
SQL > GRANT SELECT,INSERT ON tabla_alumnos TO david


Privilegio sobre una vista:

Para el caso de las vistas podemos a un usuario otorgar permisos SELECT, INSERT, UPDATE, DELETE, DEBUG, REFERENCES.
Siendo vista_alumnos una vista de nuestra base de datos y david un usuario de esta:

Otorgamos al usuario david todos los permisos sobre la vista vista_alumnos.

SQL > GRANT ALL ON vista_alumnos TO david


Otorgamos al usuario david algunos permisos sobre la vista_alumnos

SQL > GRANT SELECT ON vista_alumnos TO david
SQL > GRANT SELECT,INSERT ON vista_alumnos TO david


Privilegio sobre una secuencia:

Con las secuencias pasa lo mismo que con los anteriores objetos vistos, para otorgar permisos se utiliza GRANT. Los permisos que podemos otorgar a una secuencia es SELECT o ALTER.

Privilegio sobre un paquete,función o procedimiento:

Los permisos que podemos otorgar a las funciones, paquetes o procedimientos almacenados en nuestra base de datos son los siguientes: EXECUTE, DEBUG.

 

QUITANDO PRIVILEGIOS

Si queremos quitar un privilegio a uno de estos objetos haremos lo mismo que con GRANT pero utilizando la sentencia REVOKE.

SQL > REVOKE ALL ON tabla_usuarios FROM david

 

 

Comentarios  

 
+3 #1 Anónimo 20-09-2006 01:08
tengo una duda al borra una tabla o vista se borran tambien los privilegios del usuario sobre estas tablas
 
 
+3 #2 Anónimo 20-09-2006 09:57
En un principio si desaparece el objeto desaparecen los privilegios asociados a este.

La vista donde puedes ver los privilegios que hay en tu base de datos otorgados es user_tab_privs_made
 
 
+2 #3 Anónimo 24-09-2006 00:03
hola estoy aprendiendo esto del oracle y tengo una pregunta.. luego de otorgar el permiso a un usuario, como hago para hacer uso de ese permiso desde el otro usuario??? no se como se pone..
 
 
+4 #4 Anónimo 26-09-2006 13:54
Hola

Si tienes un usuario USER1 con una tabla TABLE1 y le das ese permiso al usuario USER2 para que pueda seleccionar las filas de esa tabla

sql> grant select on user1.table1 to user2

Arhora puedes realizar select desde USER2 a esa tabla de la siguiente formas:

Haces login con USER2 y realizas la siguiente consulta

select * from user1.table1;

Si quieres evitar poner delante de table1 el usuario propietario de esta tabla ( USER1) para que sea visible, la opcion que tienes es crear un sinonimo sobre la tabla TABLE1 de tal forma que USER2 pueda hacer

select * from TABLE1; y pueda ver los resultados de esta tabla

 
 
0 #5 tere_py@yahoo.com 09-10-2006 16:00
como puedo controlar la cantidad de usuarios concurrentes a la base de datos hay un limite ?

gracias
 
 
+1 #6 Anónimo 15-10-2006 20:36
para controlar el número de procesos os remito a los parametros de inicalización en el init.ora

PROCESSES:Máximo número de procesos de SO que pueden acceder de forma

concurrente. Mínimo: 1 por usuario + procesos de arrancados con cada instancia.

Si varía el número máximo de este valor no nos tenemos que olvidar de echar un vistado a los pararámtros

transactions y sessions que están directamente ligados con este.
 
 
0 #7 Anónimo 21-10-2006 19:23
Hola. Instale Oracle 9i pero cuando intento entrar por SQL Plus mediante el usuario de prueba scott y la contraseña tiger no se que valor colocar en "Host String" ¿que me sugieren? He probado con varios valores y me dan los siguientes errores: ORA-12541: TNS no listener ó ORA-12154: TNS Could not resolve service name.

De antemano muy Agradecido por su ayuda.
 
 
+1 #8 Anónimo 23-10-2006 10:31
En un princio el error que estas recibiendo se refiere a que el listener de la base de datos no está levantado o no se reconoce el descriptor de la base de datos para la conexion, por lo tanto cuando intentes conectarte con cualquiera de los usuarios a través de sql plus vas a obtener ese error.

Intenta levantar el listener de la base de datos, y en caso de que este esté levantado revisar los ficheros de red de oracle ( sqlnet.ora y tnsnames.ora ) con el fin de ver si el sid de la base de datos al que te estás conecntado es el correcto.

utiliza el comando tnsping descriptor_base_de_d atos para ver si el listener está levantado y el descriptor de conexión es correcto.

Puedes echar un vistazo a http://www.orasite.com/tutoriales/archivos-configuracion-red-oracle.html
 
 
-2 #9 Anónimo 07-11-2006 21:53
Hola!

Quiero crear un usuario que tenga premiso para crear tablas pero no para crearlas. Al darle privilegio de CRATE TABLE, debe ser que lleva implícito el de borrarla, no?

Como puedo hacerlo?
 
 
0 #10 Anónimo 07-11-2006 21:54
Perdon, me referia que pueda crear tablas pero no BORRALAS

Muchas gracias
 
 
0 #11 Anónimo 05-12-2006 01:44
hola tengo una duda quisiera saber como conectar varias maquinas en una red y solo debo tener una sola base datos
 
 
0 #12 weimar3@hotmail.com 17-04-2007 15:51
quiero saber como se recupera una base de datos en oracle 9i sin haber hecho copia de seguridad
 
 
0 #13 Anónimo 18-04-2007 13:08
Hola ,

la verdad es que sin una copia de seguridad es complicado realizar una recuperación de la base de datos.

Cuál es el caso en concreto, que error tienes. Si la base de datos está en modo archivelog y da algún fallo en alguno de los datafiles, puede que si sea posible

recuperar la instancia hasta un punto estable.
 
 
0 #14 Cristina 10-05-2007 15:05
Tengo que cargar una tabla partiendo de un fichero con un INSERT y un UPDATE. Si la carga es correcta tiene que marcarlo un testigo en el UPDATE, pero si no lo es el testigo no debe marcar nada.

El problema es que sí que lo marca cuando la carga no es correcta, cómo puedo solucionarlo?
 
 
0 #15 Anónimo 21-06-2007 01:57
Hola,

quisiera saber si alguien sabe como liberar el espacio utilizado desde un tablespace Temporal una vez que ya finaliz´la query que estaba utilizando el tablespace TEMP?
 
 
0 #16 Anónimo 31-07-2007 22:54
esta bien bueno este pequeño manual de oracle
 
 
+1 #17 MGM 05-11-2007 19:01
Tengo una pregunta, si yo tengo un usuario con privilegios de SYSDBA y posteriormente lo quiero limitar... los privilegios otorgados por este usuario ¿serán revocados al resto de usuarios?.

Gracias.
 
 
0 #18 Miguel Cervantes 06-12-2007 00:05
EXCELENTE DOCUMENTO PARA TODOS AQUELLOS QUE QUEREMOS COMENZAR BIEN......

TE LO AGRADEZCO MUCHO.........
 
 
+4 #19 Adriana Miranda 18-04-2008 04:09
Hola, alguien sabra como puedo modificar el UID a un usuario?
 
 
+4 #20 juankri@hotmail.com 13-01-2009 08:32
Que estructuras del sistema debo verificar para obtener los privilegios de un usuario, y como obtengo una descripcion de los diferentes privilegios exixtentes oracle.Muchas gracias.
 
 
+3 #21 io 07-04-2009 12:51
oye anonimo enviame una conclusion
 
 
+1 #22 Yeison Pinto Mosquera 18-06-2009 20:52
Exelente documentacion, muchas gracias por su ayuda
 
 
+1 #23 John 02-07-2009 12:41
Hola... soy nuevo en esto de oracle y tengo una pregunta!

Cuando yo creo usuarios en oracle puedo crear usuario que pueden crear, borrar, actualizar tablas en un esquema pero tambien puedo crear usuarios los cuales solo van a poder hacer select, insert, delete or update sobre esas tablas... es asi o estoy equivocado?

Gracias!
 
 
+1 #24 rober 07-11-2009 12:41
Hola, tengo una duda sobre el REVOKE para quitados de permisos, existe el revoke en cascada y restricto? en ese caso, cual es por defecto?....otra pregunta: la cantidad de permisos es acumulativo? es decir se tiene una pila de permisos por usuario?, por ejemplo el usuario U1 le da permiso de UPDATE sobre tabla A al usuario U2 y tambien permiso de otorgarselo a otros usuarios, el Usuario U2 le da este mismo permiso al U3. Si el usuario U3 ya tenia este permiso, se le acumula? osea, si ahora el U2 le quita el permiso al U3, el U3 lo sigue teniendo porque otro usuario ya se lo habia otorgado antes?
 
 
0 #25 anónimo 22-12-2009 11:18
eh estado leyendo ultimamente.. y para poder crear una base de datos en el arbol.. necesito crear un usuario.. pero como hago la creacion, porq hast donde se no sea crea igual que un usuario que accesa a la BD... me podrian ayudar...!! me urge porque tengo q terminar un proyecto... por favor..!!!
 
 
-5 #26 MBM 09-01-2010 16:47
Hola...estoy cursando mi materia de oracle....tengo dos maquinas en red...pero en una me puse a ingresar los datos de las tablas con el insert...despues quise ingresar desde la otra maquina pero no me salen los datos de las tablas me imagino que al insertar datos en una maquina en la otra no se guardan...lo que quiero que me ayuden es en como hago un backup a la otra maquina. Mil gracias por tu ayuda.
 
 
-1 #27 Jvega 13-02-2010 09:27
como puedo entrar a la base de datos luego de haber creado al usuario
 
 
-1 #28 yop 18-02-2010 00:33
como encuentro la sentencia de un privilefigio en oracle
 
 
+2 #29 Anónimo 14-03-2010 21:05
Muy interesante
 
 
-3 #30 Celeste 16-03-2010 07:05
Hola, espero puedan ayudarme. Estoy trabajando sobre un esquema DBMIGRAC y tengo que acceder a las tablas que están en otro esquema llamado AUSLOG, en DBMIGRAC tengo los pkg y yo hago lo siguiente:

INSERT INTO AUSLOG.CONTACT (name,

last_name)

select m_name, m_last_name from m_persona;

Esto funciona en el editor de TOAD correctamente, pero en el cuerpo del pkg me da error de compilación. Me dice que no existe la tabla o vista y se posiciona sobre la línea de INSERT.

Alguien podría ayudarme? por favor, es bastante urgente...no sé si me falta algo.

Muchas gracias de antemano!
 
 
-1 #31 javiercito 05-04-2010 15:39
tengo oracle XE necesito ayuda para crear usuaros

ayudame este es mi correo

 
 
0 #32 armando 23-04-2010 22:16
como puedo modificar un usuario ya existente habiendole ya asignado un tablespace
 
 
0 #33 armando 23-04-2010 22:17
por cierto mi correo es , es sobre la modificacion de un usuario existente
 
 
0 #34 luis 17-05-2010 10:27
Quiero saber como se crea un usuario en oracle
 
 
0 #35 Jose Luis pG 27-05-2010 11:25
Hola, se puede implementar una politica para que ademas de que un usuario de oracle pueda modificar una tabla, sea de un usuario de Red en especifico...
 
 
0 #36 anonimo 05-06-2010 20:55
tengo un problema al importar un dase de datos oracle con el wiindow 7 como importo
 
 
0 #37 Edwin 08-08-2010 10:10
Perfecto manual de oracle para nosotros que estamos entrando a este mundo de Oracle
 
 
0 #38 rudy 09-09-2010 09:31
me podrian informar como sacar las conecciones de los usuarios ejemple las ultima conneccion

Gracias
 
 
0 #39 gustavo 14-09-2010 17:33
limitar el uso de espacio
 
 
+1 #40 quinteroram1 24-11-2010 19:14
como doy a un ususrio en oracle permiso de todo.
 
 
0 #41 neptuno75 05-12-2011 22:41
Es falso lo que se indica en el apartado de autenticacion externa ya que las cuentas de usuario si se guardan en la BBDD. Lo que no se guardan son las contraseñas. Tampoco es cierto que las cuentas esten SIEMPRE referidas con OPS$
 
 
0 #42 neptuno75 06-12-2011 00:01
Cito a neptuno75:
 
 
0 #43 Bixoo 31-01-2012 09:30
Buenos días, yo tengo una duda, imaginemos que tenemos dos usuarios, user1 y user2, de los cuales user1 ha creado un número elevado de tablas y queremos darle unicamente permiso al user2 de lectura como se puede hacer????

Gracías
 

Haz login para dejar un comentario. Puedes hacer login con tu cuenta de:


Haz login con tu cuenta orasite

Haz login con tu cuenta de:

Errores Oracle más comunes