Documente Academic
Documente Profesional
Documente Cultură
La informacin dicen que es poder, y como las BD son un almacn de informacin tambin
almacenan poder, por lo que han sido objeto de intentos de acceso no autorizados desde su
nacimiento. Por eso, las BD se han dotado de unos mecanismos que hacen posible la
gestin de la seguridad en el acceso a la informacin que almacenan.
Mayo de 1998.
Jess Vegas
Dpto. Informtica
Universidad de Valladolid
jvegas@infor.uva.es
ndice
1 Posibilidades
1.1 Seguridad de Cuentas
1.2 Seguridad de Objetos
1.3 Roles del Sistema
2 Implementacin de Seguridad
2.1 Creacin de Usuarios
2.2 Eliminacin de Usuarios
2.3 Privilegios del Sistema
2.4 Perfiles de Usuario
2.5 Cuentas BD sobre Cuentas SO
2.6 Protegidos por passwords
2.7 Gestionando Privilegios
2.8 Listar Privilegios Otorgados
3 Encriptacin de passwords y Trucos
3.1 Almacenamiento de Passwords
3.2 Passwords Imposibles
3.3 Convertirse en otro Usuario
4 Auditora de Seguridad
4.1 Auditando Conexiones
4.2 Auditando Acciones
4.3 Auditando Objetos
4.4 Protegiendo los Registros de Auditora
1 Posibilidades
Oracle pone al alcance del DBA varios niveles de seguridad:
As, un usuario puede tener concedido el privilegio CREATE TABLE, pero no el ALTER
TABLE.
2 Implementacin de Seguridad
No se podr acceder a la BD a menos que se acceda primero al servidor en el que la BD
est ejecutndose. El primer paso en la seguridad de la BD es asegurar la plataforma en la
que reside. Una vez que esto ha sido conseguido, se debe considerar la seguridad del
sistema operativo. Oracle utiliza una serie de ficheros a los que los usuario no tienen porque
acceder de manera directa. Por ejemplo, los ficheros de datos o los de redo log son escritos
y leidos slo por los procesos Oracle. As, slo los DBAs que han creado estos ficheros
necesitan acceder directamente a ellos a nivel del sistema operativo.
Significado
Username
Password
Default
Tablespace
Temporary
Tablespace
Quota
Profile
A continuacin se puede ver un ejemplo de uso del comando CREATE USER en el que se
crea una cuenta para el usuario Prez:
Si no se especifica un perfil, se aplica el perfil por defecto de la BD, que se llama DEFAULT
y tiene asignados todos los lmites a UNLIMITED.
Si no se especifca una cuota el usuario no puede crear objetos.
Capacidades
Manejo de
Objetos
...
CREATE ANY
INDEX
CREATE [PUBLIC]
SYNONYM
CREATE [ANY]
TABLE
CREATE [ANY]
VIEW
Crear vistas.
DROP ANY
SYNONYM
DROP PUBLIC
SYNONYM
SELECT ANY
TABLE
INSERT ANY
TABLE
DELETE ANY
TABLE
ALTER SESSION
CREATE SESSION
Conectarse a la BD.
Gestin de la BD
...
CREATE PROFILE
CREATE ROLE
Crear roles.
CREATE ROLLBACK
SEGMENT
CREATE
TABLESPACE
CREATE USER
Crear usuarios.
ALTER PROFILE
ALTER ROLLBACK
SEGMENT
ALTER
TABLESPACE
ALTER USER
Alterar usuarios.
DROP PROFILE
DROP ROLLBACK
SEGMENT
DROP TABLESPACE
DROP USER
ALTER DATABASE
GRANT ANY
PRIVILEGE
UNLIMITED
TABLESPACE
DROP PROFILE
Los privilegios se pueden agrupar en roles, para as satisfacer a distintos tipos de usuarios.
En la instalacin se crea un rol llamado OSOPER que sirve para los operarios de la mquina
donde est la BD y permite realizar copias de seguridad en frio y en caliente. Los
privilegios de OSOPER son STARTUP, SHUTDOWN, ALTER DATABASE OPEN/MOUNT, ALTER
DATABASE BACKUP, ARCHIVE LOG, RECOVER y RESTRICTED SESSION.
Se pueden crear nuevos roles. Por ejemplo, podemos crear un rol llamado creadorCuentas
que slo pueda crear usuarios y no pueda realizar ninguna otra operacin de DBA. Las
sentencias que permiten hacer esto son las siguientes:
Privilegios
CONNECT
RESOURCE
DBA
Los recursos que pueden ser limitados via perfil son los siguientes:
Recurso
Descripcin
SESSIONES_PER_USER
CPU_PER_SESSION
CONNECT_TIME
IDLE_TIME
LOGICAL_READS_PER_SESSION
LOGICAL_READS_PER_CALL
PRIVATE_SGA
COMPOSITE_LIMIT
Los perfiles se pueden crear via el comando CREATE PROFILE, y se pueden modificar con
la sentencia ALTER PROFILE.
En general, el perfil por defecto debe ser adecuado para los usuarios normales; los usuarios
con requerimientos especiales deberan tener perfiles especiales.
tomar cualquier forma, incluso ser la cadena nula, "", con lo que no existe prefijo que
diferencie las cuentas en la BD y en el SO.
Por ejemplo, consideremos la cuenta del SO llamada alu10. La correspondiente cuenta en
la BD sera OPS$ALU10. Cuando el usuario alu10 est en activo en el SO, puede acceder a
su cuenta OPS$ALU10 sin especificar el password, como se muestra a continuacin:
$ sqlplus /
En este caso el carcter "/" toma el lugar de la combinacin del nombre de usuario y del
password que debera aparecer.
Las cuentas pueden ser creadas con passwords aunque no vaya a ser utilizado. Ya que de
este modo ser posible acceder a la cuenta de OPS$ALU10 desde otra cuenta diferente a la
alu10 del SO. La sentencia de creacin de la cuenta OPS$ALU10 puede ser la siguiente:
$ sqlplus ops$alu10/01ula
Existen dos formas de evitar este problema. La primera es creando el usuario BD sin
especificar un password, utilizando la clasula IDENTIFIED EXTERNALLY. De esta manera
evitamos la necesidad de expecificar un password para la cuenta, obligando a la conexin
entre las cuentas de la BD y del SO:
Los passwords puede proteger tanto cuentas como roles. Los passwords se fijan a la hora de
la creacin de ambos y se pueden modificar con los comandos ALTER USER y ALTER ROLE,
respectivamente.
No es necesario asignar un password a un rol, pero si tiene uno debe ser especificado por el
usuario cuando se asigna ese rol.
Capacidades Otorgadas
SELECT
INSERT
UPDATE
DELETE
ALTER
INDEX
REFERENCES
EXECUTE
Statement processed.
SVRMGR> create role inserta_perez;
Statement processed.
SVRMGR> grant select, insert on perez.emp to inserta_perez;
Statement processed.
Se pueden asignar roles a roles:
Contenidos
DBA_ROLES
DBA_ROLES_PRIVS
DBA_SYS_PRIVS
DBA_TAB_PRIVS
DBA_COL_PRIVS
ROLE_ROLE_PRIVS
ROLE_SYS_PRIVS
ROLE_TAB_PRIVS
Conocer el modo en que se encriptan y se tratan los passwords puede posiblitar al DBA la
realizacin de ciertas tareas que de otro modo le resultaran imposibles. Esto incluye el
establecer passwords imposibles y la habilidad de convertirse en otro usuario.
REM *
REM * Este script genera los comandos necesarios para
convertirse
REM * temporalmente en otro usuario.
REM *
REM * Solo para DBAs
REM *
set
set
set
set
pagesize 0
verify of
feedback of
echo of
REM *
REM * Preguntar por el usuario a manipular.
REM *
accept user prompt 'Usuario? '
set termout of
REM *
***
*** Ahora es &&user
*** No olvide ejecutar reset.sql al final
***
La ejecucin de este script produce otro script llamado reset.sql con el siguiente
contenido:
4 Auditora de Seguridad
El SGBD Oracle tienen la capacidad de auditar todas las acciones que tienen lugar en la
BD. Se pueden auditar tres tipos de acciones:
La BD registra todos los intentos de accin, tanto los exitosos como los infructuosos,
aunque es un parmetro configurable.
Para habilitar la capacidad de auditora, se debe fijar el parmetro AUDIT_TRAIL en el
fichero init.ora. Los registros de auditora se almacenan en la tabla SYS.AUD$ o bien su
gestin se deja al SO. Cuando se decide utilizar la tabla SYS.AUD$ esta debe revisarse
peridicamente, por si hiciera falta truncarla debido a que su aumento de tamao puede
causar problemas de espacio en el tablespace SYSTEM. Los valores del parmetro
AUDIT_TRAIL son los que se exponen en la siguiente tabla:
Valor
Descripcin
NONE
Deshabilita la auditora
BD
OS
Todo intento de conexin con la BD ser registrado. El comando para iniciar la auditora es
select
os_username,
/* nombre de usuario SO */
username,
/* nombre de usuario BD */
terminal,
decode(returncode,'0','Conectado',
'1005','Solo username, sin password',
'1017','Password incorrecto',
returncode), /* comprobacion de error */
to_char(timestamp,'DD-MON-YY HH24:MI:SS'), /* hora de
entrada */
to_char(logof_time,'DD-MON-YY HH24:MI:SS') /* hora de salida
*/
from dba_audit_session;
Para deshabilitar la auditoria de las conexiones basta con ejecutar la siguiente sentencia:
Comandos Auditados
CLUSTER
DATABASE LINK
EXISTS
INDEX
NOT EXISTS
PROCEDURE
PROFILE
PUBLIC DATABASE
LINK
PUBLIC SINONYM
ROLE
ROLLBACK SEGMENT
SEQUENCE
SESSION
SYNONYM
SYSTEM AUDIT
SYSTEM GRANT
TABLE
TABLESPACE
TRIGGER
USER
VIEW
Por ejemplo, para auditar todas acciones que tienen que ver con las tablas sirve el siguiente
comando:
SQL_FULLTEXT SENTENCIA,
EXECUTIONS VECES_EJECUTADA,
USERS_EXECUTING VECES_DIFERENTES_USUARIOS
From V$sqlarea a
Order by a.LAST_ACTIVE_TIME desc)
Where rownum <= (numero de sentencias que quieres que te salgan);
- Si quieres ordenadas por la ltima CARGADA :
Select * from
( Select FIRTS_LAST_TIME ULTIMA_CARGADA,
SQL_FULLTEXT SENTENCIA,
EXECUTIONS VECES_EJECUTADA,
USERS_EXECUTING VECES_DIFERENTES_USUARIOS
From V$sqlarea a
Order by FIRTS_LAST_TIME desc)
Where rownum <= (numero de sentencias que quieres que te salgan;
Cambia el password:
alter user loginname identified by newPassword;
Un Tablespace default, el cual es donde el usuario va a poder crear sus objetos por
defecto, sin embargo, esto no significa que pueda crear objetos, o que tenga una
cuota de espacio. Estos permisos se asignan de forma separada, salvo si utiliza el
privilegio RESOURCE el que asigna una quota unlimited, incluso en el Tablespace
SYSTEM! Sin embargo si esto ocurre, ud. puede posteriormente mover los objetos
creados en el SYSTEM a otro Tablespace.
Un Tablespace temporal, donde el usuario crea sus objetos temporales y hace los
sort u ordenamientos.
Un perfil o profile de usuario, que son las restricciones que puede tener su cuenta
(opcional).
Por ejemplo, conectado como el usuario SYS, creamos un usuario y su clave asi:
SQL> CREATE USER ahernandez IDENTIFIED BY ahz
DEFAULT TABLESPACE users;
Si no se indica un Tablespace por defecto, el usuario toma el que est definido en la BD
(generalmente el SYSTEM). Para modificar el Tablespace default de un usuario se hace de
la siguiente manera:
SQL> ALTER USER jperez DEFAULT TABLESPACE datos;
Tambin podemos asignar a los usuarios un Tablespace temporal donde se almacenan
operaciones de ordenamiento. Estas incluyen las clusulas ORDER BY, GROUP BY,
SELECT DISTINCT, MERGE JOIN, o CREATE INDEX (tambin es utilizado cuando se
crean Tablas temporales).
4.1 System: Que permite al usuario hacer ciertas tareas sobre la BD, como por ejemplo
crear un Tablespace. Estos permisos son otorgados por el administrador o por alguien que
haya recibido el permiso para administrar ese tipo de privilegio. Existen como 100 tipos
distintos de privilegios de este tipo.
En general los permisos de sistema, permiten ejecutar comandos del tipo DDL (Data
definition Language), como CREATE, ALTER y DROP o del tipo DML (Data
Manipulation Language). Oracle 10g tiene mas de 170 privilegios de sistema los cuales
pueden ser vistos consultando la vista: SYSTEM_PRIVILEGE_MAP
Entre todos los privilegios de sistema que existen, hay dos que son los importantes:
SYSDBA y SYSOPER. Estos son dados a otros usuarios que sern administradores de base
de datos.
Para otorgar varios permisos a la vez, se hace de la siguiente manera:
SQL> GRANT CREATE USER, ALTER USER, DROP USER TO ahernandez;
4.2 Object: Este tipo de permiso le permite al usuario realizar ciertas acciones en objetos
de la BD, como una Tabla, Vista, un Procedure o Funcin, etc. Si a un usuario no se le dan
estos permisos slo puede acceder a sus propios objetos (vase USER_OBJECTS). Este
tipo de permisos los da el owner o dueo del objeto, el administrador o alguien que haya
recibido este permiso explcitamente (con Grant Option).
Por ejemplo, para otorgar permisos a una tabla Ventas para un usuario particular:
SQL> GRANT SELECT,INSERT,UPDATE, ON analista.venta TO jperez;
Adicionalmente, podemos restringir los DML a una columna de la tabla mencionada. Si
quisieramos que este usuario pueda dar permisos sobre la tabla Factura a otros usuarios,
utilizamos la clusula WITH GRANT OPTION. Ejemplo:
SQL> GRANT SELECT,INSERT,UPDATE,DELETE ON venta TO mgarcia WITH
GRANT OPTION;
5. Asignar cuotas a Usuarios
Por defecto ningun usuario tiene cuota en los Tablespaces y se tienen tres opciones para
poder proveer a un usuario de una quota:
5.1Sin limite, que permite al usuario usar todo el espacio disponible de un Tablespace.
5.2 Por medio de un valor, que puede ser en kilobytes o megabytes que el usuario puede
usar. Este valor puede ser mayor o nenor que el tamao del Tablespace asignado a l.
5.3 Por medio del privilegio UNLIMITED TABLESPACE, se tiene prioridad sobre
cualquier cuota dada en un Tablespace por lo que tienen disponibilidad de todo el espacio
incluyendo en SYSTEM y SYSAUX.
No se recomienda dar cuotas a los usuarios en los Tablespaces SYSTEM y SYSAUX, pues
tipicamente slo los usuarios SYS y SYSTEM pueden crear objetos en stos. Tampoco dar
cuotas en los Tablespaces Temporal o del tipo Undo.
6. Roles
Finalmente los Roles, que son simplemente un conjunto de privilegios que se pueden
otorgar a un usuario o a otro Rol. De esa forma se simplifica el trabajo del DBA en esta
tarea.
Por default cuando creamos un usuario desde el Enterprise Manager se le asigna el permiso
de connect, lo que permite al usuario conectarse a la BD y crear sus propios objetos en su
propio esquema. De otra manera, debemos asignarlos en forma manual.
Para crear un Rol y asignarlo a un usuario se hace de la siguiente manera:
SQL> CREATE ROLE appl_dba;
Opcionalmente, se puede asignar una clave al Rol:
SQL> SET ROLE appl_dba IDENTIFIED BY app_pwd;
Para asignar este Rol a un usuario:
SQL> GRANT appl_dba TO jperez;
Otro uso comn de los roles es asignarles privilegios a nivel de Objetos, por ejemplo en una
Tabla de Facturas en donde slo queremos que se puedan hacer Querys e Inserts:
SQL> CREATE ROLE consulta;
SQL> GRANT SELECT,INSERT on analista.factura TO consulta;
Y finalmente asignamos ese rol con este perfil a distintos usuarios finales:
SQL> GRANT consulta TO ahernandez;
Nota: Existen algunos roles predefinidos, tales como:
CONNECT, CREATE SESSION, CREATE TABLE, CREATE VIEW, CREATE
SYNONYM, CREATE SEQUENCE, CREATE DATABASE LINK, CREATE CLUSTER,
ALTER SESSION, RESOURCE, CREATE PROCEDURE, CREATE SEQUENCE,
CREATE TRIGGER, CREATE TYPE, CREATE CLUSTER, CREATE INDEXTYPE,
CREATE OPERATOR SCHEDULER, CREATE ANY JOB, CREATE JOB, EXECUTE
ANY CLASS, EXECUTE ANY PROGRAM,
MANAGE SCHEDULER, etc.
DBA: Tiene la mayora de los privilegios, no es recomendable asignarlo a usuarios que no
son administradores.
SELECT_CATALOG_ROLE: No tiene privilegios de sistema, pero tiene cerca de 1600
privilegios de objeto.
Para consultar los roles definidos y los privilegios otorgados a travs de ellos, utilize las
vistas:
SQL> select * from DBA_ROLES;
SQL> select * from DBA_ROLE_PRIVS order by GRANTEE;
Mtodos recomendados
Tipo de
Administracin
hay una
Mtodo recomendado
conexin segura?
local
si
local
no
remota
si
remota
no
Sistema Operativo
Mtodo utilizado
Unix y VMS
NT
Configuracin
En c:\orant\database\initorcl.ora
Autentificacin por Sistema Operativo
remote_login_passwordfile = none
remote_login_passwordfile = exclusive
remote_login_passwordfile = shared
SYSOPER
SQL>connect sys/change_on_install
pero s como
Supone
OSOPER
OSDBA
c:\orant\bin>orapwd80.exe file=c:\orant\database\pwdorcl.ora
password=oracle
Suplantacin de un usuario