Está en la página 1de 10

Seguridad y autorización

Tema 5
Seguridad y autorización
1. Vistas ............................................................................................................................ 1
2. Usuarios y privilegios .................................................................................................... 5
2.1. Gestión de cuentas/usuarios .................................................................................. 5
2.2. Gestión de privilegios ............................................................................................. 7
3. Copias de seguridad ..................................................................................................... 9

Ejemplos

Ejemplo 1: Vista simple........................................................................................................ 3


Ejemplo 2: Vista compleja.................................................................................................... 4
Ejemplo 3: Vista con WITH CHECK OPTION ...................................................................... 4
Ejemplo 4: Concesión de privilegios y roles......................................................................... 8
Ejemplo 5: Revocar privilegios o roles ................................................................................. 9

©Yolanda Marhuenda
Seguridad y autorización

1. Vistas
Una vista es una consulta sobre datos de tablas u otras vistas que se almacena con un
nombre en la BD.

Desde el punto de vista de un usuario, una vista es una tabla más sobre la que se pueden
realizar consultas y acciones DML (Data Management Language), es decir, acciones de
borrado, actualización e inserción de datos. Sin embargo, una vista no es una tabla sino
que cada vez que se accede a una vista se realiza la consulta que tiene asociada.

Las funciones principales de las vistas son:

• Realizar un acceso restringido a los datos de una BD.

• Crear una consulta compleja sobre varias tablas a la que se accede a menudo y
asignarle un nombre para utilizarla posteriormente.

• Proveer distintas formas de acceder a los datos dependiendo del usuario que realice el
acceso.

Para poder crear una vista es necesario que el usuario tenga el permiso CREATE VIEW.
La siguiente instrucción sirve para dar este permiso a un usuario llamado nombreusuario.

GRANT CREATE VIEW TO nombreusuario;

En la sección 2 de este tema se explica más detalladamente cómo realizar la gestión de


permisos a los usuarios de una base de datos y cómo conceder y denegar permisos sobre
tablas y vistas.

La sintaxis para crear una vista es la siguiente:

CREATE OR REPLACE [FORCE | NOFORCE] VIEW nombrevista


[(aliascolumnas)]
AS instrucción_SELECT
[WITH CHECK OPTION [CONSTRAINT nombrerestricción]]
[WITH READ ONLY [CONSTRAINT nombrerestricción]] ;

• FORCE | NOFORCE
Esta opción se utiliza para que se fuerce o no la creación de una vista si no existen las
tablas sobre las que está definida. La opción por defecto es NOFORCE de forma que
solamente se crea la vista si existen las tablas.

• aliascolumnas
Los alias se utilizan para asignar nombres a los elementos de la lista de selección de la
consulta sobre la que se crea la vista. Si no se especifican alias, se asignan los nombres
indicados en la lista de selección en la instrucción SELECT. En el caso de querer utilizar
alias hay que asignar nombres a todos los elementos de la lista de selección antes de
la instrucción SELECT y estos nombres hay que separarlos por ‘,’.

©Yolanda Marhuenda 1/9


Seguridad y autorización

• WITH CHECK OPTION


Con esta opción se obliga a que solamente se puedan insertar o modificar registros de
una vista si una vez realizada la acción (inserción o modificación) estos registros son
también accesibles por la vista. De esta forma se asegura que las operaciones de
inserción y actualización que se realicen a través de la vista nunca generen registros
que no puedan ser seleccionados por la vista.

• WITH READ ONLY


Con esta opción se indica que los datos de la vista son exclusivamente de lectura.

Toda la información sobre las vistas creadas por un usuario se almacena en una vista del
sistema denominada USER_VIEWS. En la Figura 1 se muestran los campos que contiene
esta vista.

Figura 1: Estructura de USER_VIEWS.

Para eliminar una vista se utiliza la instrucción

DROP VIEW nombrevista;

Hay que tener en cuenta que cuando se realizan operaciones DML sobre una vista se
modifican los datos en la base de datos. Dependiendo del tipo de acción que se quiera
realizar sobre una vista hay que tener en cuenta lo siguiente:

• Eliminar registros (DELETE)


No se puede cuando la consulta en la que está basada la vista tiene:
o Funciones de agregado: SUM, AVG, MAX,…
o GROUP BY
o DISTINCT

• Modificar datos (UPDATE)


No se puede
o En los mismos casos del DELETE.
o Cuando contenga columnas formadas por expresiones (Por ejemplo: salario*1.1)

©Yolanda Marhuenda 2/9


Seguridad y autorización

• Insertar registros (INSERT)


No se puede
o En los mismos casos del UPDATE.
o Cuando la tabla en la que está basada la vista contiene columnas definidas con
NOT NULL que no tienen asignado un valor por defecto y estas columnas no son
seleccionadas por la vista.

Se pueden distinguir dos tipos de vistas:

• Simples: Seleccionan los datos de una única tabla y no contienen funciones referentes
a grupos de registros ni utilizan GROUP BY. Sobre estas vistas siempre se pueden
realizar operaciones DML.

• Complejas: Seleccionan los datos de más de una tabla, pueden contener funciones
sobre grupos de registros y no siempre permiten realizar acciones DML. Para poder
llevar a cabo las instrucciones DML se utilizan disparadores del tipo INSTEAD OF.

A continuación, se muestran diversos ejemplos de vistas creadas sobre una base de datos
referente a los departamentos de una empresa y los empleados que pertenecen a cada
departamento.

dni código nombre


nombre

PERTENECER

apellido1 EMPLEADO DEPARTAMENTO

fechanac salario

DEPARTAMENTO(código, nombre)
C.P.: código

EMPLEADO(dni, nombre, apellido1, fechanac, salario, depto)


C.P.: dni
C.Ajena: depto  DEPARTAMENTO

Ejemplo 1: Vista simple

En este ejemplo se crea una vista llamada EMPLEADO_INF que solamente tiene acceso
al DNI, nombre y primer apellido de los empleados del departamento de Informática. El
código de este departamento es INF.

©Yolanda Marhuenda 3/9


Seguridad y autorización

CREATE OR REPLACE VIEW EMPLEADO_INF


AS SELECT dni, nombre, apellido1
FROM EMPLEADO
WHERE depto = 'INF';

Ejemplo 2: Vista compleja

La vista RESUMEN_DEPTOS obtiene para cada departamento el código, nombre, número


de empleados y salario total que se paga a sus empleados y se quiere que estas dos últimas
columnas se llamen total_empleados y total_salarios, respectivamente.

Aunque solo se pide asignar nombre a las dos últimas columnas de la instrucción SELECT,
debemos asignar alias para todos los elementos, según se ha especificado anteriormente
en la definición de la sintaxis de la creación de vistas (página 1).

CREATE OR REPLACE VIEW RESUMEN_DEPTOS


(codigo, nombre, total_empleados, total_salarios)
AS SELECT codigo, D.nombre, COUNT(*), SUM(salario)
FROM EMPLEADO, DEPARTAMENTO D
WHERE depto = codigo
GROUP BY codigo, D.nombre;

Ejemplo 3: Vista con WITH CHECK OPTION

La siguiente vista contiene los empleados nacidos entre los años 1980 y 1990.

CREATE OR REPLACE VIEW EMPLEADO_19801990


AS SELECT *
FROM EMPLEADO
WHERE TO_NUMBER(TO_CHAR(fechanac,'YYYY')) BETWEEN 1980 AND 1990
WITH CHECK OPTION CONSTRAINT anonac_19801990;

Al utilizar la opción WITH CHECK OPTION si se intenta asignar una fecha de nacimiento
con un valor que incumpla la condición especificada en la consulta, el SGBD no lo permite
ya que entonces el registro resultante no sería seleccionado por la vista.

©Yolanda Marhuenda 4/9


Seguridad y autorización

2. Usuarios y privilegios
El administrador de la BD es la autoridad que gestiona el sistema de BD. Entre las acciones
que puede realizar se encuentran las relacionadas con la gestión de cuentas/usuarios y la
gestión de privilegios y roles.

En este apartado se introducen las instrucciones SQL necesarias para tratar este tipo de
acciones.

2.1. Gestión de cuentas/usuarios

La sintaxis general para crear un usuario es

CREATE USER nombreusuario IDENTIFIED BY contraseña;

Los usuarios administradores pueden crear usuarios. Si se quiere que un usuario pueda
crear usuarios debe tener al menos el permiso CREATE USER, en caso contrario no podrá
crear usuarios.

El diccionario de datos de una BD contiene, entre otros elementos, vistas para acceder a
información referente a la gestión de usuarios. Las vistas relacionadas con los usuarios son
DBA_USERS, ALL_USERS y USER_USERS.

La vista DBA_USERS, contiene información sobre los usuarios creados. Solamente los
usuarios con permisos de administrador pueden crear, borrar, consultar esta vista y
modificar los usuarios. En la Figura 2 se muestran los campos de esta vista.

Figura 2: Estructura de DBA_USERS.

La vista ALL_USERS puede ser consultada por cualquier usuario y obtiene los usuarios
que puede ver. En la Figura 3 se muestra la estructura de esta vista.

Figura 3: Estructura de ALL_USERS.

©Yolanda Marhuenda 5/9


Seguridad y autorización

La vista USER_USERS contiene información sobre cada usuario.

Algunas acciones de gestión que se puede realizar sobre los usuarios son la eliminación y
la modificación de sus datos.

Para eliminar un usuario se utiliza la instrucción:

DROP USER nombreusuario;


DROP USER nombreusuario CASCADE;

Para modificar los datos de los usuarios se utiliza la instrucción ALTER USER. Entre otras
acciones esta instrucción permite:

• Bloquear (LOCK) o desbloquear (UNLOCK) la cuenta de un usuario

ALTER USER nombreusuario ACCOUNT LOCK | UNLOCK ;

• Modificar la contraseña de un usuario

ALTER USER nombreusuario IDENTIFIED BY nuevacontraseña;

Por otro lado, un usuario puede gestionar qué objetos que ha creado: tablas, restricciones,
funciones, procedimientos,… consultando la vista USER_OBJECTS. En la Figura 4 se
muestran los campos de esta vista.

Figura 4: Estructura de USER_OBJECTS.

Para conocer los objetos que un usuario ha creado y de qué tipo son puede realizar la
siguiente consulta:

SET PAGESIZE 60
COLUMN OBJECT_NAME FORMAT A50

SELECT OBJECT_NAME, OBJECT_TYPE FROM USER_OBJECTS;

En el código anterior se han utilizado dos instrucciones antes de la consulta para mejorar
la salida por pantalla. Con la instrucción SET PAGESIZE 60 establecemos el número de

©Yolanda Marhuenda 6/9


Seguridad y autorización

líneas por página a 60 (de forma que si la consulta devuelve más de 60 registros se repiten
los nombres de las columnas como encabezado de página) y con la instrucción COLUMN
aplicamos al campo OBJECT_NAME de la consulta un formato alfanumérico de longitud de
40 en vez de 120, que es el tamaño que tiene asignado este campo en la vista
USER_OBJECT.

2.2. Gestión de privilegios

Los usuarios de una BD pueden disponer de diferentes tipos de privilegios o permisos para
tener acceso a diferentes datos y/o realizar acciones en una BD. Los roles se utilizan para
agrupar privilegios y/o otros roles. Constituyen una forma de agrupar un conjunto de
múltiples privilegios o roles bajo un nombre.

Las vistas DBA_ROLES, DBA_ROLE_PRIVS, DBA_SYS_PRIVS y DBA_TAB_PRIVS


contienen información relacionada con roles y privilegios y solamente pueden ser
consultadas por usuarios con permisos de administrador. La información que se guarda en
cada una de ellas es

• DBA_ROLES: roles definidos


• DBA_ROLE_PRIVS: roles asignados a cada usuario
• DBA_SYS_PRIVS: privilegios asignados a cada rol
• DBA_TAB_PRIVS: privilegios que un usuario concede a otros sobre sus
tablas.

En las Figuras 5 - 8 se muestran los campos de cada una de estas vistas.

Figura 5. Estructura de DBA_ROLES.

Figura 6. Estructura de DBA_ROLE_PRIVS.

Figura 7. Estructura de DBA_SYS_PRIVS.

©Yolanda Marhuenda 7/9


Seguridad y autorización

Figura 8. Estructura de DBA_TAB_PRIVS.

Un usuario pueden saber cuál es la información relacionada con sus roles y privilegios
consultando las vistas USER_ROLE_PRIVS, USER_SYS_PRIVS y USER_TAB_PRIVS.

Algunos de los privilegios y roles definidos en el sistema son:


- SELECT, UPDATE, DELETE, INSERT (para tablas y vistas)
- CREATE TABLE, CREATE VIEW,…
- CREATE USER, CREATE SESSION,…
- CONNECT
- RESOURCE
- ALL
- DBA (permisos de administrador)
- …

Para conceder privilegios y roles a un usuario se utiliza la instrucción GRANT.

GRANT privilegios TO nombreusuarios;

GRANT privilegios ON tablas,vistas TO nombreusuarios;

El texto nombreusuarios se refiere a los nombres de todos los usuarios a los que se dan
privilegios separados por “,”.

En el segundo caso se dan permisos sobre tablas o vistas a los usuarios que se
especifiquen. En esta instrucción se puede añadir al final el texto WITH GRANT OPTION,
de forma que se permite que al usuario al que conceden los permisos pueda a su vez
conceder este permiso sobre el recurso (tabla o vista) a otros usuarios.

Ejemplo 4: Concesión de privilegios y roles

Conceder el rol de conexión y privilegios de creación de usuarios, tablas y vistas al


USUARIO1.

GRANT CONNECT, CREATE USER, CREATE TABLE, CREATE VIEW TO USUARIO1;

Conceder permisos de consulta sobre la tabla EMPLEADO al USUARIO2.

GRANT SELECT ON EMPLEADO TO USUARIO2;

Conceder permisos de consulta y actualización sobre la tabla EMPLEADO a los usuarios


USUARIO3 y USUARIO4.

©Yolanda Marhuenda 8/9


Seguridad y autorización

GRANT SELECT,UPDATE ON EMPLEADO TO USUARIO3,USUARIO4;

Cuando un usuario tiene permisos de acceso sobre una vista/tabla de otro usuario puede
acceder a este recurso indicando delante del nombre de la vista o tabla, el nombre del
usuario propietario de la misma y un “.”. Por ejemplo, si USUARIO1 ha compartido con el
USUARIO2 la tabla EMPLEADO con permiso de consulta, USUARIO2 consultará esta
información de la siguiente forma:

SELECT * FROM USUARIO1.EMPLEADO;

Para quitar privilegios o roles a un usuario se utiliza la instrucción:

REVOKE privilegios FROM nombreusuario;

REVOKE privilegios ON tablas,vistas FROM nombreusuario;

Ejemplo 5: Revocar privilegios o roles

REVOKE CREATE VIEW FROM USUARIO1;

REVOKE SELECT ON EMPLEADO FROM USUARIO2;

3. Copias de seguridad
La versión de Oracle instalada dispone de menús para realizar copias de seguridad
(Backup) de la BD y restaurarla (Restore Database). Al realizar la copia de seguridad
utilizando los menús se muestra una ventana con los comandos que se van ejecutando
para llevar a cabo la acción.

©Yolanda Marhuenda 9/9

También podría gustarte