Usuarios, privilegios y roles de Oracle
1. Introducción
- Oracle puede utilizarse simultáneamente por varios procesos y clientes
- Hay problemas de concurrencia
- Cada uno puede tener distintos permisos y capacidades
- Acceso a diferentes tablas de datos
2. Usuarios
Creación de usuarios
CREATE USER usuario IDENTIFIED BY contraseña ACCOUNT UNLOCK
Modificación de un usuario ya creado
ALTER USER usuario cualquier opción válida al crear usuario
Borrado de usuario
DROP USER usuario
3. Privilegios
- Cada usuario puede tener unos permisos distintos
- Acceso, modificación, y borrado de:
- Filas, tablas, usuarios, sesiones…
- Acceso al sistema
connect
,resource
…
3.1. Privilegios de Oracle
Privilegio | Objeto sobre el que se aplica |
---|---|
Create, alter, drop |
Table, sequence, view, user, synonym, session |
select, update, delete, insert |
Sobre campos de tablas y filas |
3.2. Sintaxis de Grant
grant PRIVILEGIO1,PRIVILEGIO2,...,PRIVILEGION on OBJETO to USUARIO with grant option;
create table alumnos(...); create user profesor ...; grant select on alumnos to profesor;
3.3. Ejercicio
- Crea un usuario
PROPIETARIO
- Utilízalo para crear una tabla
DATOS(TEXTO varchar2(255),numero integer)
- Utilízalo para crear una tabla
- Crea un usuario
LIMITADO
- Haz que
PROPIETARIO
de privilegios aLIMITADO
para que:- Pueda leer todos los campos de la tabla
DATOS
- Pueda actualizar el campo
NUMERO
de tablaDATOS
- Pero no pueda modificar el campo
TEXTO
, ni borrar filas, ni insertar filas
- Pueda leer todos los campos de la tabla
grant update(column-name) on table-name to user-name
3.4. Quitar privilegios
- Los privilegios se quitan con
revoke
- Cuando un usuario pierde un privilegio, los pierden también todos los que recibieron el mismo privilegio a través de él
- Por la cláusula
with grant option
- Por la cláusula
connect sys/******* grant select on unatabla to unusuario with grant option; connect unusuario/******* grant select on unatabla to otrousuario; connect sys/******* revoke select on unatabla from unusuario; -- AQUI NI unusuario NI otrousuario TIENEN PRIVILEGIO SOBRE unatabla
3.5. Caso especial: Select
sobre columnas
- Oracle no permite otorgar
select
sobre columnas, solo sobre la tabla completa - Se puede simular creando una vista sobre la tabla, y otorgando
select
sobre la vista
create table datos(texto varchar2(255,numero integer); grant select(texto) on datos to usuario; -- NO FUNCIONA EN ORACLE create view DATOSPARAUSUARIO as select texto from datos; grant select on datosparausuario to usuario;
4. Roles
- Asignar todos los privilegios a un usuario es trabajoso, pero factible
- ¿Qué ocurre si tenemos que manejar a muchos usuario?
- Los roles permiten dar nombre a un grupo de privilegios
- Se pueden asignar privilegios a un rol
- Y después asignar ese rol a varios usuarios
4.1. Sintaxis de roles
create role NOMBREROL; grant PRIVILEGIOS on OBJETOS to NOMBREROL; grant NOMBREROL to USUARIO;
4.2. Ejercicio
- Imagina que
- Creas un rol con sus permisos
- Le asignas privilegios
- Lo asignas al usuario
USUARIOANTES
- Quitas algún privilegio del rol
- Asignas el rol al usuario
USUARIODESPUES
- El usuario
USUARIODESPUES
, ¿tiene más, menos o los mismos privilegios queUSUARIOANTES
?- O lo que es lo mismo, ¿los permisos del rol se copian al usuario o se enlazan?
drop role ELROL;
create role ELROL; grant resource, connect to ELROL; grant select on LIMITADO.DATOS to ELROL;
drop user usuarioantes; create user usuarioantes identified by u; grant ELROL to usuarioantes;
revoke select on LIMITADO.DATOS from ELROL;
drop user usuariodespues; create user usuariodespues identified by u; grant ELROL to usuariodespues;
5. Referencias
- Formatos:
- Creado con:
- Alojado en Github