ABD Capitulo 2 Acceso a La Información 2013
-
Upload
sebastian-rubio-gonzalez -
Category
Documents
-
view
218 -
download
0
description
Transcript of ABD Capitulo 2 Acceso a La Información 2013
10/11/2013
1
Capítulo 2
ACCESO A LA INFORMACIÓN
En los sistemas actuales, la seguridad de acceso a la informaciónde una base de datos contempla dos tipos de mecanismos:
• Seguridad integrada: Proporcionada por el Sistema Operativobajo el que se está trabajando mediante un sistema de usuarios ypermisos junto con un servicio de directorios LDAP (LightweightDirectory Access Protocol - Protocolo Ligero de Acceso aDirectorios).
• Seguridad nativa: Propia del SGBD que consiste en un softwaredel servidor que controla las autorizaciones a los distintosusuarios para acceder a los distintos elementos de una base dedatos.
10/11/2013
2
Una Vista es una tabla virtual sin contenido de la que sólo sealmacena su definición de manera que cuando se hace referenciaa ella como tabla, se ejecuta la sentencia SQL asociada a ella.
La diferencia entre ejecutar una sentencia SQL y una vista es quela sentencia se tiene que compilar y ejecutar mientras que la vistaya está compilada cuando se almacena, por lo que el tiempo deejecución es menor en la vista que en la sentencia.
Otra ventaja que tienen las vistas es que permiten definiresquemas externos para los grupos de usuarios que se tienen enun sistema de bases de datos con lo que se puede controlar elacceso a los datos que en cada caso sean necesarios.
Vista:Create view VISTA_EMPLE as
Select NUM_EMP, NOMBRE, SALARIO
From EMPLEADOS;
Tabla base:EMPLEADOS;
UsuarioUsuario
10/11/2013
3
Sintaxis para crear una vistaSintaxis para crear una vista
CREATE [OR REPLACE] VIEW
[Esquema.]Nombre_vista [lista de columnas] AS
Sentencia select;
Ejemplo:
CREATE VIEW EMPLE20 AS
SELECT NUM_EMP, APELLIDO, CATEGORIA, SALARIO
FROM EMPLEADOS
WHERE NUM_DEPT=20;
La ejecución de la sentencia CREATE VIEW hace que secompile la sentencia SELECT y se almacena ya compilada.
Sintaxis para eliminar una vistaSintaxis para eliminar una vista
DROP VIEW [Esquema.]Nombre_vista;
Ejemplo:
DROP VIEW EMPLE20;
Existe también posibilidad de modificar la definición de unavista con la sentencia ALTER VIEW.
10/11/2013
4
2.3. Los usuarios2.3. Los usuarios
Un Usuario en un Sistema de Bases de Datos es una cuenta através de la cual una persona puede conectarse al SGBD paramanejar los objetos de una base de datos a los que tenga acceso.
Para crear una cuenta de usuario se utiliza la sentencia:
CREATE USER Nombre_usuario
IDENTIFIED BY Password [opciones];
Crear y eliminar un usuarioCrear y eliminar un usuario
Ejemplos:
CREATE USER USUARIO1 IDENTIFIED BY ‘USUARIO1’; (MySQL)
CREATE USER USUARIO1 IDENTIFIED BY USUARIO1
DEFAULT TABLESPACE DATOS_USUARIO1
TEMPORARY TABLESPACE TEMP
QUOTA UNLIMITED ON DATOS_USUARIO1; (Oracle)
Para borrar un usuario:
DROP USER Nombre_usuario [CASCADE];
DROP USER USUARIO1; CASCADE se incluye para indicarque junto al usuario se eliminentodos sus objetos.
10/11/2013
5
Modificar un usuarioModificar un usuario
Para modificar un usuario se utiliza ALTER USER que tiene lasmismas opciones que CREATE USER. (No existe en MySQL).
Por ejemplo, para cambiar la password de un usuario:
ALTER USER Nombre_usuario
IDENTIFIED BY Nueva_password;
Es importante recordar que para ejecutarestas instrucciones hay que estarconectado al SGBD como administrador.
Modificar un usuario enModificar un usuario en MySQLMySQL
Para modificar un usuario en MySQL hay que hacerlo modificandoel dato en la tabla user del esquema mysql o bien utilizandoMySQL Administrator.
Por ejemplo, para cambiar la password de un usuario:
UPDATE mysql.user
set password=PASSWORD(’nueva_password’)
where user=‘Nombre_usuario’;FLUSH PRIVILEGES;
En MySQL cuando se cambia algún valor deuna tabla del sistema hay que ejecutar elcomando FLUSH PRIVILEGES
10/11/2013
6
Modificar un usuario enModificar un usuario en MySQLMySQL
Modificar un usuario en MySQLModificar un usuario en MySQL
Para cambiar el nombre de un usuario conservando todos susprivilegios se utiliza el comando:
RENAME USER Nombre_antiguo TONombre_nuevo;
Para cambiar la password de un usuario también se utiliza:
SET PASSWORD for Nombre_usuario =
PASSWORD(‘Nueva_password’);
10/11/2013
7
2.4. Los privilegios2.4. Los privilegios
Son los permisos que se conceden a un usuario para poder realizaruna acción o manipular un determinado objeto de una Base deDatos.
Para conceder privilegios se utiliza la sentencia GRANT.
Para retirar privilegios se utiliza la sentencia REVOKE.
Estas sentencias pueden variar ligeramente según el SGBD que seesté utilizando.
2.4.1. El sistema de privilegios de2.4.1. El sistema de privilegios de MySQLMySQL
La sintaxis de la sentencia GRANT en MySQL es:
GRANT tipo_privilegio [(columnas)], ...
ON {nombre_tabla|*|*.*|esquema.*|esquema.nombre_tabla}
TO usuario [IDENTIFIED BY [password] ‘password’], ...
WITH opcion [opcion] ...
Donde opción puede ser:
GRANT OPTION
|MAX_QUERIES_PER_HOUR valor
|MAX_UPDATES_PER_HOUR valor
|MAX_CONNECTIONS_PER_HOUR valor
|MAX_USER_CONNECTIONS valor
En MySQL es posible conceder permisos aun usuario a nivel de esquema o base dedatos, tabla o columna de tabla.
10/11/2013
8
ElEl sistema de privilegios desistema de privilegios de MySQLMySQLEjemplo:
GRANT SELECT (num_emp, apellido, salario, num_dept)
ON empleados
TO prueba;
Privilegios típicos:
SELECT, INSERT y UPDATE
Se pueden aplicar a:
Nombre_tabla Afecta a una tabla.* Afecta a todas las tablas del esquema utilizado.*.* Afecta a todas las tablas de todos los esquemas.Esquema.* Afecta a todas las tablas del esquema referenciado.Esquema.nom_tabla Afecta a la tabla del esquema referenciado.
ElEl sistema de privilegios desistema de privilegios de MySQLMySQL
Ejemplos:
GRANT SELECT, INSERT ON test.* TO prueba;
GRANT ALL PRIVILEGES ON test.empleados TO prueba;
GRANT SELECT ON *.* TO prueba WITH GRANT OPTION;
GRANT SELECT, INSERT, UPDATE, DELETE
ON test.* TO prueba
WITH MAX_QUERIES_PER_HOUR 10 MAX_UPDATES_PER_HOUR 10;
Ver cuadro 2.2 (pág. 61) con las opciones adicionales a los permisos.Ver cuadro 2.3 (pág. 62) con los tipos de permisos en MySQL.
10/11/2013
9
ElEl sistema de privilegios desistema de privilegios de MySQLMySQLLa sintaxis de la sentencia REVOKE en MySQL es:
REVOKE tipo_privilegio [(columnas)], ...
ON {nombre_tabla|*|*.*|esquema.*|esquema.nombre_tabla}
FROM usuario [, usuario] ...;
Ejemplos:
REVOKE SELECT, INSERT ON test.* FROM prueba;
REVOKE ALL PRIVILEGES ON test.empleados FROM prueba;
REVOKE SELECT ON *.* FROM prueba;
REVOKE SELECT, INSERT, UPDATE, DELETE
ON test.* FROM prueba;
También se pueden manipular los permisos mediante tablas delcatálogo de MySQL que se encuentran en el esquema mysql. Lastablas son: user, db, host, tables_priv y colums_priv.
ElEl sistema de privilegios desistema de privilegios de MySQLMySQL
10/11/2013
10
ElEl sistema de privilegios desistema de privilegios de MySQLMySQLAutorización de ejecución de consulta
Consulta de permisos en la tabla user
Consulta de permisos en las tablas db y host
Consulta de permisos en la tabla tables_priv
Consulta de permisos en la tabla columns_priv
¿Hay permisos?
¿Hay permisos?
¿Hay permisos?
¿Hay permisos?
Devuelveresultados
Grado2: Consulta de permisosa nivel db.* y @host
Devuelveresultados
Devuelveresultados
Devuelveresultados
Accesodenegado
SI
SI
SI
SI
NO
NO
NO
NO
Grado1: Consulta depermisos a nivel *.*
Grado3: Consulta de permisosa nivel db.tabla
Grado4: Consulta de permisosa nivel db.tabla.columna
2.4.2. El sistema de privilegios de Oracle2.4.2. El sistema de privilegios de Oracle
El sistema de privilegios de Oracle clasifica los permisos en dostipos:
• Privilegios del sistema.• Privilegios de objetos.
Además define los siguientes conceptos:
• ROLES: Conjunto de privilegios que se pueden asignar a undeterminado usuario. Un usuario puede pertenecer a varios roles.
• PERFILES: Conjunto de restricciones sobre el uso de recursos. Cadausuario puede pertenecer a un único perfil.
Oracle permite asignar a un usuario privilegios del sistema, deobjetos, roles y perfiles mediante la sentencia GRANT.
10/11/2013
11
ElEl sistema de privilegios de Oraclesistema de privilegios de Oracle
La sintaxis de la sentencia GRANT en Oracle es:
GRANT privilegio, ...
[ON [esquema.]objeto]
TO {usuario|rol|PUBLIC}
[WITH {GRANT|ADMIN} OPTION];
Donde privilegio puede ser:
Tipo_privilegio [(columnas)][, ...]
|privilegio_sistema
|rol
ElEl sistema de privilegios de Oraclesistema de privilegios de Oracle
Ejemplos de privilegios sobre un objeto a un usuario o a un rol:
GRANT SELECT, UPDATE (num_emp, apellido, salario)
ON empleados
TO scott;
GRANT ALL PRIVILEGES
ON empleados
TO nombre_rol;
Ejemplos de privilegios del sistema a un usuario o a un rol:
GRANT CREATE VIEW TO usuario;
GRANT CREATE VIEW TO resource;
10/11/2013
12
ElEl sistema de privilegios de Oraclesistema de privilegios de Oracle
Ejemplos de asignación de roles a un usuario o a otro rol:
GRANT CONNECT, RESOURCE TO usuario;
GRANT CONNECT, RESOURCE TO nombre_rol;
Ejemplos de asignación de privilegios a todos los usuarios:
GRANT CONNECT, RESOURCE TO PUBLIC;
GRANT SELECT ON empleados TO PUBLIC;
Las cláusulas WITH GRAN OPTION y WITH ADMIN OPTION
permiten conceder el privilegio en cuestión a otro usuario o rol.
Privilegios sobre objetos en Oracle
ALTER Permite cambiar la definición de un objeto.DELETE Permite el uso de DELETE.EXECUTE Permite ejecutar un procedimiento, función, paquete,…INDEX Permite crear índices en una tabla.INSERT Permite el uso de INSERT.REFERENCES Permite crear claves foráneas (ajenas).SELECT Permite el uso de SELECT.UPDATE Permite el uso de UPDATE.ALL o ALL PRIVILEGES Concede todos los permisos incluido GRANT OPTION
ElEl sistema de privilegios de Oraclesistema de privilegios de Oracle
Cuadro 2.4 (pág. 66)
10/11/2013
13
ElEl sistema de privilegios de Oraclesistema de privilegios de OracleVer cuadro 2.5 (pág. 66)
ElEl sistema de privilegios de Oraclesistema de privilegios de Oracle
La sintaxis de la sentencia REVOKE en Oracle es:
REVOKE privilegio
[ON [esquema.]objeto]
FROM {usuario|rol|PUBLIC};
Donde privilegio puede ser:
Tipo_privilegio [(columnas)][, ...]
|privilegio_sistema
|rol
10/11/2013
14
ElEl sistema de privilegios de Oraclesistema de privilegios de Oracle
Ejemplos:
REVOKE SELECT, UPDATE (num_emp, apellido, salario)
ON empleados
FROM scott;
REVOKE CONNECT FROM PUBLIC;
REVOKE CREATE VIEW FROM usuario;
REVOKE ALL PRIVILEGES
ON empleados
FROM usuario;
REVOKE CONNECT, RESOURCE FROM usuario;
REVOKE CONNECT, RESOURCE FROM nombre_rol;
ElEl sistema de privilegios desistema de privilegios de Oracle (roles)Oracle (roles)
Un rol es un concepto que permite simplificar la tarea de asignarpermisos a los usuarios.
Para crear un rol se utiliza la sentencia CREATE ROLE cuya sintaxises:
CREATE ROLE nombre_rol [opciones_identificación];
Donde opciones_identificación puede ser:
NOT IDENTIFIED | IDENTIFIED {BY password | EXTERNALLY |
GLOBALLY | USING [esquema].package}
NOT IDENTIFIED hace que no sea necesaria ninguna contraseña para activarlo.IDENTIFIED BY password hace necesaria la autenticación antes de activarlo
EXTERNALLY hace que sea necesaria una autorización externa (Sist. Operativo).GLOBALLY hace que sea necesaria una autorización externa (Oracle Security Service).USING permite que se active el rol mediante aplicaciones de un determinado paquete.
10/11/2013
15
ElEl sistema de privilegios desistema de privilegios de Oracle (roles)Oracle (roles)
Cuando un usuario se conecta a Oracle se le asignanautomáticamente los permisos que se le hayan concedidomediante la sentencia GRANT y los permisos que tengan los rolespor defecto del usuario.
Para asignar un rol por defecto a un usuario se utiliza:
ALTER USER DEFAULT ROLE [opciones_rol];
Donde opciones_rol puede ser:
rol [, rol]... | ALL [EXCEPT rol] | NONE
NONE permite anular el rol por defecto.ALL permite habilitar todos los roles excepto los que seindiquen.
ElEl sistema de privilegios desistema de privilegios de Oracle (roles)Oracle (roles)
Ejemplos:CREATE ROLE LECTURA1;
GRANT SELECT ON EMPLEADOS TO LECTURA1;
GRANT SELECT ON DEPARTAMENTOS TO LECTURA1;
GRANT LECTURA1 TO USUARIO;
------------------------------------------------------CREATE ROLE LECTURA2 IDENTIFIED BY LECTURA2;
GRANT SELECT ON EMPLEADOS TO LECTURA2;
GRANT SELECT ON DEPARTAMENTOS TO LECTURA2;
GRANT LECTURA2 TO USUARIO;
-- Para activar los permisos de LECTURA2
SET ROLE LECTURA2 IDENTIFIED BY LECTURA2;
SET ROLE se utiliza para activar los privilegios de un rol con password.
10/11/2013
16
ElEl sistema de privilegios desistema de privilegios de Oracle (perfiles)Oracle (perfiles)
Los perfiles se usan para limitar la cantidad de recursos del sistemao de la base de datos disponibles para un usuario.
Existe un perfil DEFAULT que concede recursos ilimitados a todoslos usuarios.
Gestión de privilegios y recursos
ElEl sistema de privilegios desistema de privilegios de Oracle (perfiles)Oracle (perfiles)Para crear un perfil se utiliza la sentencia:
CREATE PROFILE nombre_perfil LIMIT recursos … ;
Donde recursos es:
recurso {cantidad | UNLIMITED | DEFAULT} | password
recurso puede ser:
SESSIONS_PER_USER | CPU_PER_SESSION | CPU_PER_CALL |
CONNECT_TIME | IDLE_TIME | LOGICAL_READS_PER_SESSION |
LOGICAL_READS_PER_CALL | COMPOSITE_LIMIT | PRIVATE_SGA
password puede ser:
parametro { cantidad | UNLIMITED | DEFAULT }
parametro puede ser:FAILED_LOGIN_ATTEMPTS | PASSWORD_LIFE_TIME |
PASSWORD_REUSE_TIME | PASSWORD_REUSE_MAX |
PASSWORD_LOCK_TIME | PASSWORD_GRACE_TIME
10/11/2013
17
Recursos en Oracle (select * from user_resource_limits;)
SESSIONS_PER_USER Número máximo de sesiones abiertas por un usuario.
CPU_PER_SESSION Tiempo límite para una sesión expresado en centésimas de seg.
CPU_PER_CALL Tiempo límite de respuesta para una llamada (parse,fetch o ejecución) en centésimas de segundo.
CONNECT_TIME Tiempo límite total de una sesión expresado en minutos.
IDLE_TIME Tiempo máximo de inactividad de una sesión expresado en min.
LOGICAL_READS_PER_SESSION Número máximo de bloques de datos leídos por sesión.
LOGICAL_READS_PER_CALL Número máximo de bloques de datos leídos por llamada.
PRIVATE_SGA Tamaño de memoria que una sesión puede reservar delespacio privado de memoria del SGA.
COMPOSITE_LIMIT Coste total en recursos de una sesión.
ElEl sistema de privilegios desistema de privilegios de Oracle (perfiles)Oracle (perfiles)Ver cuadro 2.6 (pág. 69)
ElEl sistema de privilegios desistema de privilegios de Oracle (perfiles)Oracle (perfiles)
Ejemplos:CREATE PROFILE OPERADOR LIMIT
SESSIONS_PER_USER 5 -- 5 sesiones simultáneas
CPU_PER_SESSION UNLIMITED -- Tiempo de CPU ilimitado
IDLE_TIME 10 -- 10 minutos de inactividad
CONNECT_TIME 120; -- 120 minutos totales de
-- conexión
ALTER PROFILE OPERADOR LIMIT CONNECT_TIME UNLIMITED;
-- Tiempo de conexión ilimitado
CREATE USER PRUEBA IDENTIFIED BY PRUEBAQUOTA UNLIMITED ON USERSPROFILE OPERADOR;
10/11/2013
18
ElEl sistema de privilegios desistema de privilegios de Oracle (Resumen)Oracle (Resumen)
Privilegio Permiso para realizar una acción en un SGBD, se puede asignar aun usuario o a un rol.
Rol Conjunto de privilegios, asignables a un usuario o a otro rol.
Usuario Colección de objetos y privilegios identificado con un nombre ypassword que permite su utilización.
Perfil Conjunto de restricciones relativas al uso de recursos que puedeasignarse a un usuario. Un usuario sólo puede tener un perfil.
Recurso Uso dentro de un SGBD susceptible de ser restringido, asignable aun perfil.
Concepto Significado
ElEl sistema de privilegios desistema de privilegios de Oracle (Resumen)Oracle (Resumen)
Privilegios GRANT (conceder un privilegio a un usuario o a un rol)REVOKE (denegar un privilegio a un usuario o a un rol)
Roles CREATE ROLE (crear)ALTER ROLE (modificar)DROP ROLE (borrar)SET ROLE (activar, desactivar)GRANT (conceder un permiso o un rol a un rol)REVOKE (denegar un permiso o un rol a un rol)
Usuarios CREATE USER (crear)ALTER USER (modificar)DROP USER (borrar)GRANT (conceder un permiso o un rol a un usuario)REVOKE (denegar un permiso o un rol a un usuario)
Perfiles yRecursos
CREATE PROFILE (crear)ALTER PROFILE (modificar)DROP PROFILE (borrar)ALTER USER ... PROFILE (asignar a un usuario)CREATE USER ... PROFILE (asignar a un usuario)
Se utilizan los comandosPara lagestión de
10/11/2013
19
ElEl sistema de privilegios desistema de privilegios de Oracle (Resumen)Oracle (Resumen)
Cómo ver la password encriptada de un usuario:
SQL>select password from dba_users where username='SCOTT';
Para modificar la password de un usuario:
SQL>alter user scott identified by nueva;
SQL>alter user scott identified by values 'F894844C34402B67';
En Oracle, los nombres de los usuarios y sus passwords encriptadas sealmacenan en la propia base de datos.
SQL>select * from dba_users;
Sys SQL>alter user sys identified by change_on_install;
System SQL>alter user system identified by manager;
Scott SQL>alter user scott identified by tiger;
ElEl sistema de privilegios desistema de privilegios de Oracle (Resumen)Oracle (Resumen)
Vistas más relevantesUsuarios dba_users user_users all_usersRoles dba_rolesRoles asignados aroles o usuarios dba_role_privs user_role_privsPrivilegios asignadosa roles o usuarios dba_sys_privsPermisos sobre tablasasignados a roles o usuarios dba_tab_privsRoles asignados a roles role_role_privsPrivilegios de cada rol role_sys_privsLímites de recursos user_resource_limitsPerfiles y sus límitesde recursos asociados dba_profilesLímites de recursos encuanto a restricciones en claves user_password_limitsLímites de recursos en cuantoa espacio máximo en tablespaces dba_ts_quotas user_ts_quotas
dba_useuser_userall_usersdba_role--dba_role_privuser_role_privs-dba_sys_priv--dba_tab_priv--role_role_privsrole_sys_privs-user_resource_limits-dba_profiles---user_password_limit-dba_ts_quotuser_ts_quota-
10/11/2013
20
ElEl sistema de privilegios desistema de privilegios de Oracle (Resumen)Oracle (Resumen)
Limites en uso del espacio en disco (select * from dba_ts_quotas;)
ALTER USER SCOTT QUOTA UNLIMITED ON USER_DATA;ALTER USER SCOTT QUOTA 5M ON TEMPORARY_DATA;ALTER USER SCOTT QUOTA 0 ON SYSTEM;
2.5. El catálogo de metadatos2.5. El catálogo de metadatos
El catálogo de metadatos o diccionario de datos es una de laspartes más importantes de un SGBD.
Su misión es proporcionar información al propio sistema y aladministrador (DBA) de todas las estructuras de informaciónalmacenadas en una base de datos.
REGLA 4 DE CODDCATÁLOGO DINÁMICO EN LÍNEA BASADO EN EL MODELO RELACIONAL
La descripción de la base de datos se representa a nivel lógico de lamisma manera que los datos normales, de modo que los usuariosautorizados pueden aplicar el mismo lenguaje relacional a su consulta,igual que lo aplican a los datos normales.
10/11/2013
21
2.5.1. El catálogo de MySQL2.5.1. El catálogo de MySQL
MySQL tiene una base dedatos denominadainformation_schema en laque almacena la definiciónde las tablas, vistas, índicesy el estado general delSGBD.
TABLA
SCHEMATA Bases de datos disponibles en el SGBD.TABLES Tablas de todas las bases de datos.COLUMNS Columnas de todas las tablas.VIEWS Vistas disponibles en todas las bases de datos.SESSION_STATUS Estado de la sesión actual.GLOBAL_STATUS Estado del Sistema Gestor de Bases de DatosSESSION_VARIABLES Parámetros de configuración de la sesión.GLOBAL_VARIABLES Parámetros de configuración del sistema.USER_PRIVILEGES Privilegios de los usuarios.
Cuadro 2.7 (pág. 72)
ElEl catálogo decatálogo de MySQLMySQL
10/11/2013
22
Por otra parte, tieneotra base de datosmysql en la quealmacena la informacióncorrespondiente a losusuarios y susprivilegios.
El catálogo de MySQLEl catálogo de MySQL
El catálogo de MySQLEl catálogo de MySQLConsultando las tablas del catálogo con la sentencia SELECT se puedeobtener información muy útil. Ejemplos:
SELECT table_name, table_type, engine
FROM information_schema.tables
WHERE table_schema = 'test'
ORDER BY table_name DESC;
SELECT table_schema, table_name, privileges
FROM information_schema.tables
WHERE table_schema = 'test';
Mediante el comando show se puede obtener información del catálogo deforma más sencilla.Select * from session_status
where variable_name='UPTIME';
Show status like 'UPTIME';
Tiempo que lleva el SGBD activo
10/11/2013
23
2.5.2. El catálogo de Oracle2.5.2. El catálogo de OracleOracle también utiliza vistas para obtener información del catálogo de datos.Para ello utiliza los prefijos:
• user_*: Información de los objetos que pertenecen al usuario.Ejemplos: user_tables, user_views,…
• all_: Información de todos los objetos a los que tiene acceso el usuario.Ejemplo: all_tables,…
• dba_: Información de todos los objetos de la base de datos.Ejemplo: dba_tables,…
select table_name from user_tables;
select owner, table_name from all_tables;
select owner, table_name from dba_tables;
También existen las vistas v$ que proporcionan estadísticas en tiempo realde la utilización del SGBD.
select sid, serial#, status from v$session where username =‘scott’;