Está en la página 1de 49

Bases de datos

Capítulo 4: SQL Intermedio


Contenido

• Expresiones de reunión
• Vistas
• Transacciones
• Restricciones de integridad
• Tipos de datos y esquemas de SQL
• Autorización

2
Expresiones de reunión
• En capítulo anterior se vio reunión natural
• SQL proporciona otras formas de reunión que permiten:
– Especificar predicados
– Incluir tuplas que excluye la reunión natural
• Condiciones de reunión
– SQL permite la reunión donde se pueden especificar condiciones arbitrarias:
from relación1 join relación2 on predicado

• Equivalente a: (el atributo ID aparece 2 veces: estudiante.ID y matricula.ID)

3
Reunión externa
• La operación de reunión, no conserva las tuplas que no casan
• La operación reunión externa (outer join) sí conserva tuplas que no casan, creando tuplas en el resultado
que contienen null en los atributos de esas tuplas que no casan.
• Tres formas de reunión externa:
– Reunión externa izquierda (left outer join)
– Reunión externa derecha (right outer join)
– Reunión externa completa (full outer join).
• Reunión externa izquierda
– Primero se calcula el resultado de la reunión interna
– Para cada tupla t en la parte izquierda de la relación que no casa con ninguna tupla de la parte
derecha en una reunión interna (y se perdería), se añade una tupla r al resultado, que se construye de
la siguiente forma:
• Los atributos de la tupla r que se derivan de la relación de la parte izquierda se rellenan con los
valores de la tupla t
• El resto de atributos de r se rellenan con valores null
• La reunión externa derecha es simétrica a la reunión externa izquierda. La reunión externa completa es
una combinación de la reunión externa derecha e izquierda.
4
Reunión externa - Ejemplo
• Relación course

• Relación prereq

• Observando los valores del atributo común course_id:


– En course, aparece el valor CS-315, y este valor no está en prereq
– En prereq, aparece el valor CS-347, y este valor no está en course
• Haciendo la reunión interna, los valores de esas dos tuplas no estarían en el resultado

5
Reunión externa - Ejemplo
• Reunión interna
course inner join prereq on
course.course_id = prereq.course_id

• Ha desaparecido información de las tuplas tachadas:

6
Reunión externa - Ejemplo
• Reunión externa
course natural left outer join prereq

course natural right outer join prereq

course natural full outer join prereq

7
Tipos de reunión y condiciones
• Para distinguir las reuniones internas y externas, se utiliza inner join y outer join.
• La condición on permite la reunión utilizando un predicado sobre relaciones:
from relación1 join relación2 on predicado

• Recopilación: Tipos y condiciones de reunión


– Condiciones de reunión: define qué tuplas de las dos relaciones concuerdan y que
atributos aparecen en el resultado de la unión
– Tipos de reunión: define cómo tratar las tuplas de cada relación que no concuerdan con
tuplas de la otra relación (tiendo también en cuenta la condiciones de reunión)

8
Reunión interna vs reunión natural

• Inner join

• Natural join: atributo IDDepartamento se muestra una vez

9
Vistas
• Por motivos de seguridad o de trabajo se puede requerir que ciertos datos de la base de
datos queden ocultos a determinados usuarios.
• SQL permite definir una relación virtual que contenga el resultado de una consulta.
• Una relación como esta que no forma parte del modelo lógico pero se hace visible a los
usuarios como una relación virtual se denomina vista.
• Es posible manejar un gran número de vistas sobre cualquier conjunto de relaciones reales.
• La relación virtual no se precalcula ni se almacena, sino que se calcula ejecutando la
consulta cuando la vista se utiliza.
– El sistema de bases de datos almacena la expresión de la consulta asociada a la relación
de la vista.
– Siempre que se accede a la relación de la vista se crea cuando se necesita, bajo demanda.

10
Definición de vistas
• En SQL se define una vista usando el comando create view
• Para ello se debe dar un nombre a la vista (nombre_vista ) e indicar la consulta que la calcula, su
formato es:
create view nombre_vista as <expresión de consulta>

Ejemplo: Crear una vista que permita acceder a todos los datos de la relación profesor, excepto el
sueldo

Ejemplo: crear una vista con la lista de todas las secciones de asignaturas que ofertó el departamento
de Física en el semestre del otoño de 2009 con su edificio y el nombre del aula de cada sección

11
Definición de vistas
• Se puede utilizar una vista en una expresión que define otra vista.

12
Uso de vistas
• El nombre de la vista se utiliza para hacer referencia a la relación virtual que genera
• Los nombres de las vistas pueden emplearse en cualquier lugar en el que puedan hacerlo los
nombres de las relaciones
– Los nombres de los atributos de las vistas se pueden especificar explícitamente

Ejemplo: crear vista departamentos_total_sueldos con dos atributos con nombres:


nombre_dept y total_sueldo

13
Actualización de vistas
• Aunque las vistas resultan una herramienta ítil para las consultas, presentan serios
problemas si se expresan con ellas actualizaciones, inserciones o borrados.
• La dificultad radica en que las modificaciones de la base de datos expresadas en términos de
vistas deben traducirse en modificaciones de las relaciones reales del modelo lógico de la
base de datos.
• En general se dice que una vista de SQL es actualizable (es decir, se pueden aplicar
inserciones, actualizaciones y borrados) si se cumplen todas las condiciones siguientes:
– La cláusula from solo tiene una relación de bases de datos.
– La cláusula select solo contiene nombres de atributos de la relación y no tiene ninguna
expresión, valor agregado ni especificación distinct.
– Cualquier atributo que no aparezca en la cláusula select puede definirse como null, es
decir, no contiene ninguna restricción not null y no forma parte de una clave primaria.
– La consulta no tiene cláusulas group by ni having.

14
Vistas materializadas
• Vista materializada:
– Algunos sistemas de bases de datos permiten que se guarden las relaciones de vista,
pero se aseguran de que si las relaciones reales utilizadas en la definición de la vista
cambian, la vista se mantenga actualizada
• Este proceso se denomina mantenimiento de vistas materializadas o mantenimiento
de vistas

• Las ventajas para las consultas de vistas materializadas deben sopesarse frente a:
– Costes de almacenamiento y la
– Sobrecarga de trabajo añadida por las actualizaciones

• SQL no define ninguna forma estándar de especificar que una vista es materializada.
– Transact-SQL: CREATE MATERIALIZED VIEW

15
Actualización de vistas
• Las vistas presentan serios problemas si se expresan con ellas actualizaciones, inserciones o
borrados
• La dificultad radica en que las modificaciones de la base de datos, expresadas en términos
de vistas, deben traducirse en modificaciones de las relaciones reales y la vista sólo da
acceso a una parte de ellos (¿añadir null resto atributos?).
• Debido a este problema no se suelen permitir las actualizaciones de las relaciones de
vistas, salvo en casos concretos
• Los diferentes sistemas de bases de datos especifican condiciones para permitir las
actualizaciones de las relaciones de vistas
• Existen condiciones generales para que una vista de SQL sea actualizable, pero incluso con
estas condiciones pueden seguir existiendo problemas.

16
Actualización de vistas
• Algunas actualizaciones no pueden hacerse de forma única
Ejemplo: en la vista profesor_info de dos tablas definida como:

– Si se actualiza con:

• ¿En qué departamento del edificio Taylor?


• ¿Qué ocurre si no hay departamentos en Taylor?

17
Transacciones
• Una transacción consiste en una secuencia de instrucciones de consulta o de actualización
• Sentencias para finalizar una transacción:
– Rollback work (retroceso), deshace todas las actualizaciones realizadas por la transacción
– Commit work (compromiso), hace que las actualizaciones realizadas por la transacción pasen a ser
permanentes en la base de datos. Sus efectos ya no se pueden deshacer con rollback
• La base de datos proporciona una abstracción de que la transacción es atómica (indivisible)
– Se ejecuta completamente o no tiene ningún efecto
• En muchas implementaciones de SQL, cada instrucción se considera como una transacción y se
compromete en cuanto se ejecuta
– Posible desactivar si son varias instrucciones seguidas
• En SQL:1999, se puede usar: begin atomic …. End
– Encerrar varias instrucciones SQL y formar una única transacción
• Se ejecutan todas o no tiene efecto ninguna
– No está soportada para la mayoría de los sistemas de bases de datos

18
Restricciones de integridad
• Garantizan que las modificaciones realizadas en la base de datos no den lugar a una pérdida
de la consistencia de los datos.
– Ejemplos:
• El sueldo debe ser mayor de 20.000€
• El atributo teléfono de un cliente no puede ser null
• Un atributo no puede tener valores repetidos
• Las restricciones de integridad suelen identificarse como parte del proceso de diseño del
esquema de la base de datos, y se declaran como parte del comando create table
– También se pueden añadir restricciones a relaciones existentes
alter table nombre-tabla add restricción
• Cuando se ejecuta uno de estos comandos, el sistema primero se asegura que la relación
existente y su contenido satisface la restricción indicada:
– Si se cumple se añade la restricción a la relación
– Si no se cumple el comando se rechaza y no se añade restricción

19
Restricciones sobre una relación
• El comando create table puede incluir instrucciones para restricciones de integridad
– not null : no permitir valores nulos
– primary key : definir los atributos que forman clave primaria
– unique : atributos que forman clave candidata (permite null)
– check(P) : predicado P que debe satisfacer tuplas de la relación

Ejemplo: los atributos nombre y presupuesto no admiten valores nulos (not null)

Ejemplo: el atributo presupuesto tiene que ser positivo y no 0. (check(P))

20
Restricciones sobre una relación
Ejemplo: check y primary key:
– El atributo semestre puede tomar únicamente los valores “Otoño”, “Invierno”,
“Primavera” y “Verano”
– La clave primaria está compuesta por los atributos asignatura_id, secc_id, semestre, año.

21
Integridad referencial
• Integridad referencial: garantizar que el valor que aparece en una relación para un
conjunto dado de atributos aparezca también para un conjunto determinado de atributos
en otra relación
• Las claves externas pueden especificarse como parte de la instrucción create table
mediante la cláusula foreign key.
– Las claves externas hacen referencia a los atributos de la clave primaria de la tabla
referenciada.
Ejemplo: declaración de clave externa especifica que para cada tupla de asignatura, el
nombre de departamento (nombre_dept) especificado en la tupla debe existir en la relación
departamento

22
Integridad referencial
• Recordemos qué es foreign key (clave externa)
– Sea A un conjunto de atributos
– Sean R y S dos relaciones que contienen el conjunto de atributos A
• El conjunto de atributos A es clave primaria de la relación S
– Se dice que A es clave externa de R, si para cualquier valor que aparezca en el conjunto
A de R, ese valor también aparece en S
Ejemplo: edificio y numero_aula es
clave externa en la relación seccion

23
Integridad referencial - Acciones
• Cuando se viola una restricción de integridad referencial:
– El procedimiento normal es rechazar la acción que ha causado esa violación

• Sin embargo, la cláusula foreign key puede especificar qué hacer si una acción de borrado o
de actualización viola una restricción:
– En lugar de rechazar la acción, el sistema lleva a cabo los pasos necesarios para modificar
la tupla de la relación que hace la referencia para que se restaure la restricción.
– Si hay una cadena de dependencias de clave externa que afecta a varias relaciones, el
borrado o la actualización de un extremo de la cadena puede propagarse por toda ella.
[ ON DELETE { NO ACTION | CASCADE | SET NULL | SET DEFAULT } ]
[ ON UPDATE { NO ACTION | CASCADE | SET NULL | SET DEFAULT } ]

24
Integridad referencial - Acciones en cascada
Ejemplo:

– Si el borrado de una tupla de departamento da lugar a que se viole la restricción de integridad


referencial:
• El sistema no rechaza el borrado.
• El borrado afecta en “cascada” a la relación asignatura, borrando la tupla que hace referencia al
departamento que se ha borrado
– Si se modifica el nombre_dept en relación la departamento se modifica también en todas las
tuplas de asignatura donde aparezca

• Alternativas:
on delete { no action | cascade | set null | set default }
on update { no action | cascade | set null | set default }

25
Integridad referencial - Acciones
Ejemplos:

26
Violación restricción de integridad durante transacción (1/2)

• Las transacciones pueden constar de varios pasos, y las restricciones de integridad pueden
violarse temporalmente tras uno de los pasos, pero puede que uno posterior subsane la
violación
Ejemplo:
create table persona (
ID char(10),
nombre char(40),
conyuge char(10),
primary key ID,
foreign key conyuge references persona)
– Si se añade a una pareja casada, siempre da problemas de integridad referencial el
primero que se añada, pq no está su conyuge todavía
• Soluciones posibles:
– Permitir valores null
– Diferir la comprobación de la restricción al final de la transacción

27
Violación restricción de integridad durante transacción (2/2)
• Para tratar estas situaciones SQL permite que se añada la cláusula initially deferred a la
especificación de la restricción (la restricción se comprueba al final de la transacción y no en
los pasos intermedios).
• Para las restricciones declaradas como diferibles, la ejecución de la instrucción:
set constraints lista_restricciones deferred
hace que se difiera la comprobación de las restricciones especificadas hasta el final de esa
transacción
• A pesar de ello, el comportamiento predeterminado es comprobar las restricciones de
manera inmediata (muchas implementaciones no soportan la comprobación diferida)

28
Condiciones de comprobación complejas y asertos
• SQL soporta construcciones adicionales para especificar las restricciones de integridad
• Check:
– Como se define en la norma de SQL, el predicado de la cláusula check puede ser un
predicado arbitrario, que puede incluir una subconsulta.
– La condición de check verifica que el franja_horaria_id de las tuplas en la relación sección
es realmente el identificador de una franja horaria en la relación franja_horaria

• Las condiciones check complejas pueden ser útiles cuando se desea asegurar la integridad
de los datos, pero puede ser costoso comprobarlo. Por ejemplo, el predicado de la cláusula
check no solo tiene que evaluarse cuando se realiza una modificación en la relación sección,
sino que puede que tenga que comprobarse si se realiza una modificación en la relación
franja_horaria, ya que esta relación se referencia en la subconsulta.

29
Condiciones de comprobación complejas y asertos
• Aserto: predicado que expresa una condición que la base de datos debe satisfacer siempre
– Restricciones de dominio y las de integridad referencial son formas especiales de
asertos
• En SQL los asertos adoptan la forma:
create assertion <nombre_aserto> check <predicado>
• Cuando se crea un aserto, el sistema comprueba su validez
– Si el aserto es válido, solo se permiten las modificaciones de la base de datos que no
hagan que se viole el aserto
– Esta comprobación puede producir una sobrecarga si el aserto es complejo (los asertos
deben utilizarse con mucha cautela).
• Hay que comprobar si el sistema de bases de datos soporta las subconsultas en el
predicado de la cláusula check, o las construcciones assertion.
• Se puede implementar una funcionalidad equivalente usando disparadores, si dispone de
ellos el sistema de bases de datos (se ven más adelante)

30
Tipos de datos de SQL – Fecha y hora
• SQL soporta tipos de datos relacionados con fecha y hora
– date: fechas en formato año (4 dígitos), mes y dia
• Ejemplo: date ‘2020-07-27’
– time: hora del día en formato horas, minutos y segundos
• Ejemplo: time ‘09:00:30’ time ‘09:00:30.75’
– timestamp: fecha más la hora
• Ejemplo: timestamp ‘2005-7-27 09:00:30.75’
– interval: intervalo de tiempo
• Ejemplo: interval ‘1’ day
• Restar valores date-time-timestamp devuelve un intervalo
• Intervalo se pueden sumar/restar a valores date-time-timestamp

31
Tipos de datos de SQL – Fecha y hora
• SQL proporciona clausulas para trabajar con tipos de fecha y hora
• Convertir una cadena de texto a tipos de fecha y hora
– cast e as t
• e cadena de texto
• t tipo date, time o timestamp
• Extraer campo
– extract( campo from d)
• Donde campo puede ser year, month, day , hour, minute o second.
• d valor de tipo time o date
• Funciones para obtener la fecha y hora actuales:
– current_date (fecha actual), current_time (hora actual con uso horario), localtime (hora
local sin uso horario), current_timestamp (con huso horario) y localtimestamp (fecha y
hora locales sin huso horario).

32
Tipos de datos de SQL - Valores predeterminados
• SQL permite especificar un valor predeterminado para un atributo, como se muestra en la
siguiente sentencia create table:
– El valor predeterminado del atributo tot_creditos se declara como 0

– Si se inserta una tupla en la relación estudiante, sin proporcionar un valor para el atributo
tot_créditos su valor se pone a 0

33
Tipos de datos de SQL – Objetos grandes
• Muchas aplicaciones de bases de datos de última generación necesitan almacenar atributos
que pueden ser grandes en tamaño
• Fotos, audios, videos, CAD, documentos, etc.
• SQL ofrece nuevos tipos de datos para objetos de gran tamaño:
– clob : datos de caracteres
– blob: datos binarios lob: large object
c: carácter
b: binario

• Las aplicaciones suelen utilizar las consultas SQL para recuperar “localizadores” o “punteros”
de los objetos de gran tamaño
– Emplean el puntero para manipular el objeto desde el lenguaje anfitrión en que está
escrita la aplicación

34
Tipos de datos de SQL – Definidos por el usuario
• SQL soporta dos formas de tipos de datos definidos por los usuarios
– Alias de tipos (distinct types)
– Tipos de datos estructurados: permite la creación de tipos de datos complejos, que
pueden anidar estructuras de registro, arrays y multiconjuntos (Cap 22, 3er curso)
• La cláusula create type se utiliza para definir tipos de datos nuevos:
create type <nombre de tipo> as <tipo de datos> final

• SQL también ofrece las cláusulas:


– drop type : eliminar tipo
– alter type : modificar tipo
35
Tipos de datos de SQL – Definidos por el usuario
• SQL también usa el concepto de dominio (se incorporó a SQL antes)
• La clausula create domain permite definir dominios

• Los dominios:
– Permiten especificar restricciones como not null

– Permiten definir valores predeterminados en variables del tipo


– Los domininios no tienen tipos estrictos
• Los tipos definidos por el usuario no permiten operar con tipos distintos aunque
internamente sean iguales (tipos estrictos)
No se pueden sumar
Euros con Libras
– Impide que se cometan ciertos errores de programación
36
Creación de índices
• Un índice sobre un atributo de una relación, es una estructura de datos que permite
encontrar tuplas de la relación con un determinado valor de ese atributo, de forma
eficiente y sin tener que recorrer todas las tuplas de la relación
– En Capítulo 11 se ve cómo se implementan realmente
• SQL no define formalmente ninguna sintaxis para la creación de índices, muchas bases de
datos soportan la creación de índices con la siguiente sintaxis:

– Crea un índice denominado estudianteiD _índice sobre el atributo ID de la relación


estudiante
• El procesador de consultas de SQL utiliza automáticamente el índice

37
Extensiones a la creación de tablas
• SQL proporciona la extensión create table like para la creación de tablas que tienen el
mismo esquema que una ya existente:
create table <nueva tabla> like <tabla>
Ejemplo: crear la tabla temp_profesor con = esquema que profesor

• Utilidad: guardar resultado de consulta como una nueva tabla


1. Una sentencia para crear la nueva tabla
2. Una sentencia para insertar el resultado de consulta en la tabla
• Alternativa: usar la clausula with data
create table <nueva tabla> as (consulta) with data
Ejemplo: crear tabla t1 con los profesores departamento de “Musica”

38
Esquemas, catálogos y entornos
• Para realizar cualquier acción sobre una base de datos los usuarios deben conectarse a ella
proporcionando un nombre de usuario y contraseña
• Una vez conectado, para los nombres de las relaciones de las relaciones se utiliza una
jerarquía de tres niveles:
1. Catálogo
2. Esquema
3. Relación
• Para identificar de manera única cada relación hay que utilizar un nombre con tres partes.
Ejemplo: acceder al catalogo catalogo5, al esquema univ_esquema y a la relación
asignatura:

• Catálogo y esquema suelen tomar valores por defecto asociados a la conexión

39
Autorización de acceso a la base de datos
• Se pueden asignar a los usuarios varios tipos de autorización para diferentes partes de la
base de datos.
• Las autorizaciones sobre datos incluyen:
– lectura de datos
– inserción de datos
– actualización de datos
– borrado de datos.
• Cada uno de estos tipos de autorización se denomina privilegio, que se pueden establecer
para relaciones y vistas.
• Cuando un usuario envía una consulta o una actualización, SQL comprueba si el usuario está
autorizado
• Un usuario que disponga de alguna forma de autorización puede autorizar a otros usuarios
o revocar autorizaciones
• El último elemento de autoridad es el administrador de la base de datos (puede autorizar
nuevos usuarios, reestructurar la base de datos y mucho más).

40
Autorización de acceso a la base de datos
• Lista de privilegios sobre partes de la base de datos
– select Permite lectura, pero no la modificación de los datos
– insert Permite insertar nuevos datos, pero no modificar existentes
– update Permite modificar, pero no borrar los datos
– delete Permite borrar datos
– all privileges Todos los privilegios posibles

• Lista de privilegios para modificar el esquema de la base de datos


– index Permite la creación y borrado de índices
– resources Permite la creación de nuevas relaciones
– alteration Permite añadir y borrar atributos en una relación
– drop Permite borrar relaciones

41
Autorización – Concesión y revocación de privilegios
• El estamento grant se usa para otorgar autorización

• <lista de privilegios> : (diapositiva anterior)


• <lista de usuarios o de roles>:
– Un user-id
– public autoriza a todos los usuarios
– Un rol (se ven más adelante)
• Asignar una autorización a una vista, no implica autorización sobre las relaciones
empleadas en esa vista.
• El otorgante del privilegio debe tener ya el privilegio sobre el elemento especificado (o ser
el administrador de la base de datos)

42
Autorización – Concesión y revocación de privilegios
• El estamento revoke se usa para quitar autorización

– <lista de privilegios> también se puede usar all


Ejemplos:
– Otorgar privilegios:

– Quitar privilegios:

• La revocación de privilegios resulta más compleja si el usuario al que se le revocan los privilegios se
los ha concedido a otros usuarios

43
Roles
• Para facilitar la gestión de privilegios se crean tipos de usuarios
• La base de datos permite definir roles (función que algo desempeña)
– A los roles se le puede asignar privilegios
– A los usuarios se les puede asignar uno o varios roles
• Ejemplo: Administrador, profesor, estudiante, visitante, etc.
• En SQL se usa la clausula create rol
Ejemplos:
– Crear un rol:
– Asignar privilegios a un rol:

– Conceder roles a usuarios y a otros roles

44
Autorización sobre vistas
• Un usuario que crea una vista no necesariamente recibe todos los privilegios sobre dicha
vista:
– Recibe los privilegios que ya tiene sobre las relaciones de la vista
Ejemplo:
– Crear la vista geo_instructor:

– Asignar autorización de lectura al rol geo_staff:

– Si ahora un usuario con el rol de geo_staff ejecuta:

• ¿Qué ocurre si el rol geo_staff no tiene privilegio de lectura sobre la relación


instructor?
45
Autorizaciones sobre esquemas
• SQL especifica un mecanismo de autorización para el esquema de la base de datos:
– Solo el propietario del esquema puede realizar modificaciones en el mismo, como crear
o borrar relaciones, añadir y eliminar atributos y añadir o eliminar índices
• SQL incluye privilegio para crear claves externas: references
– Importante para evitar problemas futuros de integridad referencial

Ejemplo: Permitir definir el atributo nombre_dept de la relación departamento como clave


externa al usuario Mariano.

46
Autorizaciones sobre funciones y procedimientos
• SQL soporta la creación de funciones y procedimientos
– Pueden, a su vez, contener consultas y actualizaciones
• execute: privilegio para la ejecución de una función o procedimiento
• De forma predeterminada, como con las vistas, las funciones y procedimientos tienen
todos los privilegios que tenía su creador
– La función o procedimiento se ejecuta como si lo invocase el usuario que los creó
• Si la definición de la función tiene una cláusula extra sql security invoker, entonces se
ejecuta con los privilegios del usuario que invoca la función, en lugar de con los privilegios
de quien define la función
– Permite al administrador u otro usuario la creación de bibliotecas de funciones sin el
peligro de tener los privilegios de su creador

47
Transferencia de privilegios
• De manera predeterminada, un privilegio que se concede a un usuario o a un rol no se
puede trasladar a otros usuarios o roles
• La clausula with grant option añadida al final del comando grant permite al receptor del
privilegio transferirlo a otros:
Ejemplo: conceder a Amit el privilegio select sobre departamento y permitir que Amit pueda
conceder este privilegio a otros:

• El creador de un objeto (relación/vista/rol) mantiene todos los privilegios sobre el objeto,


incluyendo el privilegio de conceder privilegios a otros.
• Grafo de concesión autorización:
– ABD: Administrador
– Ui : Usuario

48
Revocación de privilegios
• Por defecto, la revocación de un privilegio de un usuario o rol causa que otros usuarios o
roles también lo pierdan (revocación en cascada)
– restrict : clausula usada en la sentencia revoke para evitar que se produzca revocación
en cascada
revoke select on <relación> from <usuario> restrict
– cascade: fuerza revocación en cascada (valor defecto, no necesario)
Ejemplo:
– Conceder a Amit el privilegio select sobre departamento y permitir que Amit pueda
conceder este privilegio a otros:

– Revocar la concesión de privilegio select a Amit y Satoshi

49

También podría gustarte