Este documento describe los mecanismos básicos de seguridad de SQL y cómo son implementados por diferentes sistemas de bases de datos relacionales. Explica los conceptos clave de autenticación, autorización, auditoría, encriptación, integridad y control de acceso mediante el uso de privilegios. Además, detalla cómo crear y administrar usuarios y conceder/revocar privilegios en sistemas como MySQL y Oracle.
2. • SQL provee mecanismos de seguridad
limitados.
• Se confía en el software para implementar un
framework de seguridad más robusto.
• Los vendedores de Bases de Datos
implementan los varios aspectos de seguridad
en distintas maneras.
3. Mecanismos de Seguridad Básica
• Hay tres niveles de seguridad comunes para todos los
RDBMS (Relational DataBase Management Systems):
– Autenticación: El usuario se conecta al RDBMS.
– Autorización: El usuario obtiene acceso a la base de datos
o a los objetos del esquema de la base de datos para
realizar ciertas acciones, basados en el set de privilegios
asignados al usuario.
– Auditar: Para monitorear actividad sospechosa y realizar
un análisis.
• En lo que difieren es en la manera en que cada uno de
estos RDBMS implementan estos niveles.
4. Identificación y autenticación
• La primera línea de defensa es la autenticación.
• Antes de acceder al RDBMS se debe proveer
suficiente información validada ya sea por el
RDBMS o por el sistema operativo en el cual esta
base de datos se encuentra instalada.
• Una vez que la identidad es autenticada, se
puede proceder con el intento de acceder a los
recursos, objetos y datos de la base de datos.
5. Autorización y Control de acceso
• Una vez que el usuario es autenticado y se le
concede acceso a la base de datos, el RDBMS
emplea un complejo sistema de privilegios
(permisos) para objetos particulares de la
base de datos.
• Estos privilegios incluyen permisos para
acceder, modificar, destruir o ejecutar objetos
relevantes de la base de datos, así como
añadir, modificar y borrar datos.
6. Encriptación
• Provee una capa adicional de
seguridad, protegiendo los datos de personas
no autorizadas.
• Aún si se obtiene acceso a la base de datos, no
será fácil descifrar datos encriptados.
7. Integridad y Consistencia
• Mientras la seguridad se basa en la
autenticación y autorización de
procedimientos, la integridad de los datos
juega el rol de proteger los datos de
manipulación no intencional o maliciosa.
• Por ejemplo, aun si un usuario obtiene acceso
a la base de datos (robando la clave), aun
debe seguir reglas relacionales para manipular
datos.
8. • Entre estas reglas, la que no se permite registros
huérfanos. Es decir no se puede borrar registros de una
tabla de un padre sin entender las relaciones de la base
de datos.
• Aunque algunos RDBMS implementan la característica
¨CASCADE¨, que remueve registros hijos cuando se
borrar el del padre.
• Otra regla es la de no insertar un registro duplicado en
una columna protegida con un UNIQUE constraint.
• Otra regla, la de no ingresar datos inválidos que violen
un CHECK constraint.
9. Auditar
• Provee medios para monitorear actividad de
base de datos, ambas legítima y no
autorizadas.
• Preserva la bitácora de intentos de acceso a la
base de datos, ya sean exitosos o fallidos.
• Tambien los intentos de delete e inserts.
• Es un componente necesario para ser
considerado para una certificación de
seguridad.
10. Definiendo un usuario
• SQL99 no especifica alguna sintaxis especial o alguna
forma de crear un usuario en la base de datos.
• Los vendedores de bases de datos han creado algunas
soluciones ingeniosas para esto.
• Oracle hace poca distinción entre un usuario y el
esquema de la base de datos, DB2 UDB usa solo
usuario definidos por el sistema operativo y Microsoft
SQL Server combina ambos mecanismos, usando
cuentas de Windows y procedimientos especiales del
sistema para añadir usuarios a la base de datos.
11. Database User
• Es alguien que hace uso de los servicios que el
servidor del RDBMS provee. Puede ser una
aplicación, un administrador, o cualquiera que
acceda a la base de datos en algún momento.
• Esta es la primera línea de defensa cuando
hablamos de los aspectos de seguridad.
12. Crear un usuario en MySQL
• CREATE USER user [IDENTIFIED BY
[PASSWORD] 'password’] [, user [IDENTIFIED
BY [PASSWORD] 'password']]
• Para crear un usuario se necesita como
mínimo un nombre de usuario y una
contraseña, el resto es opcional.
• CREATE USER alumno IDENTIFIED BY
‘clavealumno’;
13. En oracle
• Para crear un usuario identificado por el sistema
operativo se usa EXTERNALLY.
• Si usamos PASSWORD EXPIRE, le estamos
diciendo a Oracle que la contraseña para este
usuario expira inmediatamente, forzando al
usuario a seleccionar una contraseña diferente en
la próxima conexión a la base de datos.
• ACCOUNT LOCK especifica por ejemplo que el
acceso se bloquee después de muchos intentos
fallidos o deshabilite la cuenta de un usuario
cuando el empleado abandone la compañía.
14. En oracle
• Cuando un usuario es creado, un esquema
correspondiente a ese usuario es creado
también.
• El nuevo usuario no tiene derechos o
privilegios en el RDBMA, pero se le debe
conceder el privilegio de CONNECT a la base
de datos Oracle.
15. Borrar un usuario en MySQL
• DROP USER <user name>;
• En MySQL el usuario está separado de la base
de datos
16. Borrar un usuario en Oracle
• DROP USER <user name> [CASCADE];
• CASCADE especifica que todos los objetos en el
esquema del usuario deben borrarse antes de borrar al
usuario.
• Oracle no permite borrar un usuario cuyo esquema
contiene algún objeto, a menos que se especifique esta
cláusula.
• DROP USER <user name> [CASCADE];
• DROP USER alumno CASCADE;
17. ALTER USER
• Provee una manera conveniente de modificar
las propiedades del usuario sin la necesidad
de hacerle DROP al usuario y luego recrearlo
desde el principio.
ALTER USER user_specification
[, user_specification] ...
user_specification:
user PASSWORD EXPIRE
18. Crear una base de datos
• Oracle 10gExpress Edition trae creada por defecto una
base de datos llamada XE en la cual se puede crear
usuarios y trabajar directamente con ella.
• Aunque una sola base de datos XE puede correr en una
computadora, lo importante es que no se necesita una
base de datos para cada aplicación que se cree. Oracle
usa el concepto de esquemas para separar
aplicaciones.
CREATE DATABASE nuevabd;
CREATE DATABASE ha fallado
base de datos ya montada
19. Connect
• La sintaxis del comando es la siguiente:
conn[ect]
<username>/<password>[@<database_sid>]
connect alumno/clavealumno@XE;
conn alumno/clavealumno;
connect alumno; (pide la clave)
20. DISCONNECT
• Se puede desconectar de Oracle pero seguir
en el SQL*Plus”:
DISC[ONNECT]
21. Administrando la seguridad con
Privilegios
• Un RDBMS es una colección de
objetos, esquemas, tablas, vistas, procedimien
tos, etc. Así como los procesos que
administran estos objetos.
• Restringir el acceso a estos objetos es un
mecanismo de seguridad esencial
implementado en el nivel de SQL a través del
sistema de privilegios.
22. Privilegios
• Representan el derecho de un usuario en
particular para acceder, crear, manipular y
destruir varios objetos dentro de una base de
datos, así como realizar tareas administrativas.
• Se los puede conceder a un usuario o ROLE.
• Se los puede dividir en dos categorías:
– Privilegios de Sistema
– Privilegios de Objetos
23. Privilegios a nivel de Sistema
• Permite a los usuarios realizar tareas
administrativas en un RDBMS
• Crear una base de datos
• Crear y Borrar Usuario
• Crear, alterar y destruir objetos de bases de
datos, etc
• Se necesita un alto nivel de autoridad en el
RDBMS para conceder o tener privilegios de
sistema
24. Privilegios a nivel de Objeto
• Estos privilegios pueden llegar hasta el nivel
de columna (si el objeto de la base de datos es
una tabla o vista), o a cualquier otro objeto en
la base de datos como stored
procedures, funciones y triggers.
25. GRANT en MySQL
CREATE USER 'monty'@'localhost' IDENTIFIED BY
'some_pass';
GRANT ALL PRIVILEGES ON *.* TO 'monty'@'localhost’
WITH GRANT OPTION;
CREATE USER 'monty'@'%' IDENTIFIED BY 'some_pass';
GRANT ALL PRIVILEGES ON *.* TO 'monty'@'%’ WITH
GRANT OPTION;
CREATE USER 'admin'@'localhost';
GRANT RELOAD,PROCESS ON *.* TO
'admin'@'localhost';
CREATE USER 'dummy'@'localhost';
26. GRANT en Oracle
• Para ¨Conceder¨ privilegios:
GRANT [ALL [PRIVILEGES]] | <privilege,...> [ON
<object_name>] TO <user> | <group> | <role>
[WITH GRANT OPTION]
Opción Descripción Aplica a
ADMIN OPTION Permite al usuario GRANT
privilegios del sistema a otros
usuario o roles
Oracle 9i
GRANT OPTION Permite al usuario GRANT
privilegios de objetos a otros
usuario o roles
Oracle 9i, Microsoft
SQL Server 2000,
IBM DB2 UDB 8.1
SQL92/99 Standard
HIERARCHY OPTION Indica que el privilegio de
objeto es concedido no solo
para el objeto sino para todos
los objetos derivados.
Oracle 9i
27. • GRANT ALL [PRIVILEGES] | <system
privilege,...> | <role> TO <user> | <role> |
<PUBLIC> [IDENTIFIED BY <password>] [WITH
ADMIN OPTION];
• GRANT ALL PRIVILEGES TO alumno IDENTIFIED
BY clavealumno WITH ADMIN OPTION;
28. Privilegios del Sistema en Oracle
• ALTER SYSTEM
• AUDIT SYSTEM
• CREATE [PUBLIC] DATABASE LINK
• DROP [PUBLIC] DATABASE LINK
• CREATE ANY INDEX
• ALTER ANY INDEX
• DROP ANY INDEX
• CREATE [ANY] MATERIALIZED VIEW
• ALTER ANY MATERIALIZED VIEW
• DROP ANY MATERIALIZED VIEW
• CREATE [ANY] OPERATOR
• DROP ANY OPERATOR
• EXECUTE ANY OPERATOR
• CREATE [ANY] PROCEDURE
• DROP ANY PROCEDURE
• EXECUTE ANY PROCEDURE
• CREATE PROFILE
• ALTER PROFILE
• DROP PROFILE
• CREATE ROLE
• ALTER ANY ROLE
• DROP ANY ROLE
• GRANT ANY ROLE
• CREATE [ANY] SEQUENCE
• ALTER ANY SEQUENCE
• DROP ANY SEQUENCE
• SELECT ANY SEQUENCE
• CREATE SESSION
• ALTER SESSION
Para verlos todos en Oracle: select * from DBA_SYS_PRIVS;
29. Privilegios del Sistema en Oracle
• CREATE [ANY | PUBLIC ] SYNONYM
• DROP [ANY | PUBLIC ] SYNONYM
• CREATE [ANY] TABLE
• ALTER ANY TABLE
• DELETE ANY TABLE
• DROP ANY TABLE
• INSERT ANY TABLE
• LOCK ANY TABLE
• SELECT ANY TABLE
• UPDATE ANY TABLE
• CREATE TABLESPACE
• ALTER TABLESPACE
• DROP TABLESPACE
• ALTER ANY TRIGGER
• DROP ANY TRIGGER
• CREATE [ANY] TYPE
• ALTER ANY TYPE
• DROP ANY TYPE
• EXECUTE ANY TYPE
• UNDER ANY TYPE
• CREATE USER
• ALTER USER
• BECOME USER
• DROP USER
• CREATE [ANY] VIEW
• DROP ANY VIEW
• UNDER ANY VIEW
• COMMENT ANY TABLE
• GRANT ANY PRIVILEGE
• SELECT ANY DICTIONARY
Para verlos todos en Oracle: select * from DBA_SYS_PRIVS;
30. Privilegios de Objetos En Oracle
• INSERT
• SELECT
• UPDATE
• DELETE
• ALTER
• INDEX
• UNDER
• EXECUTE
• REFERENCES
33. En MySQL
• GRANT SELECT, INSERT ON *.* TO
'someuser'@'somehost';
• GRANT CREATE ROUTINE ON mydb.* TO
'someuser'@'somehost';
• GRANT EXECUTE ON PROCEDURE
mydb.myproc TO 'someuser'@'somehost';
34. En Oracle
GRANT CREATE TABLE TO alumno IDENTIFIED BY clavealumno WITH
ADMIN OPTION;
• Si tiene los privilegios suficientes el usuario alumno con la
contraseña clavealumno se creará. Pero no se puede usar este
usuario y contraseña para conectarse a la base de datos si al usuario
alumno no se le ha concedido el privilegio de sistema CREATE
SESSION.
• El error que se muestra es:
user ALUMNO lacks CREATE SESSION privilege;
logon denied
• Para corregirlo:
GRANT CREATE SESSION TO alumno IDENTIFIED BY clavealumno WITH
ADMIN OPTION;
35. REVOKE en Oracle
• Revoca los privilegios, a nivel de sistema u
objeto, de un usuario, rol o grupo.
REVOKE [GRANT OPTION FOR] ALL [PRIVILEGES] |
<privilege>,... FROM USER <user> | GROUP
<group> | PUBLIC [CASCADE | RESTRICT]
Se puede revocar un privilegio o un GRANT OPTION.
Por ejemplo un usuario puede perder su
habilidad de conceder privilegios pero sus
privilegios no se ven afectados.
36. Revocando Privilegios de Sistema
REVOKE ALL [PRIVILEGES] | <role> |
<system_privilege>,... FROM <user> | <role> |
PUBLIC;
REVOKE CREATE TABLE FROM alumno;
El efecto de Revoke es inmediato
37. Revocando Privilegios de Objeto
REVOKE ALL [PRIVILEGES] | <object_privilege,...>
[(<column>)] ON [<schema>].<object>] FROM
<user> | <role> | PUBLIC CASCADE CONSTRAINTS
[FORCE];
REVOKE INSERT, DELETE, UPDATE
(pago_empleado, pago_empleado2) ON
EMPLEADO FROM PUBLIC;
Todos los objetos dependientes como vistas creadas
por el usuario que perdió el privilegio se vuelven
inválidas.
38. REVOKE en MYSQL
• REVOKE
• priv_type [(column_list)]
• [, priv_type [(column_list)]] ...
• ON [object_type] priv_level
• FROM user [, user] ...
• REVOKE ALL PRIVILEGES, GRANT OPTION
• FROM user [, user] ...
• REVOKE PROXY ON user
• FROM user [, user] ...
39. • REVOKE INSERT ON *.* FROM
'jeffrey'@'localhost';
• REVOKE ALL PRIVILEGES, GRANT OPTION
FROM user [, user] ...