Tema 14 Gestion de Seguridad

45
Formación 2002. Tema 14. Gestión de Seguridad. TEMA 14 GESTIÓN DE SEGURIDAD 1. Usuarios. 2. Privilegios. 3. Roles. 4. Perfiles. 5. Gestión de Tablespaces. 6. Secuencias. 7. Indices. 8. Clusters. Prácticas de Diseño y Gestión de Bases de Datos Page 1 of 45

Transcript of Tema 14 Gestion de Seguridad

Page 1: Tema 14 Gestion de Seguridad

Formación 2002. Tema 14. Gestión de Seguridad.

TEMA 14GESTIÓN DE SEGURIDAD

1. Usuarios.2. Privilegios.3. Roles.4. Perfiles.5. Gestión de Tablespaces.6. Secuencias.7. Indices.8. Clusters.

Prácticas de Diseño y Gestión de Bases de Datos Page 1 of 31

Page 2: Tema 14 Gestion de Seguridad

Formación 2002. Tema 14. Gestión de Seguridad.

La gestión de seguridad tiene mucho que ver con la gestión de usuarios y con la asignación de permisos.

Podemos clasificar la seguridad de la base de datos en dos categorías:

o Seguridad del sistema: Mecanismos que controlan el acceso a la base de datos a nivel del sistema. Por ejemplo, cada vez que un usuario se conecta a la base de datos, los mecanismos de seguridad comprobarán si tienen acceso a la base de datos.

o Seguridad de los datos: Mecanismos que controlan el acceso y uso de la base de datos a nivel de objetos. Por ejemplo, cada vez que un usario acceda a un obejto de la base de datos (tablas, vistas..), los mecanismos de seguridad comprobarán si el usuario puede acceder a ese objeto, y qué tipo de operación puede realizar con él. (INSERT, SELECT).

1. USUARIOS

Un usuario es un nombre definido en la base de datos que se puede conectar a ella y acceder a determinados objetos según ciertas condiciones que define el administrador.

Para acceder a la base de datos, los usuarios ejecutan una aplicación como puede ser SQL*PLUS, y se conectan usando el nombre definido en la base de datos.

Asociado a cada usuario de la base de datos existe un esquema con el mismo nombre.

Un esquema es una colección lógica de objetos (tablas, vistas....). Por defecto un usuario tiene acceso a todos los objetos de su esquema correspondiente, y puede acceder a los objetos de otro usuario siempre y cuando este otro haya concedido el privilegio de hacerlo.

1.1 Creación de Usuarios.

Prácticas de Diseño y Gestión de Bases de Datos Page 2 of 31

Page 3: Tema 14 Gestion de Seguridad

Formación 2002. Tema 14. Gestión de Seguridad.

Al instalar la base de datos Oracle se crean automáticamente dos usuarios con el privilegio de adminsitrador de la base de datos (DBA). Son:

o SYS, cuya password inicial es CHANGE_ON_INSTALL.o SYSTEM, cuya password inicial es MANAGER.

El usuario SYS es el propietario de las tables del diccionario de datos. En el diccionario de datos se almacena información sobre la base de datos. Ningún usuario, aunque sea administrador, puede modificar las tablas de SYS. Sólo nos conectaremos con SYS cuando las instrucciones de Oracle lo exijan.

El diccionario de datos está formado por un conjunto de tablas y vistas en el tablespace SYSTEM. Los usuarios tienen acceso de solo lectura a las vistas de este diccionario. Contiene objetos de la base de datos, nombres de usarios, derechos y autorizaciones, restricciones, información sobre espacio libre y ocupado...

Los objetos del diccionario se encuentran en la vista DICTIONARY, que es propiedad del usuario SYS.

SQL> DESC DICTIONARY;

Name Null? Type ----------------------------------------------------- -------- ------------------------------------ TABLE_NAME VARCHAR2(30) COMMENTS VARCHAR2(4000)

Escribir lo siguiente:SQL> SELECT TABLE_NAME FROM DICTIONARY;

Prefijos:

Vistas USER Y ALL: Accesible a todos los usarios. Vistas DBA: Sólo el administrador puede utilizar esas vistas.

El usario SYSTEM es creado por Oracle para realizar las tareas de administración de la base de datos. No se suelen crear tablas de usuario en el esquema de SYSTEM. Para crear otros usuarios es preciso conectarse como usuario SYSTEM, ya que éste posee los suficientes privilegios. Al instalar Oracle, el administrador de la base ha de crearse un usuario para sí mismo con los derechos de administrador y realizar todas las tareas de administración con este nombre de usuario. Para crear usuarios se necesita el privilegio CREATE USER

Prácticas de Diseño y Gestión de Bases de Datos Page 3 of 31

Page 4: Tema 14 Gestion de Seguridad

Formación 2002. Tema 14. Gestión de Seguridad.

Sintáxis:CREATE USER nombre_usuarioIDENTIFIED BY clave_acceso[DEFAULT TABLESPACE espacio_tabla][TEMPORARY TABLESPACE espacio_tabla][QUOTA {entero {K|M} | UNLIMITED} ON espacio_tabla][PROFILE perfil]

CREATE USER crea un nombre de usuario para identificarlo por el sistema. IDENTIFIED BY, permite dar una clave de acceso al usuario creado. DEFAULT TABLESPACE asigna a un usuario el tablespace por defecto para

almacenar los objetos que cree. Si no se asigna ninguno el tablspace será SYSTEM.

TEMPORARY TABLESPACE especifica el nombre del tablespace oara trabajos temporales. Si no se especifica ninguno, el tablespace por defecto es SYSTEM. Es recomendable usar otro tablespace para evitar almacenar en SYSTEM

QUOTA: Asigna un spacio en megabytes o kilobytes en el tablespace asignado. Si no se especifica, el usuario no tiene cuota asignada y no podrá crear objetos en el tablespace.

PROFILE: Asigna un perfil al usuario. Un perfil limita el número de sesiones concurrentes de usuario, limita el tiempo de uso de CPU, tiempo de una sesión, desconecta al usuario si se sobrepasa del tiempo.

Conectar con SQL*PLUS con SYSTEM/MANAGER

SQL> SELECT USERNAME, DEFAULT_TABLESPACE FROM DBA_USERS;USERNAME DEFAULT_TABLESPACE------------------------------------------------------------------------------------SYS SYSTEMSYSTEM USERSOUTLN SYSTEMDBSNMP SYSTEMMTSSYS SYSTEMAURORA$ORB$UNAUTHENTICATED SYSTEMSCOTT USERSDEMO SYSTEMORDSYS SYSTEMORDPLUGINS SYSTEMMDSYS SYSTEMCTXSYS SYSTEMFORM FORMDATA

13 rows selected.

Prácticas de Diseño y Gestión de Bases de Datos Page 4 of 31

Page 5: Tema 14 Gestion de Seguridad

Formación 2002. Tema 14. Gestión de Seguridad.

Podemos observer los diferentes usuarios que existen.Nuestra tablespace es FORMDATA

Para crear un usuario procederemos escribiendo lo siguiente:(fichero usuario.sql)SQL> CREATE USER F01 IDENTIFIED BY F01

DEFAULT TABLESPACE FORMDATAQUOTA 500K ON FORMDATATEMPORARY TABLESPACE FORMDATA;

User created.

SQL> DESC SYS.ALL_USERS; Name Null? Type ----------------------------------------------------- -------- ------------------------------------ USERNAME NOT NULL VARCHAR2(30) USER_ID NOT NULL NUMBER CREATED NOT NULL DATE

La tabla ALL_USERS nos muesta información sobre todos los usuarios. Se encuentra en la tablespace SYS.

SQL> SELECT * FROM ALL_USERS;

USERNAME USER_ID CREATED----------------------------------------------------------- --------- -------------------SYS 0 01-MAR-99SYSTEM 5 01-MAR-99OUTLN 11 01-MAR-99DBSNMP 20 01-MAR-99MTSSYS 28 01-MAR-99AURORA$ORB$UNAUTHENTICATED 25 01-MAR-99SCOTT 26 01-MAR-99DEMO 27 01-MAR-99ORDSYS 30 01-MAR-99ORDPLUGINS 31 01-MAR-99MDSYS 32 01-MAR-99CTXSYS 35 01-MAR-99FORM 37 14-JUN-01F01 40 30-JUN-01

14 rows selected.

1.2 Modificación de Usuarios.

Sintáxis:

Prácticas de Diseño y Gestión de Bases de Datos Page 5 of 31

Page 6: Tema 14 Gestion de Seguridad

Formación 2002. Tema 14. Gestión de Seguridad.

ALTER USER nombre_usuarioIDENTIFIED BY clave_acceso[DEFAULT TABLESPACE espacio_tabla][TEMPORARY TABLESPACE espacio_tabla][QUOTA {entero {K|M} | UNLIMITED} ON espacio_tabla][PROFILE perfil];

Modifiquemos la tablespace por defecto creada en el ejercicio anterior. Para modificar un usuario no basta con ejecutar el comando ALTER, sino

también hay que tener ciertos permisos. Por ejemplo, cuando creamos un usario tenemos que darle privilegios, para que

como minimo, pueda iniciar sesión en la base de datos.

(fichero usuario2.sql)

CREATE USER F02 IDENTIFIED BY F02 DEFAULT TABLESPACE FORMDATAQUOTA 500K ON FORMDATATEMPORARY TABLESPACE FORMDATA;

GRANT CREATE SESSION TO F02;

Si intentamos conectarnos a la base de datos con el usuario F01 no podremos, mientras que con el usuario F02 si podremos.

SQL> CONNECT F01/F01ERROR:ORA-01045: user F01 lacks CREATE SESSION privilege; logon denied

Warning: You are no longer connected to ORACLE.SQL> CONNECT F02/F02Connected.

Por tanto para modificar un usario hay que tener ciertos permisos. No basta sólo con el comando ALTER.

1.3 Borrado de Usuarios.

Sintáxis:DROP USER usurio [CASCADE];

Prácticas de Diseño y Gestión de Bases de Datos Page 6 of 31

Page 7: Tema 14 Gestion de Seguridad

Formación 2002. Tema 14. Gestión de Seguridad.

La opción CASCADE eleimina todos los objetos del usuario antes de borrar al usuario.

Para ver las tablas de un usuario hacemos lo siguiente:o Conectarnos con los permisos de administrador.o Usar la tabla DBA_TABLES.

(fichero tablas.sql)

CONNECT SYSTEM/MANAGER;SELECT OWNER, TABLE_NAME FROM DBA_TABLES WHERE OWNER='FORM';

OWNER TABLE_NAME------------------------------ ------------------------------FORM ARTICULOSFORM CLIENTESFORM PROVEEDORESFORM TIENDASFORM VENTAS

Supongamos que al usuario F02 le damos permisos para crear tablas con la siguiente instruccción:

SQL > CONNECT SYSTEM/MANAGERSQL> GRANT DBA TO F02;

Supongamos que creamos una tabla llamada PRUEBA en el usuario F02.

SQL> CONNECT F02/F02;SQL> CREATE TABLE PRUEBAS (

prb_num INTEGER NOT NULL,prb_apell CHAR(10),prb_nom CHAR(10),prb_pais CHAR(1),prb_pob CHAR(10));

Para borrar a un usuario no podemos estar conectado con ese usuario.

SQL>CONNECT SYSTEM/MANAGER

SQL> DROP USER F02;DROP USER F02*ERROR at line 1:

Prácticas de Diseño y Gestión de Bases de Datos Page 7 of 31

Page 8: Tema 14 Gestion de Seguridad

Formación 2002. Tema 14. Gestión de Seguridad.

ORA-01922: CASCADE must be specified to drop 'F02'

Y para borrar al usuario tenemos que borrar todas sus tables antes.

SQL> DROP USER F02 CASCADE;

User dropped.

2. PRIVILEGIOS

Un privilegio es la capacidad de un usuario dentro de la base de datos de realizar determinadas operaciones o acceder a determinados objetos de otros usuarios.

Ningún usuario puede llevar a cabo una operación si antes no se le ha concedido permiso.

Mediante la asignación de privilegios se permite o restringe el acceso a los datos o la realización de cambios en los datos...

Cuando se crea un usuario, es necesario darles privilegios para que pueda hacer algo.

Oracle ofrece varios ROLES o FUNCIONES:o CONNECTo RESOURCEo DBAo EXP_FULL_DATABASEo IMP_FULL_DATABASE

Un rol está formado por un conjunto de privilegios.

Prácticas de Diseño y Gestión de Bases de Datos Page 8 of 31

Page 9: Tema 14 Gestion de Seguridad

Formación 2002. Tema 14. Gestión de Seguridad.

ROLES (FUNCIONES) PRIVILEGIOSCONNECT ALTER SESSION, CREATE CLUSTER, CREATE DATABASE LINK,

CREATE SEQUENCE, CREATE SESSION, CREATE SYNONYM, CREATE TABLE, CREATE VIEW.

RESOURCE CREATE CLUSTER, CREATE PROCEDURE, CREATE TABLE, CREATE SEQUENCE, CREATE TRIGGER.

DBA Posee todos los privilegios del sistema.

EXP_FULL_DATABASE SELECT ANY TABLE, BACKUP ANY TABLE, INSERT, UPDATE, DELETE sobre las tablas SYS.INCVID, SYS.INCFIL, SYS.INCEXP.

IMP_FULL_DATABASE BECOME USER

Los dos últimos permiten exportaciones e importaciones de la base de datos completa.

Hat dos tipos de privilegios en una base de datos:o Privilegios sobre los objetos.o Privilegios del sistema.

2.1 Privilegios sobre los objetos.

Estos privilegios nos permiten acceder y realizar cambios en los datos de otros usuarios.

PRIVILEGIOS Tabla Vista Secuencia ProcedureALTER X XDELETE X XEXECUTE XINDEX XINSERT X XREFERENCES XSELECT X X XUPDATE X X

Sintáxis:GRANT {[priv_objeto [,priv_objeto]...ALL [PRIVILEGES]}

[(columna [,columna]...)]ON [usuario.]objetoTO {usuario|rol|PUBLIC} [, {usuario|rol|PUBLIC}...][WITH GRANT OPTION];

Prácticas de Diseño y Gestión de Bases de Datos Page 9 of 31

Page 10: Tema 14 Gestion de Seguridad

Formación 2002. Tema 14. Gestión de Seguridad.

ON especifica el objeto sobre el que se quieren dar los privilegios. TO identifica a los usuarios o roles a los que se conceden los privilegios. ALL concede todos los privilegios sobre el objeto especificado. WITH GRANT OPTION permite que el receptor del privilegio o rol se los asigne

a otros usuarios o roles. PUBLIC asigna los privilegios a todos los usuarios actuales y futuros. El objetivo

de PUBLIC es garantizar el acceso a determinados objetos a todos los usuarios de la base de datos.

Ejemplos:Supongamos que tenemos el usuario FORM/F2002, y el usuario F02/F02.Supongamos que estamos conectado como SYSTEM/MANAGER.Vamos a permitir que el usuario F02 pueda leer las tablas del usuario FORM.Para que el usuario F02 pueda leer tablas de FORM, es el usuario FORM el que asigna permisos.Por tanto:CONNECT FORM/F2002GRANT SELECT ON CLIENTES TO F02;GRANT SELECT ON ARTICULOS TO F02;GRANT SELECT ON TIENDAS TO F02;GRANT SELECT ON PROVEEDORES TO F02;GRANT SELECT ON VENTAS TO F02;

Ahora si nos conectamos como F02, podremos leer las tablas del usuario FORM.SQL> CONNECT F02/F02;Connected.SQL> SELECT * FROM FORM.CLIENTES;

CLT_NUM CLT_APELL CLT_NOM C CLT_POB-----------------------------------------------------------------

1 BORRAS Margarita E MADRID 2 PEREZ Miguel E MADRID 3 DUPONT Jean F PARIS 4 DUPRET Michel F LYON 5 LLOPIS Antoni E BARCELONA 6 SOURIS Marcel F PARIS 7 GOÑI Pablo E PAMPLONA 8 COURBON Gerard F LYON 9 ROMAN Consuelo E JAEN 10 ROCA Pau E GERONA 11 MANCHA Jorge E VALENCIA 12 CURRO Pablo E BARCELONA 13 CORTES Diego E MADRID 14 FERNANDEZ Joaquin E MADRID 15 DURAN Jacinto E PAMPLONA 16 MINGUIN Pedro E PAMPLONA

16 rows selected.

Prácticas de Diseño y Gestión de Bases de Datos Page 10 of 31

Page 11: Tema 14 Gestion de Seguridad

Formación 2002. Tema 14. Gestión de Seguridad.

Si ahora escribimos:

SQL> INSERT INTO FORM.CLIENTES VALUES (17,'CESAR','Jose','E','SEVILLA');INSERT INTO FORM.CLIENTES VALUES (20,'CESAR','Jose','E','SEVILLA') *ERROR at line 1:ORA-01031: insufficient privileges

Vemos que no tenemos los suficientes privilegios, porque antes hemos dado sólo permisos de lectura.

GRANT ALL ON nombre_tabla TO PUBLIC; Con esto el usuario con el que estemos conectado concede todos los privilegios

sobre la tabla nombre_tabla a todos los usuarios, incluso a los que se creen despues de ejecutar la orden.

SQL> CONNECT FORM/F2002;SQL> GRANT ALL ON CLIENTES TO PUBLIC;

Grant succeeded.

SQL> GRANT UPDATE (vnt_tda) ON VENTAS TO F02;

Grant succeeded.

Ahora con la primera sentencia damos todos los permisos a todos los usuarios para que en la tabla CLIENTES.

Con la segunda sentencia estamos permitiendo que el usuario F02 pueda actualizar los datos de la columna vnt_tda de la tabla ventas.

Con la opción WITH GRANT OPTION el usuario al que se le concede los permisos, puede darle permisos a otro usuario.

2.2. Privilegios del sistema

Los privilegios del sistema son los que dan derecho a ejecutar un tipo de comando SQL o a realizar alguna acción sobre objetos de un tipo especificado.

Existen unos 80.Veremos algunos de ellos en la siguiente tabla.

PRIVILEGIOS DEL SISTEMA OPERACIONES AUTORIZADAS

Prácticas de Diseño y Gestión de Bases de Datos Page 11 of 31

Page 12: Tema 14 Gestion de Seguridad

Formación 2002. Tema 14. Gestión de Seguridad.

AUDITAUDIT ANY Auditar un objeto de la base de datos.

CLUSTERCREATE CLUSTER Crear un cluster en el propio esquema.

CREATE ANY CLUSTER Crear un cluster en cualquier esquema.

ALTER ANY CLUSTER. Modificar cualquier cluster en la base de datos.

DROP ANY CLUSTER Borrar cualquier cluster en la base de datos.

DATABASEALTER DATABASE Modificar la base de datos, añadiéndole ficheros.

CREATE DATABASE LINK Crear enlaces privados para acceder a otra base.

CREATE PUBLIC DATABASE LINK Crear links públicos para acceder a otra base de datos.

INDEXCREATE ANY INDEX Crear un índice en cualquier esquema en cualquier tabla

ALTER ANY INDEX Modificar cualquier índice de la base de datos.

DROP ANY INDEX Borrar cualquier índice de la base de datos.

PRIVILEGEGRANT ANY PRIVILEGE Conceder cualquier privilegio en el sistema.

PROCEDURECREATE ANY PROCEDURE Crear procedimientos almacenados, funciones y paquetes

en cualquier esquema

CREATE PROCEDURE Crear procedimientos almacenados, funciones y paquetes en nuestro esquema.

ALTER ANY PROCEDURE Modificar procedimientos almacenados, funciones y paquetes en cualquier esquema.

DROP ANY PROCEDURE Borrar procedimientos almacenados, funciones y paquetes en cualquier esquema

EXECUTE ANY PROCEDURE Ejecutar procedimientos almacenados, funciones o referencias a paquetes públicos en cualquier esquema

PROFILECREATE PROFILE Crear un perfil de usuario.

ALTER PROFILE Modificar un perfil de usuario.

DROP PROFILE Borrar cualquier perfil.

ROLECREATE ROLE Crear roles.

ALTER ANY ROLE Modificar roles.

DROP ANY ROLE Borrar cualquier rol.

GRANT ANY ROLE Dar permisos para cualquier rol de la base.

ROLLBACK_SEGMENTCREATE ROLLBACK SEGMENT Crear segmentos rollback.

ALTER ROLLBACK SEGMENT Modificar segmentos de rollback.

DROP ROLLBACK SEGMENT Eliminar segmentos de rollback.

Prácticas de Diseño y Gestión de Bases de Datos Page 12 of 31

Page 13: Tema 14 Gestion de Seguridad

Formación 2002. Tema 14. Gestión de Seguridad.

SEQUENCECREATE SEQUENCE Crear secuencias en nuestro esquema.

ALTER ANY SEQUENCE Modificar cualquier secuencia de la base.

DROP ANY SEQUENCE Borrar secuencias de cualquier esquema.

SELECT ANY SEQUENCE Referenciar secuencias de cualquier esquema.

SESSIONCREATE SESSION Conectarnos a la base de datos.

ALTER SESSION Manejar la orden ALTER SESSION

RESTRICTED SESSION Conectarnos a la base de datos cuando se ha levantado con STARTUP RESTRICT.

SYNONYMCREATE SYNONYM Crear sinónimos en nuestro esquema.

CREATE PUBLIC SYNONYM Crear sinónimos públicos.

DROP PUBLIC SYNONYM Borrar sinónimos públicos.

CREATE ANY SYNONYM Crear sinónimos en cualquier esquema.

DROP ANY SYNONYM Borrar sinónimos en cualquier esquema.

TABLECREATE TABLE Crear tablas en nuestro esquema y generar índices sobre

las tablas del esquema.

CREATE ANY TABLE Crear una tabla en cualquier esquema.

ALTER ANY TABLE Modificar una tabla en cualquier esquema.

DROP ANY TABLE Borrar una tabla en cualquier esquema.

LOCK ANY TABLE Bloquear una tabla en cualquier esquema.

SELECT ANY TABLE Hacer SELECT en cualquier tabla.

INSERT ANY TABLE Insertar filas en cualquier tabla.

UPDATE ANY TABLE Modificar filas en cualquier tabla.

DELETE ANY TABLE Borrar filas en cualquier tabla.

TABLESPACESCREATE TABLESPACES Crear espacios de tablas.

ALTER TABLESPACES Modificar tablespaces.

MANAGE TABLESPACES Poner on/off line a cualquier tablespace.

DROP TABLESPACES Eliminar tablespaces.

UNLIMITED TABLESPACES Utilizar cualquier espacio de cualquier tablespace.

TRIGGERSCREATE ANY TRIGGER Crear triggers en cualquier esquema de la base.

ALTER ANY TRIGGER Activar o desactivar cualquier trigguer.

DROP ANY TRIGGER Eliminar triggers de cualquier esquema.

CREATE TRIGGER Crear triggers en nuestro esquema.

USER

Prácticas de Diseño y Gestión de Bases de Datos Page 13 of 31

Page 14: Tema 14 Gestion de Seguridad

Formación 2002. Tema 14. Gestión de Seguridad.

CREATE USER Crear usuarios y crear cuotas sobre cualquier espacio de tablas, establecer espacios de tablas por omisión y temporales.

ALTER USER Modificar cualquier usuario.Este privilegio autoriza a quien lo reci be a cambiar la contraseña de otro usuario, a cambiar cuotas sobre cualquier espacio de tablas, a establecer espacios de tablas por omisión, etc.

DROP USER Eliminar usuarios.

VIEWCREATE VIEW Crear vistas en el esquema propio.

CREATE ANY VIEW Crear vistas en cualquier esquema.

DROP ANY VIEW Borrar vistas en cualquier esquema.

Sintáxis:GRANT {privilegio|rol} [, {privilegio|rol}...]TO {usuario|rol|PUBLIC} [, {usuario|rol|PUBLIC}] ….[WITH ADMIN OPTION];

TO identifica los usuarios o roles a los que se les conceden privilegios. La cláusula WITH ADMIN OPTION permite que el receptor del privilegio o rol

pueda conceder esos mismos privilegios a otros usuarios o roles..

Ejemplo: Cuando creamos un usuario, no sólo basta con crear el usuario, sino tb tenemos

que asiganr permisos de conexión. Sabemos que la conexión es un rol (CONNECT). Podemos dar el rol CONNECT de la siguiente forma:

o GRANT CONNECT TO usuario;o GRANT CREATE SESSION TO usuario;

La diferencia entre CREATE SESSION Y CONNECT es que CREATE SESSION nos permite conectarnos, pero CONNECT además de conectarnos permite:

ALTER SESSION CREATE CLUSTER CREATE DATABASE LINK CREATE SEQUENCE CREATE SESSION CREATE SYNONYM

Prácticas de Diseño y Gestión de Bases de Datos Page 14 of 31

Page 15: Tema 14 Gestion de Seguridad

Formación 2002. Tema 14. Gestión de Seguridad.

CREATE TABLE CREATE VIEW.

Supongamos que deseamos dar el permiso de administrador a un usuario:

GRANT dba TO usuario;

Para entender estos ejemplos basta con seguir la tabla de Roles que vimos varias páginas atrás.

Estos ejemplos que hemos visto es referente a roles, pero veamos alguno referente a privilegios del sistema:

Por ejemplo, para hacer que el usuario F02, pueda borrar usuarios y además conceder ese privilegio a otros usuarios:

SQL> CONNECT SYSTEM/MANAGERConnected.SQL> GRANT DROP USER TO F02 WITH ADMIN OPTION;

Grant succeeded.

Nos conectaremos como adminstardor y daremos privilegios.

2.2 Retirada de Permisos

Al igual que se conceden privilegios, se pueden retirar. La orden REVOKE retira privilegios o roles a los usuarios y privilegios

concedidos a los roles.

Sintáxis para retirar privilegios de objetos a los usuarios o roles:

REVOKE {priv_objeto [, priv_objeto]....|ALL [PRIVILEGES]}ON [usuario.]objetoFROM {usuario|rol|PUBLIC} [, {usuario|rol|PUBLIC]...;

Sintáxis para retirar privilegios del sistema o roles a los usuarios o para retirar privilegios a roles:

REVOKE {priv_sistema|rol} [,{priv_sistema|rol}]...FROM {usuario|rol|PUBLIC} [,{usuario|rol|PUBLIC}]...;

Ejemplos:

Prácticas de Diseño y Gestión de Bases de Datos Page 15 of 31

Page 16: Tema 14 Gestion de Seguridad

Formación 2002. Tema 14. Gestión de Seguridad.

Retirar los privilegios SELECT (privilegio de objetos) sobre la tabla CLIETES a F02:

SQL> CONNECT Enter user-name: FORMEnter password: *****Connected.SQL> REVOKE SELECT ON CLIENTES FROM F02;

Revoke succeeded.

Ahora quitamos todos los privilegios que tuviera F02 sobre la tabla clientes del usuario FORM.

SQL> REVOKE ALL ON CLIENTES FROM F02;

Revoke succeeded.

Veamos un ejemplo de retirada de privilegios del sistema:

Rerirar el privilegio a F02 de consultar cualquier tabla:

SQL> CONNECT SYSTEM/MANAGERConnected.SQL> GRANT SELECT ANY TABLE TO F02;

Grant succeeded.

SQL> REVOKE SELECT ANY TABLE FROM F02;

Revoke succeeded.

Primero le hemos asignado privilegios porque no los poseía y después se los hemos quitado.

Prácticas de Diseño y Gestión de Bases de Datos Page 16 of 31

Page 17: Tema 14 Gestion de Seguridad

Formación 2002. Tema 14. Gestión de Seguridad.

2.3 Vistas con información de los privilegios.

Para conocer los privilegios que han concedido o recibido los usuarios sobre los objetos o a nivel de sistema, podemos consultar las siguientes vistas del diccionario de datos:

VISTA DESCRIPCIÓNSESSION_PRIVS Privilegios del usuario activo. USER_SYS_PRIVS Privilegios de sistema asignado al usuario.DBA_SYS_PRIVS Privilegios de sistema asignado a los usuarios o

roles.USER_TAB_PRIVS Concesiones sobre objetos que son propiedad del

usuario, concedidos o recibidos por éste.USER_TAB_PRIVS_MADE Concesiones sobre objetos que son propiedad del

usuario.USER_TAB_PRIVS_RECD Concesiones sobre objetos que recibe el usuario.USER_TAB_GRANTS Concesiones en objetos para los que el usuario es

propietario, el que concedió el privilegio o al que se concedió el privilegio.

USER_TAB_GRANTS_MADE Todas las concesiones hechas en objetos que son propiedad del usuario.

USER_TAB_GRANTS_RECD Concesiones en objetos en las que el usuario es aquel al que se ha concedido el privilegio (concesiones recibidas)

ALL_TAB_GRANTS, ALL_TABS_GRANTS_MADE, ALL_TAB_GRANTS_RECD

Igual que las anteriores, pero aparecen las concesiones de todos los usuarios.

USER_COL_GRANTS Concesiones en columnas para las que el usuario es propietario, el que concedió el privilegio o al que se le concedió el privilegio.

USER_COL_GRANTS_MADE, USER_COL_GRANTS_RECD

Son iguales que las anteriores vistas pero para columnas.

ALL_COL_GRANTS, ALL_COL_GRANTS_MADE, ALL_COL_GRANTS_RECD

Son iguales que las anteriores vistas, pero aparecen concesiones de todos los usuarios de la base de datos.

USER_COL_PRIVS Concesiones sobre columnas en las que el usuario es propietario.

USER_COL_PRIVS_MADE Todas las concesiones sobre columnas de objetos que son propiedad del usuario.

USER_COL_PRIVS_RECD Concesiones de columnas recibidas por el usuario.

Prácticas de Diseño y Gestión de Bases de Datos Page 17 of 31

Page 18: Tema 14 Gestion de Seguridad

Formación 2002. Tema 14. Gestión de Seguridad.

SQL> CONNECT F02/F02Connected.SQL> SELECT * FROM SESSION_PRIVS;

PRIVILEGE----------------------------------------CREATE SESSIONDROP USER

3. ROLES

Supongamos que un conjunto de usuarios requieren el mismo conjunto de privilegios para trabajar con ciertos datos. Este conjunto de privilegios se puede agrupar en un rol, de tal manera que es posible asignar el mismo rol a cada uno de los usuarios.

Un rol o función es un conjunto de privilegios que recibe un nombre común para facilitar la tarea de asignación de éstos a los usuarios o a otros roles.

Los privilegios de un rol pueden ser de sistema y a nivel de objeto.

Pasos a la hora de crear un role:

o Crear el role.o Asignar los privilegios a ese rol.o Crear la sesion de conexión.o Conceder el rol al usuario.

Sintáxis:o CREATE ROLE nombre_role [IDENTIFIED BY contraseña];o GRANT ….. TO nombre_roleM

Vamos a crear el role ACCESO, que asignará permisos de consulta y de inserción en la tabla clientes para el usuario F02:

SQL> CONNECT FORM/F2002Connected.SQL> CREATE ROLE ACCESO;

Role created.

SQL> GRANT SELECT, INSERT ON CLIENTES TO ACCESO;

Grant succeeded.

Prácticas de Diseño y Gestión de Bases de Datos Page 18 of 31

Page 19: Tema 14 Gestion de Seguridad

Formación 2002. Tema 14. Gestión de Seguridad.

SQL> GRANT CREATE SESSION TO ACCESO;

Grant succeeded.

SQL> GRANT ACCESO TO F02;

Grant succeeded.

Si ahora nos conectamos con el usuario F02:SQL> CONNECT F02Enter password: ***Connected.SQL> SELECT * FROM FORM.CLIENTES;

CLT_NUM CLT_APELL CLT_NOM C CLT_POB-----------------------------------------------------------------

1 BORRAS Margarita E MADRID 2 PEREZ Miguel E MADRID 3 DUPONT Jean F PARIS 4 DUPRET Michel F LYON 5 LLOPIS Antoni E BARCELONA 6 SOURIS Marcel F PARIS 7 GOÑI Pablo E PAMPLONA 8 COURBON Gerard F LYON 9 ROMAN Consuelo E JAEN 10 ROCA Pau E GERONA 11 MANCHA Jorge E VALENCIA 12 CURRO Pablo E BARCELONA 13 CORTES Diego E MADRID 14 FERNANDEZ Joaquin E MADRID 15 DURAN Jacinto E PAMPLONA 16 MINGUIN Pedro E PAMPLONA

16 rows selected.

3.1. Supresión de privilegios de un Rol. Sintáxis:

REVOKE privilegio1 [, privelgio2...] ON nombre_tabla FROM nombre_role;

3.2. Supresión de un Rol.

Sintáxis:DROP ROLE nombre_role;

Prácticas de Diseño y Gestión de Bases de Datos Page 19 of 31

Page 20: Tema 14 Gestion de Seguridad

Formación 2002. Tema 14. Gestión de Seguridad.

3.3. Establecer un rol por defecto.

Sintáxis:ALTER USER nombre_usuarioDEFAULT {[ROLE nombre_rol] | [NONE]};

NONE: Hace que el usuario no tenga rol por defecto.

Vamos a asignar por defecto el rol ACCESO a F02;

SQL> ALTER USER F02 DEFAULT ROLE ACCESO;

User altered.

3.4. Roles en el diccionario de datos.

VISTA DESCRIPCIÓNUSER_TAB_PRIVS Concesiones sobre objetos que son propiedad del

usuario, concedidos o recibidos por éste.

ROLE_SYS_PRIVS Privilegios del sistema asignado a roles.

ROLE_TAB_PRIVS Privilegios sobre tablas aplicados a roles.

ROLE_ROLE_PRIVS Roles asignados a otros roles.

SESSION_ROLES Roles activos para el usuario.

USER_ROLE_PRIVS Roles asignados al usuario.

DBA_SYS_PRIVS Privilegios del sistema asignados a los usuarios o roles.

DBA_ROLE_PRIVS Privilegios asignados a todos los usuarios y roles.

DBA_ROLES Todos los roles.

4. PERFILES.

Un perfil es un conjunto de límites a los recursos de la base de datos. Podemos limitar el tiempo de conexión a la base de datos. Si se asigna un perfil a

un usuario y éste sobrepasa el tiempo de conexión, no podrá usar la base de datos, a no ser que vuelva a realizar de nuevo la conexión.

Por defecto a los usuairos se les asigna el prefil DAFAULT cuando se les da de alta por primera vez. En principio, este perfil define recursos limitados (UNLIMITED)

4.1. Creación de perfiles.

Prácticas de Diseño y Gestión de Bases de Datos Page 20 of 31

Page 21: Tema 14 Gestion de Seguridad

Formación 2002. Tema 14. Gestión de Seguridad.

Sintáxis:CREATE PROFILE nombre_perfil LIMIT{ SESSIONS_PER_USER | CPU_PER_SESSION | CPU_PER_CALL | CONNECT_TIME | IDLE_TIME | LOGICAL_READS_PER_SESSION | LOGICAL_READS_PER_CALL | PRIVATE_SGA | COMPOSITE_LIMIT

} {Entero {K|M} | UNLIMITED | DEFAULT}

[ { SESSIONS_PER_USER | CPU_PER_SESSION | CPU_PER_CALL | CONNECT_TIME | IDLE_TIME | LOGICAL_READS_PER_SESSION | LOGICAL_READS_PER_CALL | PRIVATE_SGA | COMPOSITE_LIMIT

} {Entero {K|M} | UNLIMITED | DEFAULT} ]…..

RECURSO FUNCIÓNSESSION_PER_USER Número de sesiones multiples concurrentes

permitidas por nombre de usuario.

CONNECT_TIME Limita el tiempo de conexión permitido por sesión antes de que el usuario sea desconectado(minutos).

IDLE_TIME Limita el tiempo de inactividad permitido antes de que el usuario sea desconectado(minutos).

CPU_PER_SESSION Limita el tiempo máximo de CPU por sesión. Este valor se expresa en centésimas de segundos.

CPU_PER_CALL Limita el tiempo máximo de CPU por llamada (de análisis, ejecución o búsqueda). Este valor se expresa en centésimas de segundos.

LOGICAL_READS_PER_SESSION Limita el número de bloques de datos leidos en una sesión.

LOGICAL_READS_PER_CALL Limita el número de bloques de datos leidos por llamada (de análisis, ejecución o búsqueda).

PRIVATE_SGA Limita el número de bytes enteros de espacio privado en la SGA.

COMPOSITE_LIMIT Limita el coste total de recursos para una sesión en unidades de servicio basadas en una suma de los siguientes recursos: CPU_PER_SESSION, CONENCT TIME, LOGICAL_READS_PER_SESSION Y PRIVATE_SGA

Ejemplos

Prácticas de Diseño y Gestión de Bases de Datos Page 21 of 31

Page 22: Tema 14 Gestion de Seguridad

Formación 2002. Tema 14. Gestión de Seguridad.

Crear el PERFIL1 en el que limitamos el acceso a uno el número de sesiones concurrentes por usuarios y a dos minutos el tiempo de conexión permitido por sesión.

SQL> EDIT PERFIL1

El fichero perfil1 contiene la siguiente información:

CREATE PROFILE PERFIL1 LIMIT SESSIONS_PER_USER 1 CONNECT_TIME 2;

SQL> @PERFIL1

Profile created.

A continuación asignamos este perfil al usuario F02.

SQL> ALTER USER F02 2 PROFILE PERFIL1;

User altered.

Para activar el uso de perfiles en el sistema, el administrador ha de ejecutar esta orden:

SQL> CONNECT FORMEnter password: *****Connected.SQL> ALTER SYSTEM SET RESOURCE_LIMIT=TRUE;

System altered.

Ahora nos conectamos con el usuario F02/F02

4.2. Borrado de perfiles.

Sintáxis:

DROP PROFILE nombreperfil [CASCADE];Por ejemplo:

SQL> CONNECT FORMEnter password: *****Connected.SQL> DROP PROFILE PERFIL1;DROP PROFILE PERFIL1*ERROR at line 1:ORA-02382: profile PERFIL1 has users assigned, cannot drop without CASCADENo podemos borrar el perfil porque existe algún usuario que tiene asignado ese perfil.

Prácticas de Diseño y Gestión de Bases de Datos Page 22 of 31

Page 23: Tema 14 Gestion de Seguridad

Formación 2002. Tema 14. Gestión de Seguridad.

Si deseamos borrar ese perfil aunque haya usuarios que lo tengan asignados usaremos CASCADE.

Para ello:SQL> DROP PROFILE PERFIL1 CASCADE;

Profile dropped.

5. GESTIÓN DE TABLESPACES.

Una base de datos está constituida por un conjunto de archivos de datos, pero ¿Cómo se ocupa Oracle de estos archivos?

Oracle gestiona estos archivos usando TABLESPACES. Se llama así porque tiene tablas de datos.

Antes de introducir los datos en la base de datos, es necesario:a) Crear el Tablespace.b) Crear las tablas en las que se van a introducir los datos.

Las tablas se suelen almacenar en un tablespace. Un tablespace es una unidad lógica de almacenamiento de datos representados

físicamente por uno o más archivos de datos. Se recomienda no mezclar los datos de diferentes aplicaciones en el mismo

tablespace, es decir, se debe crear un tablespace para almacenar los datos de la aplicación para una aplicación de gestión de almacén, otro para la de empleados...

Existen varios tablespaces que se crean al instalar Oracle:

a) SYSTEM: Lugar en el que Oracle almacena toda la información que necesita para su propia gestión.

b) USER_DATA: Este espacio de tablas, contiene información personal de los usuarios.

c) ROLL_BACK_DATA: Es el lugar donde Oracle guarda la información de deshacer.

d) TEMPORARY_DATA: Es el espacio de tablas donde Oracle almacena todas sus tablas temporales.

Prácticas de Diseño y Gestión de Bases de Datos Page 23 of 31

Page 24: Tema 14 Gestion de Seguridad

Formación 2002. Tema 14. Gestión de Seguridad.

5.1. Creación de tablespaces.

Se usa la orden CREATE TABLESPACE que permite asignar uno o más archivos al espacio de tablas y especificar un espacio por omisión para cualquiera de las tablas creadas sin un espacio de tabla explícitamente mencionado.

Sintáxis:CREATE TABLESPACE nombretablespaceDATAFILE ‘nombrearchivo’ [SIZE entero [K|M][REUSE] [, ‘nombrearchivo’ [SIZE entero [K|M][REUSE]]...[DEFAULT STORAGE(

INITIAL tamañoNEXT tamañoMINEXTENTS tamañoMAXEXTENTS tamañoPCTINCREASE valor

)][ONLINE|OFFLINE];

OPCIÓN DESCRIPCIÓNDATAFILE Especifica el arhivo, o archivo de datos.

SIZE Tamaño en Kbytes o MegaBytes.

REUSE Reutiliza el archivo si ya exixtía o lo crea si no existe.

DEFAULT STORAGE Define el almacenamiento por omisión para todos los bojetos que se creen en este espacio de tabla. Fija la cantidad de espacio si no se especifica en la sentencia CREATE TABLE.

INITIAL Extensión inicial. Especifica el tamaño en bytes de la primera extensión que se va a asignar al objeto.

NEXT Extensión siguiente.

MINEXTENTS Si el valor es 1, sólo asigna la extensión inicial.Si es mayor que 1, se clalcula el tamaño de las extensiones subsiguientes basándose en INITIAL, NEXT, PCTINCREASE.

MAXEXTENTS Número total de extensions, incluida la primera.

PCTINCREASE Factor de crecimiento para la extensión. Valor por defecto es 50, que significa que cada extensión subsiguiente será un 50% más grande que la anterior.NEXT = NEXT + (PCTINCREASE*NEXT)/100

ONLINE,OFFLINE ONLINE permite el acceso.OFFLINE impide el acceso

Prácticas de Diseño y Gestión de Bases de Datos Page 24 of 31

Page 25: Tema 14 Gestion de Seguridad

Formación 2002. Tema 14. Gestión de Seguridad.

Ejemplo:

Vamos a crear un TABLESPACE de 15 Megas llamado TRABAJO. El tamaño inicial para un objeto que se cree en ese tablespace será 15K. Cada extensión subsiguiente será un 24% más grande que la anterior. Asignaremos 2 archivos a ese TABLESPACE, ‘TRABAJ1,ORA’ de 10 M, ‘TRABAJ2,ORA’ de 5M.

Fichero creartablespace.sql.

CREATE TABLESPACE TRABAJODATAFILE 'TRABAJ1.ORA' SIZE 10M,

'TRABAJ2.ORA' SIZE 5MDEFAULT STORAGE(INITIAL 15KNEXT 15KPCTINCREASE 24);

Por defecto los archivos de datos los va a crear en C:\ORACLE\ORA81\DATABASE

SQL> SELECT FILE_NAME, FILE_ID, TABLESPACE_NAME, BYTES FROM DBA_DATA_FILES;

Con esta sentencia podemos ver los tablespaces de la base de datos.

Existen una serie de vistas que contienen información sobre los tablespaces.

VISTA DESCRIPCIÓNUSER_FREE_SPACE Son extensiones libres en tablespaces a las que

puede acceder el usuario.

DBA_FREE_SPACE Son extensiones libres en todos los tablespaces. Sólo pueden acceder los administradores.

DBA_TABLESPACES Es la descripción de todos los tablespaces.

DBA_TS_QUOTAS Describe los bytes usados por los usuarios en cada tablespace. Se puede acceder con administrador.

Ejemplo:

SQL> CONNECT F02/F02;SQL> SELECT * FROM USER_FREE_SPACE;

TABLESPACE_NAME FILE_ID BLOCK_ID BYTES BLOCKS RELATIVE_FNO------------------------------------------ ------------ ------------------ ----------- ------------- ---------------------FORMDATA 7 27 52375552 25574 7

Prácticas de Diseño y Gestión de Bases de Datos Page 25 of 31

Page 26: Tema 14 Gestion de Seguridad

Formación 2002. Tema 14. Gestión de Seguridad.

FILE_ID: Número de identificación del archivo.BLOCK_ID: Identificación del primer bloque libre.BYTES: Es el número de bytes libres.BLOCKS: Nº de bloques libres.RELATIVE_FNO: Número relativo del fichero en la primera extensión del bloque.

Ejemplo:

SQL> CONNECT FORM/F2002;Connected.

Nos conectamos como administrador.

SQL> SELECT * FROM DBA_TS_QUOTAS;

MAX_BYTES: Nº máximo de bytes que tiene el usuario asignado. Si es -1 el número de bytes es ilimitado.BLOCKS: Número de bloques usados.MAX_ BLOCKS: Máximo número de bloques.BYTES: Número de bytes usados por el usario.

5.2. Modificación de usuarios.

Los tablespaces una vez creados se pueden modificar, es decir, se pueden añadir nuevos archivos, modificar las cláusulas existentes.

Sintáxis:ALTER TABLESPACE nombretablespace{[ADD DATAFILE ‘nombrearchivo’ º[SIZE entero [K|M][REUSE]

[AUTOEXTEND ON..|OFF] [,‘nombrearchivo’ º[SIZE entero [K|M][REUSE]

[AUTOEXTEND ON..|OFF]...][RENAME DATAFILE ‘archivo’ [, ‘archivo’]...

TO ‘archivo’ [,’archivo’]][DEFAULT STORAGE clausulaalmacenamiento][ONLINE|OFFLINE]};

Prácticas de Diseño y Gestión de Bases de Datos Page 26 of 31

Page 27: Tema 14 Gestion de Seguridad

Formación 2002. Tema 14. Gestión de Seguridad.

OPCIÓN DESCRIPCIÓNnombretablespace Nombre del tablespace que se quiere modificar.

ADD_DATAFILE Añade al tablespace uno o varios archivos.

AUTOEXTEND Activa o desactiva el crecimiento automático de los archivos de datos en el tablespace.AUTOEXTEND OFF: Desactiva el crecimiento automático.AUTOEXTEND ON:

NEXT Entero es el incrementode espacio de disco.

MAXSIZE: Máximo espacio de disco reservado para la extensión automática del archivo.

UNLIMITED: Significa que no hay límite de espacioen el disco reservado.

RENAME DATAFILE El tablespace debe estar desactivado (offline) mientras se produce el cambio.

DEFAULT STORAGE Especifica los nuevos parámetros de almacenamiento para todos los objetos que se creen a partir de ahora en el tablespace.

ONLINE Pone el espacio de tablas activado.

OFFLINE Pone el espacio de tablas desactivado.

5.3. Borrado de tablespaces.

Sintáxis:DROP TABLESPACE nombretablespace[INCLUDING CONTENTS];

INCLUDING CONTENS permite borrar un tablespace que tenga datos. Se recomienda poner el tablespace en OFFLINE para asegurarnos de que no hay

sentencia SQL que estén accediendo a los datos, en cuyo caso no sería posible borrarlos.

Cuando se borra un tablespace, los archivos asociados no se borran del sistema operativo, por lo que tendremos que borrarlos de forma manual.

6. SECUENCIAS.

Prácticas de Diseño y Gestión de Bases de Datos Page 27 of 31

Page 28: Tema 14 Gestion de Seguridad

Formación 2002. Tema 14. Gestión de Seguridad.

Una secuencia es un objeto de la base de datos que genera enteros únicos. Es muy útil para generar automáticamente valores para claves primarias. Para crear una secuencia en el esquema propio es necesario tener el privilegio

CREATE SECUENCE.

Sintáxis:

CREATE SEQUENCE nombresecuencia[INCREMENT BY entero][START WITH entero][MAXVALUE entero | NOMAXVALUE][MINVALUE entero | NOMINVALUE][CYCLE | NOCLYCLE][ORDER | NOORDER][CACHE entero | NOCACHE]

OPCIÓN DESCRIPCIÓNINCREMENT BY Intervalo de crecimiento. Si se omite es 1.

START WITH Número de comienzo de la secuencia.

MAXVALUE Número más alto que generará la secuencia.

NOMMAXVALUE No hay límite, para una secuencia descendente es -1.

MINVALUE Número más bajo que generará la secuencia.

NOMMINVALUE Indica que el valor mínimo para una secuencia ascendente es 1 y sin límite para una secunecia descendente.

CYCLE | NOCYCLE CYCLE reanuda la secuencia cuando llega al máximo. NOCYCLE no la reanuda.

ORDER | NOORDER Garantiza que los números de secuencias se generan en el orden requerido. Si se omiten ambas se asume NOORDER.ORDER sólo es necesario para servidores en PARALELO.

CACHE | NOCACHE Guarda en memoria un conjunto previamente asignado de número de secuencias.

Cuando se crea la secuencia accedemos a ella mediante CURRVAL que devuelve el valor de la secuencia.

NEXTVAL devuelve el siguiente valor e incrementa la secuencia. Para acceder a estos valores usamos las columnas:

a) nombresecuencia.CURRVAL.

Prácticas de Diseño y Gestión de Bases de Datos Page 28 of 31

Page 29: Tema 14 Gestion de Seguridad

Formación 2002. Tema 14. Gestión de Seguridad.

b) nombresecuancia.NEXTVAL.

Ejemplo: Sabemos que la tabla articulos tiene 15 filas. Vamos a crear una secuencia para

que inserte automaticamente el valor de la columna art_num.

SQL>CREATE SEQUENCE CODIGOS START WITH 16 INCREMENT BY 1 MAXVALUE 99;SQL>INSERT INTO articulos VALUES (CODIGOS.NEXTVAL, 'IMPRESORA', 150, 'ROJO', 400,580,4);

Borramos de la tabla articulos:

SQL>DELETE FROM ARICULOS WHERE ART_NUM=16;SQL>COMMIT;

Para borrar la secuencia:

SQL> DROP SEQUENCE CODIGOS;Sequence dropped.

7. INDICES.

Con los indices se acelera el tiempo de respuesta de consultas. Un índice es un objeto de la base de datos que se asocia a una tabla y al que se

asocia una o varias columnas de una tabla. Se puede almacenar los índices en tablespaces diferentes al de las tablas que

indexan. Se debe indexar cuando tengamos una gran cantidad de filas en una tabla. El índice será aquel campo normalmente por el que deseemos buscar más

rápidamente. No se deben indexar columnas que no son modificadas a menudo y que posean

pocos valores diferentes. Por este motivo, lo que se indexa normalmente es el campo de la clave primaria.

Sintáxis:CREATE INDEX nombreindiceON nombretabla (columna1 [ASC|DESC] [,columna2 [ASC|DESC]]...)[STORAGE clausulas_almacenamiento][TABLESPACE nombretablaspace][otras cláusulas];

Ejemplo:

SQL> CREATE INDEX NUMART ON ARTICULOS (ART_NUM);

Prácticas de Diseño y Gestión de Bases de Datos Page 29 of 31

Page 30: Tema 14 Gestion de Seguridad

Formación 2002. Tema 14. Gestión de Seguridad.

Index created.

Borramos el índice:

SQL> DROP INDEX NUMART;

Index dropped.

Para ver los índices existentes, podemos usar las vistas:a) USER_INDEXES.b) DBA_INDEXES.

SQL> SELECT INDEX_NAME, TABLE_NAME FROM USER_INDEXES WHERE TABLE_NAME='ARTICULOS';

no rows selected

8. CLUSTERS.

Las operaciones de combinaciones de tablas se pueden mejorar usando clusters. Un cluster es un objeto de base de datos que almacena varias tablas que tienen

una o más columnas en común en una misma área de disco. Con esto se consigue que las operaciones de combinación de tablas ganen rapidez. Las filas de las tablas con los mismos valores en las columnas de combinación se

almacenan físicamente juntas; de esta forma, las consultas serán más rápidas.

Sintáxis:

CREATE TABLE nombretabla[definición de columnas]CLUSTER nombrecluster (columna1 [,columna2]);

CREATE CLUSTER nombrecluster(columna tipo_dato [, columna tipo_dato])[SIZE entero][STORAGE (cláusulas_almacenamiento)][TABLESPACE nombretablespace];

Por tanto si varias tablas comparten columnas es conveniente crear clusters. Una vez creado el cluster, es necesario crear el índice, porque si no lo creamos no

podremos insertar valores en las tablas.

Prácticas de Diseño y Gestión de Bases de Datos Page 30 of 31

Page 31: Tema 14 Gestion de Seguridad

Formación 2002. Tema 14. Gestión de Seguridad.

Ejemplo: Vamos a crear el cluster EMPLEYDEPART.

Fichero crearcluster.sql.

SQL> CREATE CLUSTER EMPLEYDEPART (numero_departamento NUMBER(2));

Cluster created.

A continuación creamos las tablas DEPART y EMPLEFichero creartablas.sql.

CREATE TABLE DEPART (DEPT_NO NUMBER(2) NOT_NULLDNOMBRE VARCHAR(14),LOC VARCHAR(14))CLUSTER EMPLEYDEPART(DEPT_NO);

CREATE TABLE EMPLE (EMP_NO NUMBER(4) NOT_NULL,APELLIDO VARCHAR(10),OFICIO VARCHAR(10),DIR NUMBER(4),FECHA_ALTA DATE,SALARIO NUMBER(10),COMISION NUMBER(10),DEPT_NO NUMBER(2) NOT_NULL))CLUSTER EMPLEYDEPART(DEPT_NO);

CREATE INDEX IND_EMPYDEP ON CLUSTER EMPLEYDEPART;

Prácticas de Diseño y Gestión de Bases de Datos Page 31 of 31