Sie sind auf Seite 1von 23

10/11/2013

Captulo 2

ACCESO A LA INFORMACIN

En los sistemas actuales, la seguridad de acceso a la informacin


de una base de datos contempla dos tipos de mecanismos:
Seguridad integrada: Proporcionada por el Sistema Operativo
bajo el que se est trabajando mediante un sistema de usuarios y
permisos junto con un servicio de directorios LDAP (Lightweight
Directory Access Protocol - Protocolo Ligero de Acceso a
Directorios).

Seguridad nativa: Propia del SGBD que consiste en un software


del servidor que controla las autorizaciones a los distintos
usuarios para acceder a los distintos elementos de una base de
datos.

10/11/2013

Una Vista es una tabla virtual sin contenido de la que slo se


almacena su definicin de manera que cuando se hace referencia
a ella como tabla, se ejecuta la sentencia SQL asociada a ella.
La diferencia entre ejecutar una sentencia SQL y una vista es que
la sentencia se tiene que compilar y ejecutar mientras que la vista
ya est compilada cuando se almacena, por lo que el tiempo de
ejecucin es menor en la vista que en la sentencia.
Otra ventaja que tienen las vistas es que permiten definir
esquemas externos para los grupos de usuarios que se tienen en
un sistema de bases de datos con lo que se puede controlar el
acceso a los datos que en cada caso sean necesarios.

Usuario
Vista:
Create view VISTA_EMPLE as
Select NUM_EMP, NOMBRE, SALARIO
From EMPLEADOS;

Tabla base:
EMPLEADOS;

10/11/2013

Sintaxis 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 ejecucin de la sentencia CREATE VIEW hace que se


compile la sentencia SELECT y se almacena ya compilada.

Sintaxis para eliminar una vista


DROP VIEW [Esquema.]Nombre_vista;

Ejemplo:
DROP VIEW EMPLE20;

Existe tambin posibilidad de modificar la definicin de una


vista con la sentencia ALTER VIEW.

10/11/2013

2.3. Los usuarios


Un Usuario en un Sistema de Bases de Datos es una cuenta a
travs de la cual una persona puede conectarse al SGBD para
manejar 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 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 indicar


que junto al usuario se eliminen
todos sus objetos.

10/11/2013

Modificar un usuario
Para modificar un usuario se utiliza ALTER USER que tiene las
mismas 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 ejecutar


estas instrucciones hay que estar
conectado al SGBD como administrador.

Modificar un usuario en MySQL


Para modificar un usuario en MySQL hay que hacerlo modificando
el dato en la tabla user del esquema mysql o bien utilizando
MySQL 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 algn valor de
una tabla del sistema hay que ejecutar el
comando FLUSH PRIVILEGES

10/11/2013

Modificar un usuario en MySQL

Modificar un usuario en MySQL


Para cambiar el nombre de un usuario conservando todos sus
privilegios se utiliza el comando:
RENAME USER Nombre_antiguo TO
Nombre_nuevo;
Para cambiar la password de un usuario tambin se utiliza:
SET PASSWORD for Nombre_usuario =
PASSWORD(Nueva_password);

10/11/2013

2.4. Los privilegios


Son los permisos que se conceden a un usuario para poder realizar
una accin o manipular un determinado objeto de una Base de
Datos.
Para conceder privilegios se utiliza la sentencia GRANT.
Para retirar privilegios se utiliza la sentencia REVOKE.
Estas sentencias pueden variar ligeramente segn el SGBD que se
est utilizando.

2.4.1. El sistema de privilegios de MySQL


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 opcin 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 a
un usuario a nivel de esquema o base de
datos, tabla o columna de tabla.

10/11/2013

El sistema de privilegios de MySQL


Ejemplo:
GRANT SELECT (num_emp, apellido, salario, num_dept)
ON empleados
TO prueba;

Privilegios tpicos:
SELECT, INSERT y UPDATE

Se pueden aplicar a:
Nombre_tabla
*
*.*
Esquema.*
Esquema.nom_tabla

Afecta a una tabla.


Afecta a todas las tablas del esquema utilizado.
Afecta a todas las tablas de todos los esquemas.
Afecta a todas las tablas del esquema referenciado.
Afecta a la tabla del esquema referenciado.

El sistema de privilegios de MySQL


Ver cuadro 2.2 (pg. 61) con las opciones adicionales a los permisos.
Ver cuadro 2.3 (pg. 62) con los tipos de permisos en MySQL.

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;

10/11/2013

El sistema de privilegios de MySQL


La 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;
Tambin se pueden manipular los permisos mediante tablas del
catlogo de MySQL que se encuentran en el esquema mysql. Las
tablas son: user, db, host, tables_priv y colums_priv.

El sistema de privilegios de MySQL

10/11/2013

El sistema de privilegios de MySQL


Autorizacin de ejecucin de consulta
Grado1: Consulta de
permisos a nivel *.*

Consulta de permisos en la tabla user

Hay permisos?

Hay permisos?

Hay permisos?

Devuelve
resultados

SI

Devuelve
resultados

SI

Devuelve
resultados

NO

Grado4: Consulta de permisos


a nivel db.tabla.columna

Consulta de permisos en la tabla columns_priv

SI

NO

Grado3: Consulta de permisos


a nivel db.tabla

Consulta de permisos en la tabla tables_priv

Devuelve
resultados

NO

Grado2: Consulta de permisos


a nivel db.* y @host

Consulta de permisos en las tablas db y host

SI

Hay permisos?
NO
Acceso
denegado

2.4.2. El sistema de privilegios de Oracle


El sistema de privilegios de Oracle clasifica los permisos en dos
tipos:

Privilegios del sistema.


Privilegios de objetos.

Adems define los siguientes conceptos:

ROLES: Conjunto de privilegios que se pueden asignar a un


determinado usuario. Un usuario puede pertenecer a varios roles.
PERFILES: Conjunto de restricciones sobre el uso de recursos. Cada
usuario puede pertenecer a un nico perfil.

Oracle permite asignar a un usuario privilegios del sistema, de


objetos, roles y perfiles mediante la sentencia GRANT.

10

10/11/2013

El sistema 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

El sistema 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;

11

10/11/2013

El sistema de privilegios de Oracle


Ejemplos de asignacin de roles a un usuario o a otro rol:
GRANT CONNECT, RESOURCE TO usuario;
GRANT CONNECT, RESOURCE TO nombre_rol;

Ejemplos de asignacin de privilegios a todos los usuarios:


GRANT CONNECT, RESOURCE TO PUBLIC;
GRANT SELECT ON empleados TO PUBLIC;

Las clusulas WITH GRAN OPTION y WITH ADMIN OPTION


permiten conceder el privilegio en cuestin a otro usuario o rol.

El sistema de privilegios de Oracle


Privilegios sobre objetos en Oracle

Cuadro 2.4 (pg. 66)

ALTER

Permite cambiar la definicin de un objeto.

DELETE

Permite el uso de DELETE.

EXECUTE

Permite ejecutar un procedimiento, funcin, paquete,

INDEX

Permite crear ndices en una tabla.

INSERT

Permite el uso de INSERT.

REFERENCES

Permite crear claves forneas (ajenas).

SELECT

Permite el uso de SELECT.

UPDATE

Permite el uso de UPDATE.

ALL o ALL PRIVILEGES Concede todos los permisos incluido GRANT OPTION

12

10/11/2013

El sistema de privilegios de Oracle


Ver cuadro 2.5 (pg. 66)

El sistema 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

13

10/11/2013

El sistema 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;

El sistema de privilegios de Oracle (roles)


Un rol es un concepto que permite simplificar la tarea de asignar
permisos a los usuarios.
Para crear un rol se utiliza la sentencia CREATE ROLE cuya sintaxis
es:
CREATE ROLE nombre_rol [opciones_identificacin];

Donde opciones_identificacin puede ser:


NOT IDENTIFIED | IDENTIFIED {BY password | EXTERNALLY |
GLOBALLY | USING [esquema].package}
NOT IDENTIFIED hace que no sea necesaria ninguna contrasea para activarlo.
IDENTIFIED BY password hace necesaria la autenticacin antes de activarlo
EXTERNALLY hace que sea necesaria una autorizacin externa (Sist. Operativo).
GLOBALLY hace que sea necesaria una autorizacin externa (Oracle Security Service).
USING permite que se active el rol mediante aplicaciones de un determinado paquete.

14

10/11/2013

El sistema de privilegios de Oracle (roles)


Cuando un usuario se conecta a Oracle se le asignan
automticamente los permisos que se le hayan concedido
mediante la sentencia GRANT y los permisos que tengan los roles
por 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 se
indiquen.

El sistema de privilegios de 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.

15

10/11/2013

El sistema de privilegios de Oracle (perfiles)


Gestin de privilegios y recursos

Los perfiles se usan para limitar la cantidad de recursos del sistema


o de la base de datos disponibles para un usuario.
Existe un perfil DEFAULT que concede recursos ilimitados a todos
los usuarios.

El sistema de privilegios de 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

16

10/11/2013

El sistema de privilegios de Oracle (perfiles)


Ver cuadro 2.6 (pg. 69)

Recursos en Oracle (select * from user_resource_limits;)


SESSIONS_PER_USER

Nmero mximo de sesiones abiertas por un usuario.

CPU_PER_SESSION

Tiempo lmite para una sesin expresado en centsimas de seg.

CPU_PER_CALL

Tiempo lmite de respuesta para una llamada (parse,


fetch o ejecucin) en centsimas de segundo.

CONNECT_TIME

Tiempo lmite total de una sesin expresado en minutos.

IDLE_TIME

Tiempo mximo de inactividad de una sesin expresado en min.

LOGICAL_READS_PER_SESSION Nmero mximo de bloques de datos ledos por sesin.


LOGICAL_READS_PER_CALL

Nmero mximo de bloques de datos ledos por llamada.

PRIVATE_SGA

Tamao de memoria que una sesin puede reservar del


espacio privado de memoria del SGA.

COMPOSITE_LIMIT

Coste total en recursos de una sesin.

El sistema de privilegios de Oracle (perfiles)


Ejemplos:
CREATE PROFILE OPERADOR LIMIT
SESSIONS_PER_USER 5
CPU_PER_SESSION UNLIMITED
IDLE_TIME 10
CONNECT_TIME 120;

------

5 sesiones simultneas
Tiempo de CPU ilimitado
10 minutos de inactividad
120 minutos totales de
conexin

ALTER PROFILE OPERADOR LIMIT CONNECT_TIME UNLIMITED;


-- Tiempo de conexin ilimitado
CREATE USER PRUEBA IDENTIFIED BY PRUEBA
QUOTA UNLIMITED ON USERS
PROFILE OPERADOR;

17

10/11/2013

El sistema de privilegios de Oracle (Resumen)


Concepto

Significado

Privilegio

Permiso para realizar una accin en un SGBD, se puede asignar a


un usuario o a un rol.

Rol

Conjunto de privilegios, asignables a un usuario o a otro rol.

Usuario

Coleccin de objetos y privilegios identificado con un nombre y


password que permite su utilizacin.

Perfil

Conjunto de restricciones relativas al uso de recursos que puede


asignarse a un usuario. Un usuario slo puede tener un perfil.

Recurso

Uso dentro de un SGBD susceptible de ser restringido, asignable a


un perfil.

El sistema de privilegios de Oracle (Resumen)


Para la
gestin de

Se utilizan los comandos

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)
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)
CREATE PROFILE (crear)
ALTER PROFILE (modificar)
DROP PROFILE (borrar)
ALTER USER ... PROFILE (asignar a un usuario)
CREATE USER ... PROFILE (asignar a un usuario)

Usuarios

Perfiles y
Recursos

18

10/11/2013

El sistema de privilegios de Oracle (Resumen)


En Oracle, los nombres de los usuarios y sus passwords encriptadas se
almacenan en la propia base de datos.
SQL>select * from dba_users;

Cmo 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';

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;

-all_users
dba_use
dba_role
user_user
ruser_role_privs
role_sys_privs
u
d
user_ts_quota
ole_role_privs
ser_resource_limits
ser_password_limit
ba_role_priv
ba_sys_priv
ba_tab_priv
ba_profiles
ba_ts_quot

El sistema de privilegios de Oracle (Resumen)


Vistas ms relevantes
Usuarios
Roles
Roles asignados a
roles o usuarios
Privilegios asignados
a roles o usuarios
Permisos sobre tablas
asignados a roles o usuarios
Roles asignados a roles
Privilegios de cada rol
Lmites de recursos
Perfiles y sus lmites
de recursos asociados
Lmites de recursos en
cuanto a restricciones en claves
Lmites de recursos en cuanto
a espacio mximo en tablespaces

dba_users
dba_roles

user_users

dba_role_privs

user_role_privs

all_users

dba_sys_privs
dba_tab_privs
role_role_privs
role_sys_privs
user_resource_limits
dba_profiles
user_password_limits
dba_ts_quotas

user_ts_quotas

19

10/11/2013

El sistema de privilegios de 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 catlogo de metadatos


El catlogo de metadatos o diccionario de datos es una de las
partes ms importantes de un SGBD.
Su misin es proporcionar informacin al propio sistema y al
administrador (DBA) de todas las estructuras de informacin
almacenadas en una base de datos.
REGLA 4 DE CODD
CATLOGO DINMICO EN LNEA BASADO EN EL MODELO RELACIONAL
La descripcin de la base de datos se representa a nivel lgico de la
misma manera que los datos normales, de modo que los usuarios
autorizados pueden aplicar el mismo lenguaje relacional a su consulta,
igual que lo aplican a los datos normales.

20

10/11/2013

2.5.1. El catlogo de MySQL


MySQL tiene una base de
datos denominada
information_schema en la
que almacena la definicin
de las tablas, vistas, ndices
y el estado general del
SGBD.

El catlogo de MySQL
TABLA

Cuadro 2.7 (pg. 72)

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 sesin actual.

GLOBAL_STATUS

Estado del Sistema Gestor de Bases de Datos

SESSION_VARIABLES

Parmetros de configuracin de la sesin.

GLOBAL_VARIABLES

Parmetros de configuracin del sistema.

USER_PRIVILEGES

Privilegios de los usuarios.

21

10/11/2013

El catlogo de MySQL
Por otra parte, tiene
otra base de datos
mysql en la que
almacena la informacin
correspondiente a los
usuarios y sus
privilegios.

El catlogo de MySQL
Consultando las tablas del catlogo con la sentencia SELECT se puede
obtener informacin 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 informacin del catlogo de
forma ms sencilla.
Select * from session_status
where variable_name='UPTIME';
Show status like 'UPTIME';
Tiempo que lleva el SGBD activo

22

10/11/2013

2.5.2. El catlogo de Oracle


Oracle tambin utiliza vistas para obtener informacin del catlogo de datos.
Para ello utiliza los prefijos:

user_*: Informacin de los objetos que pertenecen al usuario.


Ejemplos: user_tables, user_views,
all_: Informacin de todos los objetos a los que tiene acceso el usuario.
Ejemplo: all_tables,
dba_: Informacin 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;

Tambin existen las vistas v$ que proporcionan estadsticas en tiempo real


de la utilizacin del SGBD.
select sid, serial#, status from v$session where username =scott;

23

Das könnte Ihnen auch gefallen