Procesamiento de consultas y vistas
Índice
- Introducción
- Objetivos
- 1.Procesamiento de consultas
- 1.1.Descomposición de consultas
- 1.1.1.Validación léxica y sintáctica
- 1.1.2.Normalización de la consulta
- 1.1.3.Análisis semántico
- 1.1.4.Simplificación
- 1.2.Optimización semántica
- 1.3.Optimización sintáctica
- 1.4.Estimación de costes para las operaciones de álgebra relacional
- 1.4.1.Estadísticas de la base de datos
- 1.4.2.Operación de selección
- 1.4.3.Operación de ordenación
- 1.4.4.Operación de proyección
- 1.4.5.Operación de combinación
- 1.4.6.Operaciones de conjuntos de álgebra relacional
- 1.4.7.Agregación
- 1.5.Optimización física
- 1.5.1.Optimización heurística
- 1.5.2.Optimización basada en costes
- 1.1.Descomposición de consultas
- 2.Procesamiento de vistas
- 3.La seguridad
- 4.Anexos
- 4.1.Reglas de equivalencia de operaciones de álgebra relacional
- 4.2.Consideraciones sobre vistas en el SGBD Oracle 11g
- 4.3.Aspectos referentes a la seguridad en el SGBD Oracle 11g
- 4.3.1.Gestión de usuarios
- 4.3.2.Definición de perfiles
- 4.3.3.Identificación de usuarios
- 4.3.4.Gestión de los privilegios
- 4.3.5.Roles
- Resumen
- Glosario
- Bibliografía
Introducción
Objetivos
-
Saber cuáles son los mecanismos de procesamiento y optimización de consultas, y así poderlas plantear de la forma más eficiente posible.
-
Conocer las diferentes estrategias de implementación de las operaciones de álgebra relacional con el fin de evaluar el coste de las consultas.
-
Interpretar y optimizar el plan de ejecución de una consulta de forma adecuada.
-
Presentar las vistas como elementos de diseño externo que permiten la actualización de datos.
-
Conocer nuevas aplicaciones de las vistas para mejorar el diseño de la base de datos.
-
Conocer el alcance de los mecanismos de seguridad de una base de datos.
-
Tomar conciencia de las obligaciones legales derivadas del cumplimiento de la Ley orgánica de protección de datos de carácter personal.
1.Procesamiento de consultas
Concepto |
Representación |
Observaciones |
---|---|---|
Relaciones |
R, S |
La lista de atributos de cada relación se define según el esquema siguiente: R = (A1, A2, ..., An). |
Predicados |
p, q |
Estos predicados se evaluarán lógicamente en las operaciones de selección y combinación. |
Selección |
σp(R) |
Operación que devuelve las tuplas de la relación R que satisfacen la evaluación del predicado p. |
Proyección |
∏L(R) |
Donde L corresponde a una lista de atributos que se mostrarán de la relación R. |
Unión |
(R) ∪ (S) |
Se obtiene una relación nueva que incluye las tuplas de la relación R y S menos las repeticiones. |
Intersección |
(R) ∩ (S) |
Se obtiene una relación nueva que incluye las tuplas que pertenecen a las dos relaciones, R y S . |
Diferencia |
(R) – (S) |
Se obtiene una relación nueva que incluye las tuplas que pertenecen a la relación R pero que no están incluidas en la relación S. |
Producto cartesiano |
(R) × (S) |
Se obtiene una relación nueva formada por todas las tuplas que resultan de concatenar tuplas de la relación R con tuplas de la relación S. |
Combinación Theta |
(R) p (S) |
Se obtiene una relación nueva que incluye los atributos de los pares de tuplas correspondientes a R y S que satisfacen el predicado p. |
SELECT * FROM Emp e, Dept d WHERE e.dept Id = d.dept Id AND (e.hireDate > ';01-SEP-07'; AND d.deptName LIKE ';IT';) ;
1.1.Descomposición de consultas
1.1.1.Validación léxica y sintáctica
SELECT emplId FROM Emp WHERE deptId LIKE ';10';;
SELECT e.firstName, e.lastName, e.hireDate, d.deptName FROM Emp e, Dept d WHERE e.dept Id = d.dept Id AND (e.hireDate > ';01-SEP-07'; AND d.deptName LIKE ';IT';);
1.1.2.Normalización de la consulta
-
Forma normal conjuntiva: genera una secuencia de conjunciones conectadas con el operador ∧ (AND). Cada conjunción puede contener uno o más predicados conectados con el operador ∨ (OR).
-
Forma normal disyuntiva: genera una secuencia de disyunciones conectadas con el operador ∨ (OR). Cada disyunción puede contener uno o más predicados conectados con el operador ∧ (AND).
1.1.3.Análisis semántico
SELECT e.firstName, e.lastName FROM Emp e, Dept d, Locs l WHERE e.deptId=d.deptId AND l.city LIKE ';Paris'; AND e.salary > 2000;
SELECT firstName, lastName, salary FROM Emp WHERE salary < 1200 AND salary > 2000;
1.1.4.Simplificación
SELECT firstName, lastName, salary FROM Emp WHERE salary > 1200 AND salary > 2000;
SELECT firstName, lastName, salary FROM Emp WHERE salary > 2000;
SELECT firstName, lastName, salary, managerId, jobId FROM Emp WHERE (jobId LIKE 'STClerk' AND manager = 121) AND manager = 121;
SELECT firstName, lastName, salary, managerId, jobId FROM Emp WHERE jobId LIKE 'STClerk' AND manager = 121;
1.2.Optimización semántica
SELECT firstName, lastName, salary FROM Emp WHERE salary > 500 AND deptId = 3 ;
SELECT firstName, lastName, salary FROM Emp WHERE deptId = 3 ;
SELECT e.deptId FROM Emp e, Dept d WHERE e.deptId = d.deptId;
SELECT e.deptId FROM Emp e;
1.3.Optimización sintáctica
1.3.1.Reglas de equivalencia
1.3.2.Estrategias de procesamiento heurístico
1.4.Estimación de costes para las operaciones de álgebra relacional
1.4.1.Estadísticas de la base de datos
1.4.2.Operación de selección
-
Para encontrar una tupla con un atributo clave, el coste será:
-
Si se trata de un atributo no clave y se supone una distribución uniforme de los valores, tendremos:
-
Hay un índice hash sobre el atributo de clave principal empId.
-
Hay un índice de agrupamiento sobre el atributo de clave externa deptId.
-
Hay un índice árbol B+ sobre el atributo salary.
-
La relación Emp tiene las siguientes estadísticas almacenadas en el catálogo del sistema:
1.4.3.Operación de ordenación
+ [nBlocks(R)/nBlocks(S)](2[logM–1[(nBlocks(R)/M] – 1])
1.4.4.Operación de proyección
1.4.5.Operación de combinación
Combinación de ciclo anidado
Combinación de ciclo anidado indexado
Combinación por ordenación por fusión
Combinación por función resumen
-
CE = 3 · (nBlocks(R) + nBlocks(S)), si el índice hash se almacena en memoria y no se tienen en cuenta los desbordamientos.
-
CE = 2 · (nBlocks(R) + nBlocks(S)) · [lognBuffer–1(nBlocks(S)) – 1] + nBlocks(R) + nBlocks(S), en otro caso.
-
Existe hash sin desbordamiento sobre el atributo de clave principal depId.
-
Existen unos cien bloques de memoria intermedia de la base de datos.
-
Tenemos las siguientes estadísticas almacenadas en el catálogo del sistema:
nTuples(Emp) = 3.000
blockFactor(Emp) = 30) ⇒ nBlocks(Emp) = 100
nTuples(Jobs) = 50
blockFactor(Jobs) = 10) ⇒ nBlocks(Jobs) = 5
-
La memoria intermedia sólo contiene un bloque de Emp y Jobs:
CE = nBlocks(Emp) + nBlocks(Emp) · nBlocks(Jobs) = 100 + 100 · 5 = 600
-
El número de bloques que se tratarán por Emp es (nBuffer – 2):
CE = nBlocks(Emp) + nBlocks(Jobs) · nBlocks(Emp)/(nBuffer – 2) =
= 100 + 100 · 5/98 = 106
-
Todos los bloques de la relación Emp caben en la memoria intermedia:
CE = nBlocks(Emp) + nBlocks(Jobs) = 100 + 5 = 105
-
Tuplas desordenadas:
CE = nBlocks(Emp) + nBlocks(Jobs) + nBlocks(Emp) · log2(nBlocks(Emp) +
+ nBlocks(Jobs) · log2(nBlocks(Jobs)) = 100 + 5 + 100 · 7 + 5 · 3 = 820
-
Tuplas ordenadas:
CE = nBlocks(Emp) + nBlocks(Jobs) = 100 + 5 = 105
1.4.6.Operaciones de conjuntos de álgebra relacional
-
Cuando se realiza la unión de R y S (R ∪ S), se realiza una lectura concurrente de las tuplas de las dos relaciones, y si se detecta la misma tupla en ambas, se elimina el duplicado.
-
Cuando se realiza la intersección de R y S (R ∩ S), sólo se almacenan las tuplas que aparezcan como duplicados en ambas relaciones.
-
Cuando se realiza la diferencia R – S, se almacenan las tuplas de R que no aparezcan en S.
1.4.7.Agregación
1.5.Optimización física
-
que el coste de CPU sea mínimo;
-
que la necesidad de memoria sea mínima;
-
que se minimicen los accesos a disco, y
-
otras posibilidades.
1.5.1.Optimización heurística
1.5.2.Optimización basada en costes
SELECT * FROM SmallTable s, LargeTable l WHERE s.id = l.id;
SELECT * FROM LargeTable l, SmallTable s WHERE l.id = s.id;
-
Si el optimizador elige para leer SmallTable en primer lugar, el SGBD lee las diez filas y después LargeTable diez veces para encontrar las filas coincidentes de cada una de las diez filas.
-
Si el optimizador elige LargeTable en primer lugar, el SGBD tiene que leer las diez mil filas de LargeTable y después las de SmallTable diez mil veces para encontrar los registros coincidentes.
Las estadísticas y los histogramas
EXECUTE DBMS_STATS.GATHER_SCHEMA_STATS('COMPANY', DBMS_STATS.AUTO_SAMPLE_SIZE);
-
muestreo basado en filas, de forma que se ignora la ubicación física en disco; y
-
muestreo basado en bloques, de modo que se escoge una muestra aleatoria de bloques y las estadísticas se generan a partir de los datos almacenados en ellos.
-
Histograma equilibrado de ancho, que divide los datos en un número fijo de rangos con el mismo ancho y para cada uno de ellos se realiza el cálculo del número de valores que les pertenece.
-
Histograma equilibrado de altura, donde se determinan los rangos una vez distribuidos equinuméricamente los valores y se generan rangos de diferente ancho pero con un mismo valor de frecuencia relativa.
Operadores físicos y estrategias de ejecución
2.Procesamiento de vistas
CREATE VIEW ViewName [(column_name), ... ] AS query [WITH [CASCADED|LOCAL]CHECK OPTION ]
CREATE VIEW View01 AS SELECT firstName, lastName, hireDate, salary FROM Emp e WHERE salary < 30000; CREATE VIEW View02 AS SELECT firstName, lastName, deptName FROM Emp e, Dept d WHERE e.deptId = d.deptId; CREATE VIEW View03 AS SELECT * FROM View02 WHERE (firstName, lastName) IN (SELECT firstName, lastName FROM View01);
UPDATE View01 SET salary = 45000 WHERE salary = 29000;
INSERT INTO View01 VALUES (';John';, ';Smith';, ';12/3/2012';, 50000);
DROP VIEW View_Name [CASCADE|RESTRICT]
DROP VIEW View01 CASCADE;
2.1.Mecanismos de implementación de vistas
CREATE VIEW DeptSummaryView(department, salary, employees) AS SELECT d.deptName, AVG(e.salary), COUNT(*) FROM Emp e, Dept d, Jobs j WHERE e.deptId = d.deptId AND e.jobId = j.jobId AND j.jobName NOT IN (';President';, ';Manager';) GROUP BY d.deptName;
SELECT department, salary FROM DeptSummaryView WHERE employees > 4;
SELECT d.deptName, AVG(e.salary) FROM Emp e, Dept d, Jobs j WHERE e.deptId = d.deptId AND e.jobId = j.jobId AND j.jobName NOT IN (';President';, ';Manager';) GROUP BY d.deptName HAVING COUNT(*) > 4;
2.2.Actualización de vistas
CREATE VIEW View04 AS SELECT empId FROM Emp WHERE salary > 30000 UNION SELECT empId FROM Emp WHERE deptId = 20
SELECT empId FROM Emp WHERE salary > 30000 OR deptId = 20
2.2.1.Actualización con disparadores de sustitución
CREATE VIEW DeptAvgSalaryView(department, salary) AS SELECT d.deptName, AVG(e.salary) FROM Emp e, Dept d WHERE e.deptId = d.deptId GROUP BY d.deptName
CREATE TRIGGER updatingDeptAvgSalary INSTEAD OF UPDATE ON DeptAvgSalaryView DECLARE v_increase NUMBER; v_old_deptId Dept.deptId%TYPE; BEGIN IF :NEW.salary != 0 and :OLD.salary != 0 THEN v_increase := :NEW.salary / :OLD.salary; SELECT deptId INTO v_old_deptId FROM Dept d WHERE d.deptName = :OLD.department ; UPDATE Emp SET salary = v_increase * salary WHERE deptId = v_old_deptId AND salary IS NOT NULL; END IF ; IF :NEW.department != :OLD.department THEN UPDATE Dept SET deptName = :NEW.department WHERE Dept.deptName = :OLD.department; END IF; END updatingDeptAvgSalary;
CREATE TRIGGER deletingDeptAvgSalary INSTEAD OF UPDATE ON DeptAvgSalaryView DECLARE v_deptId Emp.deptId%TYPE; BEGIN SELECT deptId INTO v_deptId FROM Dept d WHERE d.deptName = :OLD.department; UPDATE Emp SET deptId = NULL WHERE deptId = v_deptId; DELETE FROM Dept WHERE deptName = :OLD.department; END deletingDeptAvgSalary;
2.3.La vista como elemento de diseño externo
2.4.Las tablas derivadas
CREATE MATERIALIZED VIEW MaterializedViewName [TABLESPACE tablespace_name] [PARALELL (DEGREE n)] [BUILD {IMMEDIATE|DEFERRED}] [REFRESH {FAST|COMPLETE|FORCE|NEVER|ON COMMIT|ON DEMAND}] [{ENABLE|DISABLE} QUERY REWRITE] AS SELECT ... FROM ... WHERE ...
-
COMPLETE (’completo’): se recalcula toda la tabla derivada según la consulta que la define.
-
FAST (’rápido’): este método de actualización especifica un método de refresco incremental; los cambios se efectuarán agregando los nuevos datos que se han añadido a las tablas base.
-
FORCE (’forzado’): aplica, si es posible, el refresco rápido, y si no es posible, el refresco completo.
-
NEVER (’nunca’): indica que la vista materializada nunca será refrescada.
-
DBMS_MVIEW.REFRESH(‘MaterializedViewName’): actualiza una vista materializada a partir de su nombre.
-
DBMS_MVIEW.REFRESH_DEPENDENT(‘Table1, Table2, ...’): actualiza todas las vistas materializadas que utilicen como tabla base alguna de las tablas o vistas indicadas en la lista.
-
DBMS_MVIEW.REFRESH_ALL_MVIEWS(n): actualiza todas las vistas materializadas devolviendo un número (n) que indica la cantidad de registros que se han actualizado.
-
ON COMMIT: el refresco se produce cuando la transacción que modifica alguna de las tablas base se confirma. Esto significa que la ejecución del COMMIT tendrá un mayor coste temporal, lo que puede afectar al rendimiento.
-
Actualización programada: la actualización se programa para que suceda en un determinado instante.
CREATE MATERIALIZED VIEW NAME_VIEW ... REFRESH START WITH ROUND(SYSDATE + 1) + 5/24 NEXT NEXT_DAY(TRUNC(SYSDATE), ';SUNDAY';) + 15/24 AS SELECT ...;
{productLine} REFERENCES ProductLine(idLine)
quantityOrdered), {orderNumber} REFERENCES Order(orderNumber)
CREATE MATERIALIZED VIEW ProductLineIncomeMView BUILD IMMEDIATE REFRESH FAST ON DEMAND ENABLE QUERY REWRITE AS SELECT pl.description as description, SUM(od.quantityOrdered * p.priceEach) as amount FROM ProductLine pl, Products p, Order o, OrderDetail od WHERE pl.idLine = p.productLine AND p.productCode = od.productCode GROUP BY pl.description;
SELECT pl.description, SUM(od.quantityOrdered * p.priceEach) FROM ProductLine pl, Product sp, Order o, OrderDetail od WHERE pl.idLine = p.productLine AND p.productCode = od.productCode AND pl.description IN (';vegetables';, ';meat';, ';drinks';) GROUP BY pl.description; HAVING SUM(od.quantityOrdered<i> * </i>p.priceEach) > 2500000.00;
SELECT description, amount FROM ProductLineIncomeMView WHERE description IN (';vegetables';, ';meat';, ';drinks';) AND amount > 2500000.00;
2.5.Tablas temporales
CREATE {GLOBAL|LOCAL} TEMPORARY TABLE TableName table_definition ON COMMIT {PRESERVE ROWS|DELETE ROWS}
CREATE LOCAL TEMPORARY TABLE SubjectMarks ( student VARCHAR2(50), mark NUMBER(3,1)) ON COMMIT DELETE ROWS;
2.6.Ventajas e inconvenientes en la utilización de vistas
3.La seguridad
3.1.Identificación y autenticación
3.2.Control de acceso
3.2.1.Control de acceso discrecional
|
Objeto 1 |
Objeto 2 |
... |
Objeto n |
---|---|---|---|---|
Usuario 1 |
|
|
... |
|
Usuario 2 |
|
|
... |
Derechos del usuario 2 sobre el objeto n |
... |
... |
... |
... |
|
Usuario n |
|
|
... |
|
3.2.2.Control de acceso obligatorio
-
Un usuario puede ver un objeto sólo si su nivel de acreditación es mayor o igual que el nivel de clasificación del objeto.
-
Un usuario puede modificar un objeto sólo si su nivel de acreditación es igual al nivel de clasificación del objeto.
Nombre |
Valor |
Descripción |
---|---|---|
General |
80 |
Alto secreto, personal. |
Oficial |
60 |
Alta seguridad, no distribuir. |
Suboficial |
40 |
Moderadamente seguro. |
Militar |
20 |
Nivel básico, no demasiado sensible. |
Civil |
1 |
Público conocimiento, libre distribución. |
3.2.3.Clasificación de los sistemas de seguridad
3.3.Implementación del control de acceso discrecional a SQL:2011
<sentencia de autorización> ::= <sentencia autorización privilegios> | <sentencia autorización roles> <sentencia autorización privilegios> ::= GRANT <privilegios> TO <autorizado> [{ , <autorizado>}] [WITH HIERARCHY OPTION] [WITH GRANT OPTION] [GRANTED BY <autorizador>] <privilegios> ::= <privilegios de objeto> ON <nombre objeto> <privilegios de objeto> ::= ALL PRIVILEGES|<acción>[{ , <acción>}] <acción> ::= DELETE | SELECT [(<nombre columna> [ , <nombre columna>] ... ])]| SELECT [(<nombre rutina> [ , <nombre rutina>] ... ])]| INSERT [(<nombre columna> [ , <nombre columna>] ... ])]| UPDATE [(<nombre columna> [ , <nombre columna>] ... ])]| REFERENCES [(<nombre columna> [ , <nombre columna> ... ])]| USAGE | UNDER | TRIGGER | EXECUTE <nombre objeto> ::= [ TABLE ] <nombre tabla> |DOMAIN <nombre dominio> | COLLATION <nombre compaginador de caracteres> | CHARACTER SET <nombre juego de caracteres> | TRANSLATION <nombre transcripción> | TYPE <nombre tipo> | SEQUENCE <nombre generador de secuencias> | <designador específico de rutina> | MODULE <nombre módulo> <autorizado> ::= PUBLIC | <nombre autorizado> <autorizador> ::= CURRENT_USER | CURRENT_ROLE
GRANT SELECT ON TABLE Empleado TO Auditor2; GRANT USAGE ON DOMAIN d_Telefono TO PUBLIC;
Privilegios |
Definición |
---|---|
INSERT [(lista-nombres-columnas)] |
Insertar valores en las columnas relacionadas de una fila. |
UPDATE [(lista-nombres-columnas)] |
Actualizar valores en las columnas relacionadas de una fila. |
DELETE |
Borrar filas. |
SELECT [(lista-nombres-columnas)] |
Consultar valores en las columnas relacionadas. |
REFERENCES [(lista-nombres-columnas)] |
Referenciar a valores de las columnas relacionadas. |
TRIGGER |
Crear un disparador sobre una tabla. |
EXECUTE |
Ejecutar un procedimiento incorporado. |
GRANT ALL PRIVILEGES ON VIEW Vista1 TO Joan, Pere, Maria
<definición rol> ::= CREATE ROLE <nombre rol> [WITH ADMIN <autorizador>] <sentencia autorización rol> ::= GRANT <nombre rol> [ { , <nombre rol>}] TO <autorizado> [ { , <autorizado>}] [WITH GRANT OPTION] [GRANTED BY <autorizador>]
CREATE ROLE Auditores WITH ADMIN CURRENT_USER; GRANT SELECT, UPDATE (Salario, Comision) TO Auditores; GRANT Auditores TO Pere, Joan, Maria;
<sentencia revocar privilegios> ::= REVOKE [{GRANT OPTION FOR|HIERARCHY OPTION FOR}] <privilegios> FROM <autorizado> [{ , <autorizado>} ... ] [ FROM {CURRENT_USER|CURRENT_ROLE}] [ GRANTED BY <autorizador>] { RESTRICT|CASCADE} <sentencia revocar rol> ::= REVOKE [ADMIN OPTION FOR] <nombre rol> [{ , <nombre rol> } ... ] FROM <autorizado> [ { , <autorizado >} ... ] [FROM {CURRENT_USER|CURRENT_ROLE}] [GRANTED BY <autorizador>] {RESTRICT|CASCADE}
3.4.Auditoría
-
Auditar sentencias. La auditoría (17) indicará cuándo y quién ha utilizado un tipo de sentencia concreta; por ejemplo, auditar todas las inserciones o los borrados.
-
Auditar objetos. El sistema registrará cada vez que se realice alguna operación sobre un objeto determinado.
-
Auditar sentencias sobre objetos, una versión combinada de las dos anteriores.
-
Auditar a usuarios o grupos.
3.5.La Ley de protección de datos de carácter personal
3.5.1.Principios generales de protección de datos
-
de la existencia de un fichero o tratamiento de datos de carácter personal;
-
del carácter obligatorio o facultativo de la respuesta dada a las preguntas que se planteen;
-
de las consecuencias de la obtención de los datos o la negativa a suministrarlos;
-
de la posibilidad de ejercitar los derechos de acceso, rectificación, cancelación y oposición, y
-
de la identidad y dirección del responsable del tratamiento o, según el caso, de su representante.
3.5.2.Los niveles de seguridad
3.5.3.La Agencia de Protección de Datos
4.Anexos
4.1.Reglas de equivalencia de operaciones de álgebra relacional
= σ(salary>2.500)(∏empId;firstName;lastName(Emp))
R × S = S × R
σp(R × S) = σp(R) × S
σ(p∧q)(R × S) = (σp(R)) × (σq(S))
= σ(deptName=‘IT’)(Emp(Emp:deptId=Dept:deptId) (σ(hireDate>‘01-SEP-97’)Dept)
= (∏firstName;lastName;deptId(Emp)) Emp:deptId=Dept:deptId (∏deptId;deptName(Dept))
((R × S) × T) = (R × (S × T))
= (Emp Emp:deptId=Dept:deptId (Dept Dept:locid=Locs:locid Locs))
4.2.Consideraciones sobre vistas en el SGBD Oracle 11g
4.2.1.Vistas del diccionario de datos
-
estructuras de almacenamiento;
-
usuarios y sus derechos, y
-
los objetos: tablas, vistas, índices, procedimientos y funciones.
4.2.2.Operaciones de actualización sobre vistas
-
La columna owner muestra el esquema que contiene la tabla o vista.
-
La columna table_name contiene los nombres de las tablas y de las vistas a las que el usuario tiene acceso.
-
La columna column_name nos indica las diversas columnas.
SELECT table_name, column_name, updatable, insertable, deletable FROM user_updatable_columns WHERE owner = ';COMPANY'; AND (table_name in (';EmpDeptView';, ';EvenDeptView';));
-
Si ejecutamos una sentencia DELETE sobre la vista EmpDeptView, eliminaremos filas de la tabla Emp (a la que pertenecen las columnas que tienen YES como deletable), pero no eliminaremos ninguna fila de la tabla Dept (a la que pertenece la columna deptName).
-
Podemos ejecutar INSERT sobre la vista EmpDeptView para rellenar filas de la tabla Emp, pero no para rellenar ninguna fila en la tabla Dept.
-
Podemos ejecutar UPDATE sobre la vista EmpDeptView para modificar el contenido de las columnas provenientes de la tabla Emp, pero no podremos hacerlo para la columna deptName proveniente de la tabla Dept.
-
operador DISTINCT;
-
funciones de agrupamiento;
-
cláusulas GROUP BY, ORDER BY, CONNECT BY o START WITH;
-
subconsultas en la cláusula SELECT;
-
vista creada con la opción WITH READ ONLY, y
-
operaciones de combinación, con algunas excepciones, que están recogidas en la documentación de Oracle.
-
La sentencia de actualización sólo puede afectar a una única tabla de las que forman parte de la operación de combinación.
-
Para una sentencia INSERT, la vista no puede haber sido creada con WITH CHECK OPTION, y todas las columnas para las que se insertarán valores deben de pertenecer a una tabla key-preserved.
-
Para una sentencia UPDATE, la vista no puede haber sido creada con WITH CHECK OPTION, y todas las columnas modificadas deben de pertenecer a una tabla key-preserved.
-
Para las sentencias DELETE sobre vistas basadas en JOIN, si el JOIN está formado por más de una tabla key-preserved, se efectúa la eliminación sobre la primera tabla indicada en la cláusula FROM.
INSERT INTO EvenDeptView VALUES (50,';R & D, ';Barcelona';);
INSERT INTO EvenDeptView VALUES (55, ';Design';, ';Girona';); UPDATE EvenDeptView SET deptId = deptId + 1 WHERE deptId = 50;
4.3.Aspectos referentes a la seguridad en el SGBD Oracle 11g
4.3.1.Gestión de usuarios
CREATE USER user_name IDENTIFIED {BY password|EXTERNALLY} [DEFAULT TABLESPACE tablespace_name] [TEMPORARY TABLESPACE tablespace_name] [QUOTA {value [K|M]|UNLIMITED} ON tablespace_name [ , ... ]] [PROFILE profile_name] [PASSWORD EXPIRE] [ACCOUNT {LOCK|UNLOCK}];
-
IDENTIFIED: esta cláusula indica si el usuario es identificado por el sistema operativo (EXTERNALLY) o mediante contraseña (BY contraseña). Desde la versión 11, las contraseñas son por defecto sensibles a mayúsculas/minúsculas (parámetro SEC_CASE_SENSITIVE_LOGON = TRUE por defecto). Esto significa que podemos tener creadas cuentas de usuario sin permiso de conexión. Aunque puede ser útil en la preparación de las cuentas de usuario sin activarlas de inmediato y deshabilitar así el acceso a un usuario de forma temporal, hoy en día se bloquea o desbloquea explícitamente una cuenta mediante ACCOUNT LOCK|UNLOCK.
-
DEFAULT NAMESPACE: esta cláusula indica en qué espacio de tablas se crearán por defecto los segmentos del usuario en caso de que no se explicite ninguna cláusula TABLESPACE en el momento de la creación del segmento. Si esta cláusula se omite, permanece el espacio de tablas definido por defecto en la base de datos.
-
TEMPORARY NAMESPACE: esta cláusula indica en qué espacio de tablas se crearán por defecto los segmentos de temporales del usuario, por ejemplo, creados en el momento de ejecución de una operación de ordenación. Si esta cláusula se omite, permanece el espacio de tablas temporal por defecto que haya definido en la base de datos.
-
QUOTA: este concepto permite limitar el espacio que un usuario puede emplear en un espacio de tablas. Esta funcionalidad sólo afecta a los usuarios que pueden crear segmentos, y en ningún caso a los usuarios finales de una aplicación, dado que éstos se limitan a manipular datos. Por defecto, los usuarios no tienen ninguna cuota en ningún espacio de tablas, y en cambio los DBA tienen una cuota ilimitada en todos los espacio de tablas. En todo caso, hay que evitar dar cuotas a los usuarios en el TABLESPACE SYSTEM y en el SYSAUX.
-
PROFILE: esta cláusula indica el perfil asignado al usuario.
-
PASSWORD EXPIRE: esta cláusula permite forzar la modificación de la contraseña en el momento de la primera conexión. Carece de sentido si el usuario se identifica mediante el sistema operativo.
-
ACCOUNT: esta cláusula admite uno de los dos parámetros siguientes: LOCK, si la cuenta existe pero evitamos que el usuario pueda conectarse a ella, o UNLOCK, donde la conexión está autorizada.
CREATE USER joan IDENTIFIED BY passtemp DEFAULT TABLESPACE tablespace1 QUOTA UNLIMITED ON tablespace1 PASSWORD EXPIRE;
ALTER USER joan IDENTIFIED BY otherpasstemp PASSWORD EXPIRE; ALTER USER joan DEFAULT TABLESPACE tablespace2 QUOTA UNLIMITED ON tablespace2; ALTER USER joan ACCOUNT LOCK;
DROP USER user_name [CASCADE];
4.3.2.Definición de perfiles
CREATE PROFILE profile_name LIMIT constraint_resources
-
SESSION_PER_USER: número de sesiones simultáneas.
-
CPU_PER_SESSION: asignación de CPU total por sesión.
-
CPU_PER_CALL: asignación de CPU total por llamada.
-
CONNECT_TIME: duración total de la conexión, en minutos.
-
IDLE_TIME: tiempo de inactividad.
-
LOGICAL_READS_PER_SESSION: número de lecturas lógicas por sesión.
-
LOGICAL_READS_PER_CALL: número de lecturas lógicas por llamada.
-
COMPOSITE_LIMIT: suma ponderada de CPU_PER_SESSION, CONNECT_TIME, LOGICAL_READS_PER_SESSION y PRIVATE_SGA. La vista RESOURCE_COST permite consultar las ponderaciones empleadas y la sentencia ALTER RESOURCE COST permite modificar las ponderaciones.
-
FAILED_LOGIN_ATTEMPTS: número de intentos de conexión fallidos como paso previo al bloqueo de cuenta.
-
PASSWORD_LOCK_TIME: duración del bloqueo.
-
PASSWORD_LIFE_TIME: duración de vida de la contraseña.
-
PASSWORD_GRACE_TIME: periodo de gracia después de la caducidad de la contraseña.
-
PASSWORD_REUSE_TIME: número de cambios de contraseña antes de que una contraseña pueda reutilizarse.
-
PASSWORD_VERIFY_FUCTION: función de verificación de la complejidad de la contraseña. El script utlpwdmg:sql del repositorio $ORACLE_HOME/rdms/admin contiene un ejemplo de función de verificación.
ALTER PROFILE default LIMIT SESSION_PER_USER 2 IDLE_TIME 15 FAILED_LOGIN_ATTEMPTS 3;
CREATE USER jordi IDENTIFIED BY password PROFILE default PASSWORD EXPIRE;
ALTER USER joan PROFILE default;
-
DBA_USERS: información sobre los usuarios.
-
DBA_TS_QUOTAS: información sobre cuotas de usuarios.
-
DBA_PROFILES: información sobre los perfiles.
4.3.3.Identificación de usuarios
Conectado.
4.3.4.Gestión de los privilegios
-
el derecho a ejecutar una sentencia SQL general, por ejemplo de crear una tabla (este concepto se denomina privilegio de sistema);
-
el derecho a acceder a un objeto de otro usuario (este concepto se denomina privilegio de objeto).
GRANT privilege_name [ , ... ] TO (authorized|PUBLIC ) [ , ... ] [WITH ADMIN OPTION];
-
el mismo privilegio con la cláusula WITH ADMIN OPTION, y
-
el privilegio de sistema GRANT ANY PRIVILEGE.
REVOKE privilege_name [ , ... ] FROM (authorized|PUBLIC) [ ,... ]
REVOKE ALL PRIVILEGES FROM autorizado;
Privilegio |
Definición |
Tabla |
Vista |
Secuencia |
Programa |
---|---|---|---|---|---|
SELECT [(columnas)] |
Derecho de lectura de datos. |
√ |
√ |
√ |
√ |
INSERT [(columnas)] |
Derecho de creación de datos. |
√ |
√ |
|
|
UPDATE [(columnas)] |
Derecho de actualización de datos*. |
√ |
√ |
|
|
DELETE |
Derecho de eliminación de datos*. |
√ |
√ |
|
|
EXECUTE |
Derecho de ejecución de un programa. |
|
|
|
√ |
GRANT {privilege_name [(column_list)][ , ... ]|ALL [PRIVILEGES]} ON [schema_name.] object_name TO {authorized|PUBLIC} [ , ... ] [WITH GRANT OPTION];
-
ser el propietario del objeto;
-
haber recibido el mismo privilegio con la cláusula WITH ADMIN OPTION, y
-
haber recibido el privilegio de sistema ANY OBJECT PRIVILEGE.
REVOKE {privilege_name [ , ... ]|ALL [PRIVILEGES]} ON [schema_name.] object_name FROM {authorized|PUBLIC}[ , ... ];
REVOKE ALL PRIVILEGES ON...FROM... autorizado;
AUTHID {CURRENT_USER|DEFINER}
-
DBA_SYS_PRIVS: muestra los privilegios de sistema asignados a los usuarios o a los roles.
-
SESION_PRIVS: muestra los privilegios de sistema actualmente activos en la sesión, ya sean obtenidos directamente o mediante un rol.
-
SYSTEM_PRIVILEGE_MAP: lista todos los privilegios de sistema.
-
DBA_TAB_PRIVS: muestra los privilegios objeto asignados a los usuarios o a los roles sobre la totalidad del objeto.
-
DBA_COL_PRIVS: muestra los privilegios objeto asignados únicamente sobre ciertas columnas del objeto.
-
TABLE_PRIVILEGE_MAP: muestra la lista de todos los privilegios de objeto.
4.3.5.Roles
-
Un sujeto puede tener varios roles.
-
Un rol puede tener varios sujetos.
-
Un rol puede tener muchos permisos.
-
Un permiso puede ser asignado a múltiples roles.
-
Una operación puede tener asignados muchos permisos.
-
Un permiso puede estar asignado a muchas operaciones.
CREATE ROLE role_name [IDENTIFIED {BY password|EXTERNALLY|USING package} |NOT IDENTIFIED];
GRANT role_name [ , ... ] TO {user_name|role_name|PUBLIC} [ , ... ] [WITH ADMIN OPTION];
-
el parámetro MAX_ENABLED_ROLES (por defecto, treinta) limita el número de roles activos simultáneos para un usuario;
-
los roles protegidos con contraseña se pueden asignar a los usuarios aunque permanezcan inactivos y, sin dar la contraseña al usuario, encargar a las aplicaciones la activación de los roles, proporcionando las contraseñas cuando sea necesario.
ALTER USER user_name DEFAULT ROLE {role_name [ , ... ]|ALL {EXCEPT role_name [ , ... ]|NONE};
SET ROLE {role_name [IDENTIFIED BY password][ ,... ]|ALL {EXCEPT role_name[ , ... ]|NONE};
-
DBA_ROLES: listado de los roles existentes en la base de datos.
-
DBA_APLICATION_ROLES: descripción de los roles que tienen los sistema de activación por medio de un paquete.
-
DBA_ROLE_PRIVS: roles asignados a usuarios o a otros roles.
-
ROLE_SYS_PRIVS: privilegios de sistema asignados a roles.
-
ROLE_TAB_PRIVS: privilegios de objeto asignados a roles.
-
ROLE_ROLE_PRIVS: roles asignados a otros roles.
-
SESION_ROLES: roles actualmente activos en la sesión.
Resumen
Glosario
- amenaza f
- Cualquier situación o suceso intencionado o accidental que pueda afectar de manera adversa al sistema y, en consecuencia, a la organización.
- autenticación f
- Mecanismo por el cual se determina si un usuario es quien dice ser.
- autorización f
- Concesión de un derecho o privilegio que permite a un sujeto acceder legítimamente al sistema o a un objeto del sistema.
- cifrado m
- Codificación de datos mediante un algoritmo especial que provoca que estos datos no sean legibles para ningún programa que no disponga de la clave de descifrado.
- heurístico -a adj.
- Cualidad de los métodos que utilizan el razonamiento y las experiencias pasadas para encontrar la mejor solución a un problema.
- mecanismo de copia de seguridad m
- Proceso de realizar de forma periódica una copia de la base de datos, del archivo de registro y, posiblemente, de algún programa, y almacenarla en un dispositivo de almacenamiento fuera de línea.
- optimización f
- Proceso por el cual se transforma una consulta en otra equivalente pero más eficiente. La optimización se puede realizar en el ámbito semántico, sintáctico y físico.
- plan de ejecución m
- Conjunto de operaciones (lógicas o físicas) necesarias para obtener el resultado de una consulta.
- registro m
- Proceso de mantener un diario donde se almacenen los cambios efectuados en la base de datos con el objetivo de realizar la recuperación de manera efectiva en caso de quiebra del sistema.
- vista f
- Resultado dinámico de una o más operaciones relacionales sobre una base de datos con el objetivo de producir otra relación.