You are on page 1of 50

UT5 – Creación de

otros objetos en la
base de datos
Sistemas Gestores de Bases de Datos
CREANDO VISTAS
1. Vistas
• Sentencia SELECT a la que se le asigna un
nombre.
• Funcionamiento similar a una tabla.
• Se usan para:
• Prohibir el acceso a datos confidenciales.
• Simplificar la formulación de consultas complejas o
repetitivas.
• Aumentar independencia de programas con respecto a
datos.

3
1. Vistas
• Tabla lógica que contiene información de otras tablas
denominadas tablas base.
• No contiene información por sí misma.
• Si se suprime una de las tablas bases la vista deja de funcionar.
2. Formato de una vista

5
3. Creación y uso de vistas
• Las vistas más sencillas son las que acceden a
una única tabla.
CREATE VIEW DEPTO130
AS SELECT NOMEM, SALAR
FROM TEMPLE
WHERE NUMDE=130;
¿Admite la vista creada consultas, borrados,
inserciones y actualizaciones? ¿Qué ocurre?
3. Creación y uso de vistas
• También se pueden crear dando el nombre a las
columnas.
CREATE OR REPLACE VIEW DEPT130 (NOMBRE, SALARIO) AS
SELECT NOMEM, SALAR
FROM TEMPLE
WHERE NUMDE=130;
3. Creación y uso de vistas
• Crea una vista que contenga los datos de los empleados de la
empresa que cobran más de 1500 euros. Realiza inserciones,
borrados y actualizaciones y comprueba lo que ocurre en la
tabla original.
3. Creación y uso de vistas
• WITH CHECK OPTION.
• Permite crear una vista que respete todas las condiciones
impuestas a la tabla original.
CREATE OR REPLACE VIEW DEP110
AS SELECT * FROM TEMPLE WHERE
NUMDE=110 WITH CHECK OPTION;
• Si intentamos alguna inserción que no respete las condiciones de
la tabla original obtendremos un error.
4. Vistas complejas.
• Son vistas cuya sentencia SELECT contiene uno o varios de los
siguientes elementos:
• Consultas definidas sobre varias tablas.
• Uso de GROUP BY O DISTINCT.
• Llamadas a funciones.
• Expresiones sobre columnas.
• Este tipo de vistas solo permite realizar consultas sobre ellas.
4. Vistas complejas.
• Crea la vista VMEDIA sobre las tablas TEMPLE y TDEPTO. Esta
vista contendrá, para cada departamento, el nombre, la media
de salarios del departamento y el máximo salario. Prueba a
realizar inserciones, borrados y actualizaciones sobre la vista.
Indica qué ocurre.
5. Borrado de Vistas
• Es posible borrar vistas mediante la sentencia:
• DROP VIEW nombreVista;
• Por ejemplo:
• DROP VIEW EMPLE120;
6. Sinónimos
• Podemos crear sinónimos para acceder a tablas.
• Para acceder a tablas de otro usuario sin tener que poner su
nombre delante.
• Por comodidad, con tablas de nombre largo por ejemplo.
• Un sinónimo es un nuevo nombre que se puede dar a una
tabla o vista, de esta manera la tabla podrá referenciarse por
su nombre o cualquiera de los sinónimos.
7. Vistas: Ejemplo
• Crear la vista VEMPLE2 con los números y nombres de
los empleados que hay en VEMPLE1.
CREATE VIEW VEMPLE2
AS SELECT NUMEM, NOMEM FROM VEMPLE1
• El usuario U1 desea crear una vista, VEMPLE3, con los
empleados de VEMPLE2 que tengan la palabra PEREZ en
su nombre. Además al número de empleado se le
llamará ID y al nombre NOMBRE, y este estará antes que
aquel.
CREATE VIEW VEMPLE3 (NOMBRE, ID)
AS SELECT NOMEM, NUMEM FROM VEMPLE2
WHERE NOMEM LIKE ‘%PEREZ%’

14
23. Vistas
• Eliminación de vistas.
• Formato: DROP VIEW nombre_vista
• Al eliminar una vista se eliminan también las posibles
vistas basadas en ella.
• Al eliminar una tabla también se pierden todas las
vistas basadas en dicha tabla.
• P.e: Eliminar la vista VEMPLE1
DROP VIEW VEMPLE1
Puesto que VEMPLE2 estaba basada en VEMPLE1
también será eliminada.

15
DANDO PERMISOS
Introducción
• Uno de los sublenguajes que forma SQL es el DCL (Data
Control Language)
• Permite dar permisos sobre objetos de la base de datos
• Formado por dos comandos:
• GRANT
• Añade permisos a un usuario
• REVOKE
• Elimina permisos de un usuario
• Pero antes de dar permisos necesitaremos crear usuarios….
CREANDO USUARIOS
CREACIÓN DE USUARIOS
• Normas generales:
• Debes tener el privilegio CREATE USER o INSERT en la base de
datos MySQL
• Si la variable global del sistema read_only está a cierto también
requiere el privilegio SUPER
• La sintaxis del comando fue expandida a partir de la versión 5.7.6
de MySQL
CREACIÓN DE USUARIOS
• Antes de MySQL 5.7.6
CREACIÓN DE USUARIOS
• Cada nueva cuenta inserta una fila en la tabla mysql.user
• Ejemplo: Creación de cuenta con el plugin de autenticación
por defecto y que el usuario tenga que cambiar en el siguiente
inicio de sesión

• Ejemplo: Creación de cuenta con el plugin de


sha256_password y pidiendo un cambio de contraseña cada
180 días.
CREACIÓN DE USUARIOS
• Ejemplo: Creación de usuario sin contraseña especificando un
determinado plugin

• ¿Cómo especificamos los nombres de las cuentas de usuario?


Especificando los nombres
de cuentas en MySQL
• El nombre de cuenta se forma con:
• ‘nombreUsuario’@’nombreMáquina’
• P.e: ‘isabel’@’localhost’
• El nombre de máquina se refiere a la máquina desde la que se
conecta el usuario
• No es necesario identificar el nombre de cuenta o de máquina
entre comillas simples en los siguientes casos:
• No contiene caracteres especiales o comodines
• ‘test-user’@’%.com’
• Son identificadores legales del lenguaje sin entrecomillar
• ‘select’@localhost
Especificando los nombres
de cuentas en MySQL
• Especificando los nombres de cuentas en MySQL
• Las cuentas de usuario se almacenan en la tabla USER del
esquema MySQL
Especificando los nombres
de cuentas en MySQL

• Los nombres de host pueden especificarse de diferentes


maneras y admiten comodines (% y _)
• Los comodines solo sustituyen direcciones IP no nombres de
equipo
• P.e: 192.168.1.%  Todos los host en la subnet
Especificando los nombres
de cuentas en MySQL

• Para saber más de creación de cuentas….


CREACIÓN DE USUARIOS POST
MYSQL 5.7.6

Descripción completa de opciones


CREACIÓN DE USUARIOS POST
MYSQL 5.7.6
• Podemos seguir usando la sintaxis anterior….

• O incorporar nuevas opciones….

• Las opciones omitidas toman los valores:


• Autenticación. Plugin de autenticación definido en la variable de
sistema default_authentication_plugin
• SSL/TSL. Ninguno
• Límite de recursos. Ninguno
• Duración de la contraseña. La especificada por defecto en la variable
de sistema default_password_lifetime
• Bloqueo de cuenta. Desbloqueada.
CREACIÓN DE USUARIOS POST
MYSQL 5.7.6
• Ejemplos:
• Creación de cuenta que solo podrá conectarse de manera
encriptada.

• Creación de cuenta para acceso mediante certificado X509.

• Creación de usuario con límite de recursos


CREACIÓN DE USUARIOS POST
MYSQL 5.7.6
• Ejemplos: Contraseñas
• Contraseña a cambiar en el siguiente inicio

• Contraseña con duración por defecto

• Contraseña nunca caduca

• Contraseña caduca cada N días


Modificando usuarios
• Requiere el privilegio global CREATE USER o el privilegio
UPDATE para el esquema de base de datos mysql.
• Si está activada la variable global read_only es necesario
poseer el privilegio SUPER
• Si el usuario no existe MySQL devuelve un error.
Modificando usuarios

Descripción completa de opciones


Modificando usuarios
• Ejemplos:
• Bloqueo Y liberación de cuenta

• Modificación de conexión solicitando SSL y limitando el número


de conexiones por hora

• Modificando máximo número de consultas y actualizaciones por


hora
Borrando usuarios
• Sintaxis

• Requiere el privilegio global CREATE USER o el privilegio


DELETE para el esquema de base de datos mysql.
• Si está activada la variable global read_only es necesario
poseer el privilegio SUPER
• Si el usuario no existe MySQL devuelve un error.
ASIGNANDO PRIVILEGIOS CON GRANT
Y REVOKE
Comando GRANT

• Privilegio. Por ejemplo, ALL, CREATE DATABASE, SELECT, INSERT,


DELETE, EXECUTE, CREATE VIEW ….
• Objeto. Puede ser cualquier objeto de la base de datos, una base de
datos, función, tabla, vista, procedimiento almacenado
• Usuario. Cualquier usuario de la base de datos. También se puede
especificar un rol en el caso de que se esté utilizando seguridad
basada en roles.
• WITH GRANT OPTION. Al especificarlo el usuario que recibe el
privilegio puede concedérselo a otros
Sintaxis GRANT MySQL
• La sintaxis del comando es más compleja
• Enlace Grant Syntax

• Para usar GRANT debes tener el privilegio GRANT OPTION


• Si la variable del systema read_only está activada GRANT
requiere el privilegio SUPER
Sintaxis GRANT MySQL
PRIVILEGIOS EN MYSQL
PRIVILEGIOS EN MYSQL
PRIVILEGIOS EN MYSQL
• Contexto y columnas en las tablas de GRANT
PRIVILEGIOS EN MYSQL
• Contexto y columnas en las tablas de GRANT
PRIVILEGIOS EN MYSQL
• Globales
• Privilegios administrativos que se aplican a todas las bases de
datos de un servidor
• Se asignan mediante ON *.*

• Los privilegios CREATE TABLESPACE, CREATE USER, FILE, PROCESS,


RELOAD, REPLICATION CLIENTE, REPLICATION SLAVE, SHOW
DATABASES, SHUTDOWN y SUPER son administrativos y
solamente se pueden conceder globalmente
• Se almacenan en la tabla user del esquema mysql
PRIVILEGIOS EN MYSQL
• De base de datos
• Se aplican a todos los objetos dentro de la base de datos
• Se asignan mediante ON nombre_base_de_datos.*

• Los privilegios CREATE, DROP, EVENT, GRANT_OPTION,


LOCK_TABLES and REFERENCES pueden especificarse a nivel de
base de datos.
• Los privilegios sobre TABLA o RUTINA (P.E: CREATE TABLE, CREATE
ROUTINE…) se pueden aplicar a este nivel afectando a todas las
tablas o rutinas de la base de datos
• La información sobre este tipo de privilegios se almacena en la
tabla mysql.db
PRIVILEGIOS EN MYSQL
• A nivel de tabla
• Se aplica a todas las columnas de una tabla
• Asignados mediante ON nombre_base_de_datos.nombre_tabla

• Los privilegios permitidos son ALTER, CREATE VIEW, CREATE,


DELETE, DROP, GRANT OPTION, INDEX, INSER, REFERENCES,
SELECT, SHOW VIEW, TRIGGER y UPDATE
• Se almacenan en mysql.tables_priv
PRIVILEGIOS EN MYSQL
• A nivel de columna
• Se aplican a columnas de una tabla dada

• Privilegios aplicables: INSERT, REFERENCES, SELECT y UPDATE


• Se almacena en la tabla mysql.columns_priv
• A nivel de procedimientos almacenados
• Se aplican a todas las rutinas (procedimientos y funciones) a nivel
global o de base de datos

• Privilegios aplicables: ALTER ROUTINE, EXECUTE, CREATE


ROUTINE.
• Se almacenan en la tabla mysql.procs_priv
PRIVILEGIOS EN MYSQL
• Privilegios a nivel de proxy
• Permite a un usuario actuar como un representante para otro. El
usuario representado toma la identidad del representante

• Cuando se utiliza debe ser el único privilegio nombrado en la


sentencia GRANT, no permite la opción REQUIRE.
• Se almacenan en la tabla mysql.proxies_priv
• Más información sobre Usuarios Proxy
Comando REVOKE

• Privilegio. Permiso a eliminar. El comando eliminará tanto los


permisos concedidos con GRANT como las denegaciones
establecidas con DENY.
• Objeto. Puede ser cualquier objeto de la base de datos, una
base de datos, función, tabla, vista, procedimiento
almacenado
• Usuario. Cualquier usuario de la base de datos. También se
puede especificar un rol en el caso de que se esté utilizando
seguridad basada en roles.
Comando REVOKE

• GRANT OPTION FOR. Si se especifica elimina también la


habilidad del usuario para conceder el permiso a terceros.
• ¡Cuidado! Al especificar esta clausula eliminamos la habilidad
para conceder permisos a terceros pero no el permiso en sí que
tendrá que ser especificado en otra sentencia.
• CASCADE. Elimina el permiso para cualquier usuario al que el
usuario revocado ha concedido el permiso.
Sintaxis REVOKE MySQL

• Cuando la variable del sistema read_only está activa REVOKE


requiere el privilegio SUPER
• Además es necesario tener los privilegios que estás revocando

You might also like