Seguridad y Acceso A Oracle
Seguridad y Acceso A Oracle
Seguridad y Acceso A Oracle
USUARIOS (CREAR)
Puede haber varios usuarios diferentes de la base de datos. Cada uno es propietario de sus objetos.
Para crear un usuario debemos conectarnos a la base datos como administradores (por ejemplo
"system").
Sintaxis bsica para crear un usuario:
create user NOMBREUSUARIO identified by CONTRASEA default tablespace
NOMBRETABLESPACEPORDEFECTO quota CANTIDAD on TABLEESPACE; ** [default role ROLE, ALL];
La clusula "identified by" permite indicar una contrasea.
La clusula "default tablespace" ser el tablespace (espacio de tablas) por defecto en la creacin de
objetos del usuario. Si se omite se utilizar el tablespace SYSTEM. Los tablespaces son unidades lgicas
en las cuales de divide una base de datos, en las cuales se almacenan los objetos (tablas, secuencias,
etc.); todos los objetos estn almacenados dentro de un tablespace.
La clusula "quota" permite configurar un espacio en bytes, Kb o Mb en la base de datos. Si no se
especifica, por defecto es cero y no podr crear objetos.
La clusula "default role" permite asignar roles de permisos durante la creacin del usuario.
Ejemplo:
create user ana identified by anita;
Con la sentencia anterior se crea un usuario denominado "ana" con la clave "anita", el tablespace por
defecto es "system" porque no se especific otro.
Con la siguiente sentencia se crea un usuario denominado "juan" con la clave "juancito", se le asigna un
espacio de 100 mb:
create user juan identified by juancito default tablespace system quota 100M on system;
Si intentamos crear un usuario que ya existe, Oracle muestra un mensaje de error indicando tal
situacin.
El diccionario "dba_users" muestra informacin sobre todos los usuarios; el nombre de usuario
USUARIOS (CREAR)
Problema:
Sabemos que para crear un usuario debemos conectarnos a la base datos como
administradores (por ejemplo "system").
Necesitamos crear un usuario "ana"; antes vamos a eliminarlo por si existe (luego veremos
detenidamente cmo eliminar usuarios y explicaremos la siguiente sentencia):
drop user ana cascade;
Creamos un usuario denominado "ana" con la contrasea "anita":
create user ana identified by anita;
Aparece un mensaje indicando que el usuario "ana" ha sido creado.
Necesitamos crear un usuario denominado "juan"; antes vamos a eliminarlo por si existe:
drop user juan cascade;
Creamos el usuario "juan" con la contrasea "juancito", le asignamos un espacio de 100 mb
en "system":
create user juan identified by juancito default tablespace system quota 100M on system;
Si intentamos crear un usuario que ya existe, Oracle muestra un mensaje de error indicando
tal situacin.
create user juan identified by juancito;
Mensaje de error.
Consultamos el diccionario "dba_users" y analizamos la informacin que nos muestra:
select username, password, default_tablespace, created from dba_users;
El resultado nos muestra el nombre de usuario, si tiene o no contrasea, el espacio asignado
USUARIOS (CREAR)
Primer problema:
Una escuela necesita crear 2 usuarios diferentes en su base de datos. Uno denominado
"director" y otro "profesor". Luego se les concedern diferentes permisos para retringir el
acceso a los diferentes objetos. Conctese como administrador (por ejemplo "system").
1- Primero eliminamos el usuario "director", porque si existe, aparecer un mensaje de error:
drop user director cascade;
2- Cree un usuario "director", con contrasea "escuela" y 100M de espacio en "system"
3- Elimine el usuario "profesor":
drop user profesor cascade;
4- Cree un usuario "profesor", con contrasea "maestro" y espacio en "system"
5- Consulte el diccionario "dba_users" y analice la informacin que nos muestra
PERMISO DE CONEXIN
Los usuarios necesitan permisos para poder acceder a la base de datos y a los objetos de la misma.
Los privilegios pueden ser de dos tipos: del sistema y sobre objetos.
Como mnimo, un usuario debe tener permiso para conectarse.
El permiso "create session" es un privilegio de sistema.
Para conceder permiso de conexin a un usuario empleamos la instruccin "grant".
Sintaxis bsica:
grant create session to USUARIO;
En el siguiente ejemplo concedemos al usuario "juan" permiso para conectarse:
grant create session to juan;
Podemos consultar el diccionario "dba_sys_privs" para encontrar los privilegios concedidos a los
usuarios. Nos mostrar el nombre del usuario (grantee) y el permiso (privilege), entre otra informacin
que analizaremos prximamente.
Luego de tener permiso para crear sesin, puede crear una sesin presionando el cono "new
connection" en la solapa "connections"; se abrir una ventana en la cual deber colocar un nombre de
conexin ("connection name", puede ser el mismo nombre de usuario), el nombre del usuario
("username") y la contrasea ("password"), luego presionar el botn "connect"; se abrir una nueva
solapa (nueva conexin) con el nombre del usuario; no se abrir la nueva conexin si:
a) el usuario para quien quiere abrir una nueva sesin no existe,
b) la contrasea es incorrecta o
c) el usuario existe pero no tiene permiso "create session".
Si consultamos el diccionario "user_sys_privs" obtendremos la misma informacin que "dba_sys_privs"
pero nicamente del usuario actual.
Podemos averiguar el nombre del usuario conectado con la siguiente sentencia:
select user from dual;
PERMISO DE CONEXIN
Problema:
Creamos un usuario denominado "ana", con contrasea "anita", le asignamos espacio en
"system" (100M). Antes lo eliminamos por si existe:
drop user ana cascade; create user ana identified by anita default tablespace system quota
100M on system;
Creamos un usuario denominado "juan", con contrasea "juancito", le asignamos espacio en
"system" (100M). Antes lo eliminamos por si existe:
drop user juan cascade; create user juan identified by juancito default tablespace system
quota 100M on system;
Consultamos el diccionario "dba_users" y analizamos la informacin que nos muestra:
select username, password, default_tablespace, created from dba_users;
Verificamos que los usuarios "ana" y "juan" existen.
Consultamos el diccionario "dba_sys_privs" para encontrar los privilegios concedidos a
nuestros usuarios. Nos mostrar el nombre del usuario (grantee) y el permiso (si lo tiene):
select grantee, privilege from dba_sys_privs where GRANTEE='ANA' or grantee='JUAN';
Nos muestra que estos usuarios no tienen ningn privilegio concedido.
Concedemos a "juan" permiso para conectarse:
grant create session to juan;
Consultamos el diccionario "dba_sys_privs" para encontrar los privilegios concedidos a
"juan":
select grantee,privilege from dba_sys_privs where grantee='JUAN';
PERMISO DE CONEXIN
Tiene permiso "create session". Abrimos una nueva conexin para "juan":
Presionamos el cono "new connection" en la solapa "connections"; se abre una ventana en la cual
colocamos:
- "connection name" (nombre de la conexin): juan;
- "username" (nombre del usuario): juan y
- "password" (contrasea): juancito.
Luego presionamos "connect"; se abre una nueva solapa (nueva conexin) con el nombre del usuario
(juan).
En la conexin de "juan" podemos consultar sus privilegios:
select username, privilege from user_sys_privs;
Note que nicamente aparecen los permisos del usuario actual.
Para obtener el nombre del usuario conectado, empleamos la siguiente sentencia:
select user from dual;
Aparece Juan. Volvemos a la conexin "system" (la otra solapa). Comprobamos el usuario actual:
select user from dual;
Aparece System.
Ya sabemos abrir una nueva sessin de usuario. Aprendimos que existen 3 razones por las cuales una
nueva sesin no se pueda iniciar; una de ellas es que el usuario no exista. Intentemos abrir una nueva
conexin para un usuario inexistente:
Presionamos el cono "new connection" en la solapa "connections"; se abre una ventana en la cual
colocamos:
- "connection name" (nombre de la conexin): pedro;
- "username" (nombre del usuario): pedro y
PERMISO DE CONEXIN
Otra razn por la cual la apertura de una nueva sesin puede fallar es que el usuario no tenga permiso
de conexin. Intentemos abrir una nueva conexin para un usuario que no tenga tal permiso, caso de
"ana":
Presionamos el cono "new connection" en la solapa "connections"; se abre una ventana en la cual
colocamos:
- "connection name" (nombre de la conexin): ana;
- "username" (nombre del usuario): ana y
- "password" (contrasea): anita.
Luego presionamos "connect"; la sessin no se abre, un mensaje de error indica que el usuario "ana" no
tiene permiso "create session" por lo cual se deniega la conexin. Cancelamos.
Concedemos a "ana" permiso de conexin:
grant create session to ana;
Consultamos el diccionario "dba_sys_privs" para encontrar los privilegios concedidos a "ana":
select grantee,privilege from dba_sys_privs where grantee='ANA';
Tiene permiso "create session".
La tercera razn por la cual puede no iniciarse una nueva sesin es que coloquemos la contrasea
incorrecta. Intentemos abrir una nueva conexin para un usuario que tenga permiso, pero le demos una
contrasea incorrecta:
Presionamos el cono "new connection" en la solapa "connections"; se abre una ventana en la cual
colocamos:
- "connection name" (nombre de la conexin): ana;
- "username" (nombre del usuario): ana y
- "password" (contrasea): ana.
Luego presionamos "connect"; la sessin no se abre, un mensaje de error indica que el nombre de
PERMISO DE CONEXIN
Abramos una nueva conexin para "ana" colocando los datos correctos:
Presionamos el cono "new connection" en la solapa "connections"; se abre una ventana en la
cual colocamos:
- "connection name" (nombre de la conexin): ana;
- "username" (nombre del usuario): ana y
- "password" (contrasea): anita.
Presionamos "connect"; se abre una nueva solapa (nueva conexin) con el nombre del
usuario (ana).
Consultamos el diccionario "user_sys_privs":
select username,privilege from user_sys_privs;
Note que nicamente aparecen los permisos del usuario actual.
Comprobamos que estamos en la sesin de "ana":
select user from dual;
PERMISO DE CONEXIN
Primer problema:
Una escuela necesita crear 3 usuarios diferentes en su base de datos. Uno denominado
"director", otro "profesor" y un tercero "alumno".
Conctese como administrador (por ejemplo "system").
1- Elimine el usuario "director", porque si existe, aparecer un mensaje de error:
drop user director cascade;
2- Cree un usuario "director", con contrasea "dire" y 100M de espacio en "system"
3- Elimine el usuario "profesor":
drop user profesor cascade;
4- Cree un usuario "profesor", con contrasea "profe" y espacio en "system"
5- Elimine el usuario "alumno" y luego crelo con contrasea "alu" y espacio en "system"
6- Consulte el diccionario "dba_users" y analice la informacin que nos muestra
Deben aparecer los tres usuarios creados anteriormente.
7- Consulte el diccionario "dba_sys_privs" para encontrar los privilegios concedidos a
nuestros tres usuarios
Nos muestra que estos usuarios no tienen ningn privilegio concedido.
8- Conceda a "director" permiso para conectarse
9- Conceda a "profesor" permiso para conectarse
10- Consulte el diccionario "dba_sys_privs" para encontrar los privilegios concedidos a
PERMISO DE CONEXIN
11- Abra una nueva conexin para "director". Se debe abrir una nueva solapa (nueva
conexin) con el nombre del usuario (director)
12- En la conexin de "director" consulte sus privilegios
13- Obtenga el nombre del usuario conectado
14- Vuelva a la conexin "system" (la otra solapa) y compruebe el usuario actual
15- Intente abrir una nueva conexin para el usuario inexistente. Debe aparecer un mensaje
de error y denegarse la conexin. Cancele.
16- Intente abrir una nueva conexin para el usuario "profesor" colocando una contrasea
incorrecta. Debe aparecer un mensaje de error y denegarse la conexin. Cancele.
17- Abra una nueva conexin para "profesor" colocando los datos correctos. Se debe abrir
una nueva solapa (nueva conexin) con el nombre del usuario (profesor).
18- Intentemos abrir una nueva conexin para el usuario "alumno", el cual no tiene permiso.
Un mensaje de error indica que el usuario "alumno" no tiene permiso "create session" por lo
cual se deniega la conexin. Cancele.
19- Conceda a "alumno" permiso de conexin
20- Consulte el diccionario "dba_sys_privs" para encontrar los privilegios concedidos a
"alumno"
21- Abra una nueva conexin para "ALUMNO". Se debe abrir una nueva solapa (nueva
conexin) con el nombre del usuario (profesor)
22- Consulte el diccionario "user_sys_privs"
PRIVILEGIOS
DEL
SISTEMA
(CONCEDER)
GRANTEE PRIVILEGE
------------------------------ANA
CREATE VIEW
ANA
CREATE PROCEDURE
ANA
CREATE TRIGGER
ANA
CREATE SESSION
ANA
CREATE TABLE
JUAN
CREATE SESSION
JUAN
CREATE PROCEDURE
JUAN
CREATE TRIGGER
Iniciamos una nueva sesin como "ana". Como "ana" creamos una tabla:
create table prueba(
nombre varchar2(30),
apellido varchar2(30) );
La tabla ha sido creada, porque "ana" tiene pivilegio "create table".
Podemos consultar el diccionario "user_sys_privs" para corroborar sus privilegios:
select privilege from user_sys_privs;Obtenemos la siguiente informacin:
PRIVILEGE --------CREATE TRIGGER
CREATE TABLE
CREATE SESSION
CREATE VIEW
CREATE PROCEDURE
Iniciamos una nueva sesin como "juan". Como "juan" intentamos crear una tabla:
create table prueba( nombre varchar2(30), apellido varchar2(30) );