Oracle PDF
Oracle PDF
Oracle PDF
Práctica 5
1. Privilegios
Un privilegio es un derecho para ejecutar un tipo particular de sentencia SQL. Ejemplos de
privilegios son:
• Derechos para conectar con la base de datos
• Derechos para crear una tabla
• Derechos para seleccionar tuplas de una tabla perteneciente a otro usuario
Los privilegios se otorgan (“grant”) a los usuarios con el fin de que tales usuarios puedan llevar a
cabo las tareas que requiere su trabajo con la base de datos. Un privilegio se otorga a un usuario sólo cuando
tal privilegio es absolutamente necesario para efectuar una determinada labor.
Un rol es un conjunto de privilegios al que se da un nombre, lo que permite que puedan ser
otorgados a la vez.
Un usuario puede recibir privilegios mediante dos vías distintas:
• De forma explícita, otorgando un derecho concreto a un usuario particular. Por ejemplo, el
usuario alum1 puede recibir el privilegio de insertar tuplas en la tabla ALUMNOS, propiedad
del usuario alum2.
• Por medio de roles, que pueden ser otorgados a distintos usuarios de la base de datos. Por
ejemplo, los privilegios de seleccionar, insertar, actualizar y borrar tuplas de la tabla
ALUMNOS pueden ser otorgados al rol llamado SECRETARÍA, y éste a su vez ser otorgado a
los usuarios secretaria1 y secretaria2.
Teniendo en cuenta que los roles son una vía más sencilla y segura de gestionar los privilegios de los
diferentes usuarios de la base de datos, los privilegios son habitualmente gestionados por esta segunda vía.
Existen dos categorías distintas de privilegios:
• Privilegios de sistema
• Privilegios de objeto
Los privilegios de sistema son otorgados normalmente sólo a usuarios pertenecientes al personal
administrativo, así como a desarrolladores de aplicaciones.
¿Quién puede otorgar o revocar derechos de sistema?. No todos los usuarios tienen capacidad de
otorgar o revocar privilegios de sistema. Para poder hacer esto, un usuario debe poseer algún privilegio de
sistema con la opción ADMIN OPTION, o por contra con el privilegio GRANT ANY PRIVILEGE.
1/21
A.B.D. 2007 Administración de privilegios y roles
22/3/07 Práctica 5
Por ejemplo, un usuario al que se le haya otorgado el privilegio de sistema CREATE ANY TABLE
con la opción WITH ADMIN OPTION, tiene la capacidad a su vez de otorgar o revocar el privilegio
CREATE ANY TABLE a cualquier otro usuario o rol.
El anexo 1 incluye todos los privilegios de sistemas incluidos en ORACLE.
2/21
A.B.D. 2007 Administración de privilegios y roles
22/3/07 Práctica 5
define la vista. Los privilegios de objeto sobre tablas que permiten operaciones de DML pueden aplicarse de
modo similar sobre las vistas.
Para crear una vista es preciso poseer los siguientes privilegios:
• El usuario que desee crear una vista debe poseer el privilegio CREATE VIEW (para crearla sobre su
propio esquema) o CREATE ANY VIEW (para crearla sobre el esquema de otro usuario). Estos
privilegios pueden recibirse explícitamente o mediante un rol.
• Debe haber recibido explícitamente los privilegios de SELECT, INSERT, UPDATE y/o DELETE
sobre todos los objetos base que soportan la vista, o bien poseer los privilegios SELECT ANY
TABLE, INSERT ANY TABLE, UPDATE ANY TABLE y/o DELETE ANY TABLE. Estos
privilegios no pueden recibirse a través de roles.
2. Roles
La mejor forma de gestionar la seguridad operacional de una base de datos es a través de los roles.
Un rol es un grupo de privilegios al que se le ha dado un nombre. Un rol puede finalmente ser otorgado a
usuarios particulares de la base de datos o también a otros roles.
Las ventajas que se obtienen con el uso de roles se pueden resumir en los siguientes puntos:
• Administración de privilegios reducida. En lugar de otorgar explícitamente el mismo conjunto de
privilegios a un grupo de usuarios, los privilegios para un grupo relacionado de usuarios pueden ser
otorgados a un rol y, posteriormente, sólo el rol necesita ser otorgado a cada miembro del grupo de
usuarios.
• Gestión dinámica de privilegios. Si los privilegios de un grupo deben cambiar, sólo es preciso
modificar el rol otorgado al grupo. El dominio de seguridad de todos los usuarios que reciben el rol
del grupo, refleja automáticamente los cambios realizados en el rol.
• Disponibilidad selectiva de privilegios. Los roles otorgados a un usuario pueden ser activados o
desactivados selectivamente. Esto permite un control específico de los privilegios de un usuario en
cualquier situación dada.
• Seguridad específica de la aplicación. El uso de un rol puede protegerse mediante un password. Es
posible construir aplicaciones para activar específicamente un rol proporcionando el password
correcto. Los usuarios no pueden activar el rol si no conocen el password.
3/21
A.B.D. 2007 Administración de privilegios y roles
22/3/07 Práctica 5
Un rol de usuario se crea para un grupo de usuarios de la base de datos que tienen unos
requerimientos de privilegios comunes. La gestión de privilegios de usuario se controla otorgando roles de
aplicación y privilegios al rol de usuario, otorgando posteriormente el rol de usuario a los usuarios
apropiados.
La funcionalidad de los roles de la base de datos incluye los siguientes aspectos:
• Un rol puede incluir privilegios de sistema y privilegios de objeto.
• Un rol puede ser otorgado a otros roles. Sin embargo un rol no puede ser otorgado a sí mismo ni
circularmente.
• Cualquier rol puede ser otorgado a cualquier usuario de la base de datos
• Un rol otorgado a un usuario puede estar activado o desactivado. El dominio de seguridad de un
usuario incluye los privilegios de todos los roles actualmente activos para tal usuario. Este dominio
no incluye los privilegios de roles que no están actualmente activos para el usuario.
• Un rol otorgado indirectamente (un rol otorgado a un rol) puede activarse o desactivarse de forma
explícita para un usuario concreto. Sin embargo si un rol recibe otros roles, todos los roles
indirectamente otorgados del rol directamente otorgado están implícitamente activados.
Inmediatamente después de la creación un rol no tiene privilegios asociados con él. Para asociar
privilegios a un nuevo rol, es necesario otorgar privilegios u otros roles al nuevo rol.
Además podemos cambiar las características del rol una vez creado mediante la sentencia ALTER
ROLE.
Para borrar un rol utilizaremos la sentencia DROP ROLE. Cuando se borra un rol automáticamente,
se revocan los privilegios relacionados con este rol a todos los usuarios o roles a quienes se hubiese otorgado
el rol a borrar.
4/21
A.B.D. 2007 Administración de privilegios y roles
22/3/07 Práctica 5
3. Gestión de privilegios
Podemos otorgar privilegios a usuarios y roles, así como conjuntos de privilegios (o roles) a usuarios
mediante la sentencia GRANT. También podemos revocar privilegios de usuarios o roles usando la sentencia
REVOKE. En los siguientes apartados se muestra la sintaxis de ambas sentencias, así como el mecanismo
para activar y desactivar roles, mediante la sentencia SET ROLE.
grantee_clause::=
5/21
A.B.D. 2007 Administración de privilegios y roles
22/3/07 Práctica 5
grant_object_privileges::=
on_object_clause::=
Objetc_privilege es el privilegio a ser otorgado y puede ser uno cualquiera del anexo 2. La opción
ALL PRIVILEGES concede todos los privilegios que se tengan sobre el objeto con la opción GRANT
OPTION (por supuesto, un usuario posee todos los privilegios sobre los objetos de su esquema con la opción
GRANT OPTION). Column especifica una columna de una tabla o vista, ya que es posible especificar
columnas concretas cuando se otorgan privilegios de INSERT, REFERENCES o UPDATE sobre tablas o
vistas. Si no se enumeran las columnas el privilegio podrá usarse para todas las columnas.
On_object_clause especifica el objeto sobre el cual se conceden los privilegios. Los objetos de
esquema de directorio y los objetos de esquema de recursos de Java se identifican por separado del resto de
objetos de la base de datos. Por lo que a nosotros nos afecta estos objetos pueden ser: tablas, vistas,
secuencias, procedimientos, funciones almacenadas, paquetes, vistas materializadas o sinónimos para alguno
de los objetos anteriores. Si objetc no se califica con schema, Oracle supone que el objeto se ubica en el
esquema del usuario. WITH GRANT OPTION tiene el mismo significado que en el caso de privilegios del
sistema y WITH HIERARCHY OPTION concede el privilegio especificado también a todos los subobjetos
del objeto al que se asigna (por ejemplo subvistas de una vista).
6/21
A.B.D. 2007 Administración de privilegios y roles
22/3/07 Práctica 5
Es importante señalar que sólo pueden revocarse privilegios que hayan sido concedidos
explícitamente con la instrucción GRANT, es decir, no podría usarse REVOKE para revocar privilegios o
desasignar roles concedidos al usuario a través de otros roles. La sintaxis de la sentencia se muestra a
continuación.
revoke_system_privileges::=
revoke_object_privileges1::=
Prácticamente todas las opciones se han comentado en la sección 3.1, excepto las opciones
CASCADE CONSTRAINTS y FORCE. La primera sólo es relevante si se revocan los privilegios
REFERENCES o ALL PRIVILEGES, ya que lo que hace es eliminar todas las restricciones de integridad
referencial que el usuario que tenía el privilegio hubiese podido definir usando este privilegio. Para la
segunda sólo es preciso conocer que se utiliza para revocar el privilegio de EXECUTE en objetos de tipo
definidos por el usuario con dependencias de tipo o tabla.
Hay que tener en cuenta varias situaciones que pueden darse al ejecutar la sentencia REVOKE:
• Si se ejecuta para quitar privilegios del sistema o un rol a PUBLIC, los privilegios sólo serán
revocados a aquellos usuarios que los recibieron por medio de una concesión a PUBLIC y no a
aquellos que los recibieron explícitamente.
• Cuando varios usuarios han concedido el mismo privilegio a otro usuario, éste último sólo perderá
este privilegio si todos los usuarios que se lo concedieron revocan el privilegio al usuario.
• Si se revoca un privilegio del sistema a un usuario o a un rol toma efecto inmediatamente, de tal
forma que tanto a los usuarios a los que se hubiese concedido explícitamente o por medio de un rol
asignado dejarán de tener ese privilegio.
1
La opción de la sentencia REVOKE para privilegios de objetos con lista de columnas no funciona.
7/21
A.B.D. 2007 Administración de privilegios y roles
22/3/07 Práctica 5
• Si se desasigna un rol a un usuario o a otro rol, y el rol asignado estaba activado para ese usuario o
rol (ver siguiente sección), esta acción no toma efecto inmediatamente, sino que podrán seguir
usando los privilegios aquellos usuarios o roles para los que el rol desasignado continúe activado.
Pero una vez que se desactive no se podrá activar posteriormente.
La forma de activar y desactivar roles otorgados a un usuario se lleva a efecto mediante la sentencia
SET ROLE. Su sintaxis es la siguiente:
En el momento de conectar con la base de datos, ORACLE establece el dominio de seguridad del
usuario activando todos los roles por defecto. Recordemos que, como se explicó en la práctica 4, en el
momento de creación de un usuario no es posible asignarle roles por defecto y que el valor inicial de roles por
defecto es ALL, lo que significa que cualquier rol que sea posteriormente otorgado a ese usuario, mediante la
sentencia GRANT, se convertirá en un rol por defecto del mismo. Podemos controlar qué roles por defecto
queremos que tenga un usuario usando la sentencia ALTER USER… DEFAULT ROLE… (ver práctica 4),
que permitirá quitar todos los roles por defecto (opción NONE), asignar una lista o asignar todos menos una
lista de roles (opción ALL EXCEPT).
El dominio de seguridad por defecto del usuario contiene todos los privilegios otorgados
explícitamente al usuario más todos aquellos privilegios incluidos en los roles por defecto. Cualquier
operación autorizada por los privilegios incluidos en el dominio de seguridad puede ser ejecutada sin
problemas.
Durante una sesión, es posible cambiar el dominio de seguridad mediante el comando SET ROLE.
Este comando modifica los roles actualmente activados en esta sesión, poniendo activos sólo un conjunto de
roles especificados en una lista, todos los roles (ALL) o ninguno (NONE). Podemos conocer los roles activos
en un momento dado consultando la vista SESSION_ROLES. El número de roles que pueden activarse
concurrentemente está limitado por el parámetro de inicialización MAX_ENABLED_ROLES.
El usuario JUAN puede usar SET ROLE para activar o desactivar cualquiera de estos roles:
• roles que han sido otorgados directamente a JUAN
• roles que se han otorgado a JUAN por medio de otros roles
8/21
A.B.D. 2007 Administración de privilegios y roles
22/3/07 Práctica 5
Para clarificar las restricciones anteriores consideremos el siguiente ejemplo. Supongamos que el
usuario JUAN recibe los siguientes privilegios:
• se le otorga un rol que tiene el privilegio de sistema CREATE VIEW
• se le otorga un rol que tiene el privilegio de objeto SELECT sobre la tabla EMP
• no recibe de forma directa el privilegio SELECT sobre la tabla EMP
• recibe de forma directa (no vía rol) el privilegio de objeto SELECT sobre la tabla DEPT
Con tales premisas el usuario JUAN está sometido a las siguientes restricciones:
• JUAN puede emitir una sentencia SELECT sobre la tabla EMP y también sobre DEPT.
• Si JUAN emite una sentencia
CREATE VIEW EMP25 as
SELECT * from EMP where SAL > 25000;
ORACLE crea una vista EMP25, pero no puede incluir datos en ella, ya que el privilegio de
seleccionar datos de la tabla EMP los recibió mediante un rol y no directamente. Así la vista
EMP25 estará llena de errores
• JUAN puede crear una vista sobre la tabla DEPT debido a que recibió el privilegio CREATE VIEW
por medio de un rol y además el privilegio SELECT sobre la tabla DEPT directamente.
10/21
A.B.D. 2007 Administración de privilegios y roles
22/3/07 Práctica 5
5. Ejercicios
El abd de la empresa se encarga de construir los objetos necesarios para almacenar los datos de la
empresa. Estos datos se almacenan en las siguientes tablas base, que se utilizarán en algunos ejercicios:
TABLA COLUMNAS TIPO COMENTARIO
id_emp Numérico (3) Identificador del empleado. Clave primaria.
emp_nombre Carácter (30) Nombre del empleado.
EMP id_dpto Numérico (2) Identificador del departamento al que pertenece. Es una clave
externa para DPTO.
edad Numérico (3) Edad del empleado.
salario Numérico (9) Salario del empleado.
id_dpto Numérico (2) Identificador del departamento. Clave primaria.
DPTO dpto_nombre Carácter (30) Nombre del departamento.
id_director Numérico (3) Identificador del empleado que dirige este departamento.
Clave externa para EMP.
presupuesto Numérico (7) Presupuesto del departamento.
id_emp_ventas Numérico (3) Identificador del empleado que debe pertenecer al
departamento de ventas. Clave primaria y clave externa para
VENTAS EMP.
Trim1 Numérico (7) Volumen de ventas realizado por el empleado en el primer
trimestre.
Trim2 Numérico (7) Volumen de ventas realizado por el empleado en el segundo
trimestre.
Trim3 Numérico (7) Volumen de ventas realizado por el empleado en el tercer
trimestre.
A continuación realizaremos una serie de ejercicios para familiarizarnos con las operaciones
relacionadas con privilegios y roles. Para cada ejercicio debe crearse un fichero ejery.sql (donde y es el
número de ejercicio) con las sentencias a ejecutar y un fichero de spool ejery.txt (donde y es el número de
ejercicio) con la salida de la ejecución. Opcionalmente puede crearse el fichero ejery.bat (donde y es el
número de ejercicio) para ejecutar el sqlplus desde la línea de comandos o usar el sqlplus o sqlplus worksheet
interactivo.
11/21
A.B.D. 2007 Administración de privilegios y roles
22/3/07 Práctica 5
ADVERTENCIA: Para realizar algunos de los ejercicios siguientes será necesario crear vistas.
10. Otorgar derechos de consulta sobre todos los atributos de la tabla EMP
11. Otorgar derechos de consulta sobre todos los atributos de la tabla EMP, excepto el atributo
SALARIO
12. Otorgar derechos de consulta sobre todos los atributos de la tabla EMP para aquellos empleados que
pertenezcan al departamento de PERSONAL (Código de departamento 2)
13. Otorgar derechos de consulta e inserción sobre todos los atributos de la tabla EMP, excepto el
atributo SALARIO. Comentar el resultado obtenido al intentar realizar las siguientes operaciones
desde la cuenta USUARIOX2 (donde X es tu número de grupo):
• Insertar una tupla completa (con valor para salario) de empleado
• Insertar una tupla para un empleado sin incluir el valor del atributo salario
• Visualizar el nuevo contenido
14. Otorgar derechos de consulta e inserción sobre todos los atributos de la tabla EMP, excepto el
atributo SALARIO, para empleados que pertenezcan al departamento de personal. Comentar el
resultado obtenido al intentar realizar las siguientes operaciones:
• Desde la cuenta USUARIOX2 (donde X es tu número de grupo):
• Insertar un nuevo empleado del departamento de personal sin indicar su salario.
• Insertar un nuevo empleado del departamento de ventas sin indicar su salario
• Visualizar el nuevo contenido
• Desde la cuenta USUARIOX1 (donde X es tu número de grupo):
• Visualizar el contenido de la tabla EMP
• Actualizar los salarios de aquellos empleados que no tienen relleno el atributo salario a
100
15. Otorgar derechos de actualización sobre todos los atributos de la tabla EMP, excepto el atributo
SALARIO. Comentar el resultado obtenido al intentar realizar las siguientes operaciones:
• Desde la cuenta USUARIOX2 (donde X es tu número de grupo):
• Actualizar la información de la edad de uno de los empleados.
• Actualizar la edad y el salario de uno de los empleados
• Visualizar el nuevo contenido
• Desde la cuenta USUARIOX1 (donde X es tu número de grupo):
• Visualizar el contenido de la tabla EMP
13/21
A.B.D. 2007 Administración de privilegios y roles
22/3/07 Práctica 5
5.3 Roles
La política de seguridad de la empresa está centralizada en el administrador de la base de datos, que
debe decidir qué tipos de privilegios deben concederse a cada usuario para el acceso a las tablas EMP, DPTO
y VENTAS. Después de un estudio extenso, el ABD ha decidido que deben crearse los siguientes grupos:
Teniendo en cuenta esta información, considera que tú eres ahora el ABD de la empresa para realizar
los siguientes ejercicios:
16. Crea todos los roles necesarios para implementar esta política de seguridad, asignándole a cada rol
los privilegios convenientes en cada caso. Dado que el usuarioX1 no tiene privilegios para crear
roles deberás otorgarle el privilegio del sistema necesario para que realice esta operación (o hacer
esta operación con el usuario SYSTEM). Ve comentando mediante REM las operaciones que vas
incluyendo en el fichero SQL.
17. Con el fin de verificar que el ejercicio anterior se ha realizado correctamente, podemos asignar al
USUARIOX2 (donde X es tu número de grupo) cada uno de los roles previamente definidos. Por
ello y mediante una serie de pasos (de manera similar a 5.2) asigna, y desasigna (y activa cuando lo
creas necesario) cada uno de los roles anteriores a USUARIOX2 (donde X es tu número de grupo),
comprobando cuándo puede o no realizar las operaciones para las que se le han otorgado privilegios
a través de cada rol.
14/21
A.B.D. 2007 Administración de privilegios y roles
22/3/07 Práctica 5
Anexo 1
Privilegios de Sistema
Privilegio de sistema Operaciones Autorizadas
ALTER ANY CLUSTER Alterar cualquier cluster en cualquier esquema
ALTER ANY INDEX Alterar cualquier índice en cualquier esquema
ALTER ANY PROCEDURE Alterar cualquier procedimiento, función o paquete almacenado en
cualquier esquema
ALTER ANY ROLE Alterar cualquier role en la BD.
ALTER ANY SEQUENCE Alterar cualquier secuencia en la BD.
ALTER ANY SNAPSHOT Alterar cualquier snapshot (es una tabla que contiene los resultados de una
consulta de una o más tablas, a menudo localizados en una BD remota) en la
BD.
ALTER ANY TABLE Alterar cualquier tabla o vista en el esquema.
ALTER ANY TRIGGER Habilitar, deshabilitar o compilar cualquier trigger de la BD en cualquier
esquema.
ALTER DATABASE Alterar la BD.
ALTER PROFILE Alterar los perfiles
ALTER RESOURCE COST Actualizar los costes para los recursos de una sesión.
ALTER ROLLBACK SEGMENT Alterar los segmentos de rollback.
ALTER SESSION Usar la sentencia ALTER SESSION
ALTER SYSTEM Usar la sentencia ALTER SYSTEM
ALTER TABLESPACE Alterar los tablespaces
ALTER USER Alterar cualquier usuario. Este privilegio autoriza a quien lo recibe a
cambiar contraseñas a otros usuarios o el método de autentificación,
asignar cuotas en cualquier tablespace, definir los tablespaces por
defecto y temporal y asignar un perfil y roles por defecto
ANALYZE ANY Analizar cualquier tabla, cluster o índice en cualquier esquema.
AUDIT ANY Auditar cualquier objeto en cualquier esquema usando la sentencia
AUDIT
AUDIT SYSTEM Usar la sentencia AUDIT (Sentencias SQL).
BACKUP ANY TABLE Usar la utilidad Export para exportar objetos incrementalmente desde
los esquemas de otros usuarios.
BECOME USER Allows grantee to become another user. (Required by any user
performing a full database import.)
COMMENT ANY TABLE Poner un comentario en cualquier tabla, vista o columna en cualquier
esquema
CREATE ANY CLUSTER Crear un cluster en cualquier esquema.
CREATE ANY INDEX Crear un índice en cualquier esquema en cualquier tabla
CREATE ANY PROCEDURE Crear procedimientos, funciones y paquetes almacenados en cualquier
esquema.
CREATE ANY SEQUENCE Crear cualquier secuencia en la BD.
CREATE ANY SNAPSHOT Crear cualquier snapshot en la BD.
CREATE ANY SYNONYM Crear cualquier sinónimo en cualquier esquema
CREATE ANY TABLE Crear tablas en cualquier esquema. El que crea la tabla debe tener
cuota de espacio en el tablespace que contiene la tabla.
CREATE ANY TRIGGER Crear un trigger en cualquier esquema asociado con una tabla de
cualquier esquema.
CREATE ANY VIEW Crear vistas en cualquier esquema
CREATE CLUSTER Crear un cluster en cualquier esquema
CREATE DATABASE LINK Crear enlaces de BD privados en nuestro esquema.
CREATE PROCEDURE Crear procedimientos, funciones y paquetes almacenados en nuestro esquema
CREATE PROFILE Crear perfiles
CREATE PUBLIC DATABASE LINK Crear enlaces de BD públicos
15/21
A.B.D. 2007 Administración de privilegios y roles
22/3/07 Práctica 5
Anexo 2
Privilegios de Objeto
Procedimientos
Privilegios de Funciones
Objeto Tablas Vistas Secuencias Paquetes
ALTER √ √
DELETE √ √
EXECUTE √
INDEX √
INSERT √ √
REFERENCES √
SELECT √ √ √
UPDATE √ √
17/21
A.B.D. 2007 Administración de privilegios y roles
22/3/07 Práctica 5
Anexo 3
19/21
A.B.D. 2007 Administración de privilegios y roles
22/3/07 Práctica 5
21/21