Oracle PDF

Descargar como pdf o txt
Descargar como pdf o txt
Está en la página 1de 21

A.B.D.

2007 Administración de privilegios y roles


22/3/07 Práctica 5

Práctica 5

Administración de privilegios y roles

1. Privilegios
Un privilegio es un derecho para ejecutar un tipo particular de sentencia SQL. Ejemplos de
privilegios son:
• Derechos para conectar con la base de datos
• Derechos para crear una tabla
• Derechos para seleccionar tuplas de una tabla perteneciente a otro usuario

Los privilegios se otorgan (“grant”) a los usuarios con el fin de que tales usuarios puedan llevar a
cabo las tareas que requiere su trabajo con la base de datos. Un privilegio se otorga a un usuario sólo cuando
tal privilegio es absolutamente necesario para efectuar una determinada labor.
Un rol es un conjunto de privilegios al que se da un nombre, lo que permite que puedan ser
otorgados a la vez.
Un usuario puede recibir privilegios mediante dos vías distintas:
• De forma explícita, otorgando un derecho concreto a un usuario particular. Por ejemplo, el
usuario alum1 puede recibir el privilegio de insertar tuplas en la tabla ALUMNOS, propiedad
del usuario alum2.
• Por medio de roles, que pueden ser otorgados a distintos usuarios de la base de datos. Por
ejemplo, los privilegios de seleccionar, insertar, actualizar y borrar tuplas de la tabla
ALUMNOS pueden ser otorgados al rol llamado SECRETARÍA, y éste a su vez ser otorgado a
los usuarios secretaria1 y secretaria2.
Teniendo en cuenta que los roles son una vía más sencilla y segura de gestionar los privilegios de los
diferentes usuarios de la base de datos, los privilegios son habitualmente gestionados por esta segunda vía.
Existen dos categorías distintas de privilegios:
• Privilegios de sistema
• Privilegios de objeto

1.1 Privilegios de sistema


Un privilegio de sistema permite realizar una acción determinada sobre un tipo particular de objeto.
Por ejemplo, el privilegio de crear tablespaces y de borrar tuplas de cualquier tabla en una base de datos, son
privilegios de sistema. Existen sobre 80 privilegios distintos de sistema. Cada uno de ellos permite realizar
una operación particular o una clase de operaciones de la base de datos.
Los privilegios de sistema pueden ser otorgados a o revocados de usuarios y roles. La forma más
segura de gestionar los privilegios de sistema es mediante roles, ya que estos pueden ser puestos disponibles
de forma selectiva.
La forma de otorgar y revocar privilegios de sistema puede ser:
• A través de la Consola de Oracle Enterprise Manager.
• Mediante los comandos GRANT y REVOKE de SQL, cuya sintaxis se muestra en la sección 3.

Los privilegios de sistema son otorgados normalmente sólo a usuarios pertenecientes al personal
administrativo, así como a desarrolladores de aplicaciones.
¿Quién puede otorgar o revocar derechos de sistema?. No todos los usuarios tienen capacidad de
otorgar o revocar privilegios de sistema. Para poder hacer esto, un usuario debe poseer algún privilegio de
sistema con la opción ADMIN OPTION, o por contra con el privilegio GRANT ANY PRIVILEGE.
1/21
A.B.D. 2007 Administración de privilegios y roles
22/3/07 Práctica 5

Por ejemplo, un usuario al que se le haya otorgado el privilegio de sistema CREATE ANY TABLE
con la opción WITH ADMIN OPTION, tiene la capacidad a su vez de otorgar o revocar el privilegio
CREATE ANY TABLE a cualquier otro usuario o rol.
El anexo 1 incluye todos los privilegios de sistemas incluidos en ORACLE.

1.2 Privilegios de objeto


Un privilegio de objeto es un derecho para realizar una acción particular sobre un objeto específico
(tabla, vista, secuencia, procedimiento, función,...). Por ejemplo, el privilegio de borrar filas de la tabla
ALUMNOS es un privilegio de objeto. Dependiendo del tipo de objeto, hay diferentes tipos de privilegios de
objeto. Los privilegios de objeto se otorgan normalmente a roles definidos para grupos de usuarios finales,
aunque pueden ser otorgados directamente a usuarios específicos de la base de datos.
Algunos objetos del esquema (tales como clusters, índices,...) no tienen privilegios de objeto
asociados. Estos se controlan por medio de privilegios de sistema. Por ejemplo, para alterar un cluster, un
usuario debe ser propietario del cluster, o bien tener el privilegio de sistema ALTER ANY CLUSTER.
Los privilegios de objeto pueden otorgarse a o revocarse de usuarios o roles. La otorgación o
revocación de privilegios de objeto se realiza mediante las sentencias GRANT y REVOKE (sección 3) de
SQL o también usando la Consola de Oracle Enterprise Manager.
De manera automática, un usuario posee todos los privilegios de objeto para todos los objetos
contenidos en el esquema propiedad de dicho usuario. El propietario de un objeto puede otorgar cualquier
privilegio sobre dicho objeto a otro usuario o a un rol. Si la sentencia GRANT incluye la cláusula WITH
GRANT OPTION, el usuario al que se otorga el privilegio puede a su vez otorgar el privilegio de objeto a
otros usuarios. De otro modo, el usuario que recibe el privilegio sólo puede usarlo sobre el objeto indicado
pero no puede traspasarlo a nuevos usuarios.
El anexo 2 incluye todos los posibles privilegios de objeto y para qué tipos de objeto puede usarse
cada uno.

1.2.1 Privilegios para objetos tabla


Los privilegios de objeto para las tablas facilitan la seguridad de las tablas en dos niveles:
operaciones del Lenguaje de Manipulación de Datos (DML) y operaciones del Lenguaje de Definición de
Datos (DDL).
En cuanto a operaciones de DML, es posible otorgar privilegios de DELETE, INSERT, SELECT y
UPDATE sobre una tabla. Estos privilegios deben ser otorgados a usuarios y roles que necesiten manipular
datos de una tabla.
Los privilegios de INSERT y UPDATE pueden otorgarse selectivamente sobre determinadas
columnas de la tabla. Con un privilegio de INSERT selectivo, el usuario que recibe el privilegio puede
insertar una tupla, pero sólo valores de columnas específicas, todas las otras columnas reciben un valor
NULL. Con un privilegio de UPDATE selectivo, el usuario sólo puede modificar valores de una columna
específica para una tupla. Los privilegios de INSERT y UPDATE selectivos se usan para restringir el acceso
de usuarios a datos sensibles.
Respecto a operaciones DDL, los posibles privilegios que pueden otorgarse son ALTER, INDEX y
REFERENCES. Ya que estos privilegios permiten a otros usuarios alterar o crear dependencias sobre una
tabla, estos privilegios deberían otorgarse de modo muy conservador. Aparte de estos privilegios, un usuario
que intente realizar una operación de DDL podría requerir privilegios adicionales, bien de sistema o de
objeto. De modo similar a los privilegios INSERT y UPDATE, el privilegio REFERENCES puede otorgarse
para columnas específicas de una tabla.

1.2.2 Privilegios para objetos vista


Los privilegios de objeto para las vistas permiten la realización de varias operaciones de DML. Por
supuesto, una sentencia DML realizada sobre una vista, afecta realmente a las tablas base sobre las que se

2/21
A.B.D. 2007 Administración de privilegios y roles
22/3/07 Práctica 5

define la vista. Los privilegios de objeto sobre tablas que permiten operaciones de DML pueden aplicarse de
modo similar sobre las vistas.
Para crear una vista es preciso poseer los siguientes privilegios:
• El usuario que desee crear una vista debe poseer el privilegio CREATE VIEW (para crearla sobre su
propio esquema) o CREATE ANY VIEW (para crearla sobre el esquema de otro usuario). Estos
privilegios pueden recibirse explícitamente o mediante un rol.
• Debe haber recibido explícitamente los privilegios de SELECT, INSERT, UPDATE y/o DELETE
sobre todos los objetos base que soportan la vista, o bien poseer los privilegios SELECT ANY
TABLE, INSERT ANY TABLE, UPDATE ANY TABLE y/o DELETE ANY TABLE. Estos
privilegios no pueden recibirse a través de roles.

1.2.3 Privilegios para objetos procedimiento


El único privilegio necesario para ejecutar procedimientos es EXECUTE. Un usuario sólo debe
recibir el privilegio EXECUTE para ejecutar un procedimiento, pero no necesita recibir privilegios
adicionales sobre los objetos subyacentes a los que dicho procedimiento accede.
Para crear un procedimiento el usuario ha de recibir el privilegio CREATE PROCEDURE.
Adicionalmente, el usuario propietario de un procedimiento debe poseer derechos sobre los objetos que
manipula tal procedimiento.
Cuando se ejecuta un procedimiento, tal procedimiento opera temporalmente bajo el dominio de
seguridad del usuario propietario del procedimiento. Antes de ejecutar un procedimiento, ORACLE examina
los actuales privilegios del usuario propietario del mismo. Si un privilegio necesario sobre un objeto
referenciado en el procedimiento es revocado al propietario del procedimiento, tal procedimiento no puede
ser ejecutado.

2. Roles
La mejor forma de gestionar la seguridad operacional de una base de datos es a través de los roles.
Un rol es un grupo de privilegios al que se le ha dado un nombre. Un rol puede finalmente ser otorgado a
usuarios particulares de la base de datos o también a otros roles.
Las ventajas que se obtienen con el uso de roles se pueden resumir en los siguientes puntos:
• Administración de privilegios reducida. En lugar de otorgar explícitamente el mismo conjunto de
privilegios a un grupo de usuarios, los privilegios para un grupo relacionado de usuarios pueden ser
otorgados a un rol y, posteriormente, sólo el rol necesita ser otorgado a cada miembro del grupo de
usuarios.
• Gestión dinámica de privilegios. Si los privilegios de un grupo deben cambiar, sólo es preciso
modificar el rol otorgado al grupo. El dominio de seguridad de todos los usuarios que reciben el rol
del grupo, refleja automáticamente los cambios realizados en el rol.
• Disponibilidad selectiva de privilegios. Los roles otorgados a un usuario pueden ser activados o
desactivados selectivamente. Esto permite un control específico de los privilegios de un usuario en
cualquier situación dada.
• Seguridad específica de la aplicación. El uso de un rol puede protegerse mediante un password. Es
posible construir aplicaciones para activar específicamente un rol proporcionando el password
correcto. Los usuarios no pueden activar el rol si no conocen el password.

2.1 Uso de roles


En general, un rol se crea con uno de los siguientes propósitos: gestionar los privilegios que necesita
una aplicación concreta, o gestionar los privilegios de un grupo de usuarios.
Un rol de aplicación contiene el conjunto de privilegios necesarios para ejecutar una aplicación
específica de la base de datos. Un rol de aplicación puede ser otorgado a usuarios específicos o a otros roles.
Por su parte, una aplicación puede tener varios roles, cada rol con un número diferente de privilegios que
permitan mayor o menor acceso a los datos que utiliza la aplicación.

3/21
A.B.D. 2007 Administración de privilegios y roles
22/3/07 Práctica 5

Un rol de usuario se crea para un grupo de usuarios de la base de datos que tienen unos
requerimientos de privilegios comunes. La gestión de privilegios de usuario se controla otorgando roles de
aplicación y privilegios al rol de usuario, otorgando posteriormente el rol de usuario a los usuarios
apropiados.
La funcionalidad de los roles de la base de datos incluye los siguientes aspectos:
• Un rol puede incluir privilegios de sistema y privilegios de objeto.
• Un rol puede ser otorgado a otros roles. Sin embargo un rol no puede ser otorgado a sí mismo ni
circularmente.
• Cualquier rol puede ser otorgado a cualquier usuario de la base de datos
• Un rol otorgado a un usuario puede estar activado o desactivado. El dominio de seguridad de un
usuario incluye los privilegios de todos los roles actualmente activos para tal usuario. Este dominio
no incluye los privilegios de roles que no están actualmente activos para el usuario.
• Un rol otorgado indirectamente (un rol otorgado a un rol) puede activarse o desactivarse de forma
explícita para un usuario concreto. Sin embargo si un rol recibe otros roles, todos los roles
indirectamente otorgados del rol directamente otorgado están implícitamente activados.

2.2 Gestión de roles


Para crear un rol podemos usar la Consola de Oracle Enterprise Manager o directamente el comando
SQL CREATE ROLE cuya sintaxis aparece en la siguiente figura. Cada rol de la base de datos debe tener un
nombre único. Un rol no está contenido en el esquema de ningún usuario.

Inmediatamente después de la creación un rol no tiene privilegios asociados con él. Para asociar
privilegios a un nuevo rol, es necesario otorgar privilegios u otros roles al nuevo rol.
Además podemos cambiar las características del rol una vez creado mediante la sentencia ALTER
ROLE.

Para borrar un rol utilizaremos la sentencia DROP ROLE. Cuando se borra un rol automáticamente,
se revocan los privilegios relacionados con este rol a todos los usuarios o roles a quienes se hubiese otorgado
el rol a borrar.

4/21
A.B.D. 2007 Administración de privilegios y roles
22/3/07 Práctica 5

3. Gestión de privilegios
Podemos otorgar privilegios a usuarios y roles, así como conjuntos de privilegios (o roles) a usuarios
mediante la sentencia GRANT. También podemos revocar privilegios de usuarios o roles usando la sentencia
REVOKE. En los siguientes apartados se muestra la sintaxis de ambas sentencias, así como el mecanismo
para activar y desactivar roles, mediante la sentencia SET ROLE.

3.1 Asignación de privilegios a roles o usuarios


Según el tipo de privilegios que deseemos otorgar vamos a distinguir entre:
• Asignación de privilegios de sistema o roles
• Asignación de privilegios de objeto

3.1.1 Asignación de privilegios del sistema o roles a roles o usuarios


Con una sola sentencia GRANT podemos asignar una lista de privilegios del sistema o una lista de
roles a varios usuarios o roles a la vez o a todos los usuarios (opción PUBLIC de grantee_clause). El usuario
que desee otorgar un privilegio del sistema debe haber obtenido ese mismo privilegio con la opción WITH
ADMIN OPTION o haber obtenido el privilegio del sistema GRANT ANY PRIVILEGE. Para asignar un rol,
el usuario debe haber obtenido el rol que desea asignar con WITH ADMIN OPTION o poseer el privilegio
del sistema GRANT ANY ROLE o ser el creador del rol.
En la sintaxis que se muestra a continuación, system_privilege es cualquiera de los privilegios que
aparecen en el anexo 1, role será el nombre de algún rol definido en el sistema y la opción ALL
PRIVILEGES permite asignar todos los privilegios del sistema de una vez. La cláusula IDENTIFIED BY
permite identificar específicamente a un usuario existente con una contraseña o crear un usuario no existente.
La opción WITH ADMIN OPTION proporciona a los participantes en la grantee_clause el derecho de
otorgar a su vez estos privilegios a nuevos usuarios o roles, así como revocar los privilegios, modificar el rol
o eliminar el rol.
grant_system_privileges::=

grantee_clause::=

5/21
A.B.D. 2007 Administración de privilegios y roles
22/3/07 Práctica 5

3.1.2 Asignación de privilegios de objeto a roles o usuarios


Para otorgar privilegios de objeto a usuarios o roles, es necesario también utilizar el comando
GRANT. El objeto sobre el que se concede un privilegio debe pertenecer al esquema del usuario que otorga
este privilegio o, alternativamente, el usuario que ejecuta el grant debe poseer el privilegio que desea otorgar
con la opción GRANT OPTION.

grant_object_privileges::=

on_object_clause::=

Objetc_privilege es el privilegio a ser otorgado y puede ser uno cualquiera del anexo 2. La opción
ALL PRIVILEGES concede todos los privilegios que se tengan sobre el objeto con la opción GRANT
OPTION (por supuesto, un usuario posee todos los privilegios sobre los objetos de su esquema con la opción
GRANT OPTION). Column especifica una columna de una tabla o vista, ya que es posible especificar
columnas concretas cuando se otorgan privilegios de INSERT, REFERENCES o UPDATE sobre tablas o
vistas. Si no se enumeran las columnas el privilegio podrá usarse para todas las columnas.
On_object_clause especifica el objeto sobre el cual se conceden los privilegios. Los objetos de
esquema de directorio y los objetos de esquema de recursos de Java se identifican por separado del resto de
objetos de la base de datos. Por lo que a nosotros nos afecta estos objetos pueden ser: tablas, vistas,
secuencias, procedimientos, funciones almacenadas, paquetes, vistas materializadas o sinónimos para alguno
de los objetos anteriores. Si objetc no se califica con schema, Oracle supone que el objeto se ubica en el
esquema del usuario. WITH GRANT OPTION tiene el mismo significado que en el caso de privilegios del
sistema y WITH HIERARCHY OPTION concede el privilegio especificado también a todos los subobjetos
del objeto al que se asigna (por ejemplo subvistas de una vista).

3.2 Denegación de privilegios a roles o usuarios


La sentencia REVOKE se utilizará para revocar privilegios de sistema a usuarios y roles, desasignar
roles a usuarios y roles y revocar privilegios de objeto. Para que un usuario pueda revocar un privilegio de
sistema o rol se le debe haber concedido el privilegio con la opción ADMIN OPTION. Para revocar cualquier
rol, vale también con poseer el privilegio del sistema GRANT ANY ROLE. Y para revocar un privilegio de
objeto, se deben haber concedido, anteriormente, los privilegios de objeto a cada usuario y rol.

6/21
A.B.D. 2007 Administración de privilegios y roles
22/3/07 Práctica 5

Es importante señalar que sólo pueden revocarse privilegios que hayan sido concedidos
explícitamente con la instrucción GRANT, es decir, no podría usarse REVOKE para revocar privilegios o
desasignar roles concedidos al usuario a través de otros roles. La sintaxis de la sentencia se muestra a
continuación.

revoke_system_privileges::=

revoke_object_privileges1::=

Prácticamente todas las opciones se han comentado en la sección 3.1, excepto las opciones
CASCADE CONSTRAINTS y FORCE. La primera sólo es relevante si se revocan los privilegios
REFERENCES o ALL PRIVILEGES, ya que lo que hace es eliminar todas las restricciones de integridad
referencial que el usuario que tenía el privilegio hubiese podido definir usando este privilegio. Para la
segunda sólo es preciso conocer que se utiliza para revocar el privilegio de EXECUTE en objetos de tipo
definidos por el usuario con dependencias de tipo o tabla.
Hay que tener en cuenta varias situaciones que pueden darse al ejecutar la sentencia REVOKE:
• Si se ejecuta para quitar privilegios del sistema o un rol a PUBLIC, los privilegios sólo serán
revocados a aquellos usuarios que los recibieron por medio de una concesión a PUBLIC y no a
aquellos que los recibieron explícitamente.
• Cuando varios usuarios han concedido el mismo privilegio a otro usuario, éste último sólo perderá
este privilegio si todos los usuarios que se lo concedieron revocan el privilegio al usuario.
• Si se revoca un privilegio del sistema a un usuario o a un rol toma efecto inmediatamente, de tal
forma que tanto a los usuarios a los que se hubiese concedido explícitamente o por medio de un rol
asignado dejarán de tener ese privilegio.

1
La opción de la sentencia REVOKE para privilegios de objetos con lista de columnas no funciona.
7/21
A.B.D. 2007 Administración de privilegios y roles
22/3/07 Práctica 5

• Si se desasigna un rol a un usuario o a otro rol, y el rol asignado estaba activado para ese usuario o
rol (ver siguiente sección), esta acción no toma efecto inmediatamente, sino que podrán seguir
usando los privilegios aquellos usuarios o roles para los que el rol desasignado continúe activado.
Pero una vez que se desactive no se podrá activar posteriormente.

3.3 Dominio de seguridad de roles o usuarios


Cada rol y usuario tiene su propio dominio de seguridad. El dominio de seguridad de un rol A
incluye los privilegios otorgados al rol, más aquellos otros privilegios que han sido concedidos a roles que a
su vez se han otorgado al rol A.
El dominio de seguridad de un usuario incluye:
• privilegios sobre todos los objetos de su esquema,
• privilegios otorgados al usuario,
• privilegios pertenecientes a roles que han sido otorgados al usuario y están activados, y
• privilegios otorgados al grupo PUBLIC

La forma de activar y desactivar roles otorgados a un usuario se lleva a efecto mediante la sentencia
SET ROLE. Su sintaxis es la siguiente:

En el momento de conectar con la base de datos, ORACLE establece el dominio de seguridad del
usuario activando todos los roles por defecto. Recordemos que, como se explicó en la práctica 4, en el
momento de creación de un usuario no es posible asignarle roles por defecto y que el valor inicial de roles por
defecto es ALL, lo que significa que cualquier rol que sea posteriormente otorgado a ese usuario, mediante la
sentencia GRANT, se convertirá en un rol por defecto del mismo. Podemos controlar qué roles por defecto
queremos que tenga un usuario usando la sentencia ALTER USER… DEFAULT ROLE… (ver práctica 4),
que permitirá quitar todos los roles por defecto (opción NONE), asignar una lista o asignar todos menos una
lista de roles (opción ALL EXCEPT).
El dominio de seguridad por defecto del usuario contiene todos los privilegios otorgados
explícitamente al usuario más todos aquellos privilegios incluidos en los roles por defecto. Cualquier
operación autorizada por los privilegios incluidos en el dominio de seguridad puede ser ejecutada sin
problemas.
Durante una sesión, es posible cambiar el dominio de seguridad mediante el comando SET ROLE.
Este comando modifica los roles actualmente activados en esta sesión, poniendo activos sólo un conjunto de
roles especificados en una lista, todos los roles (ALL) o ninguno (NONE). Podemos conocer los roles activos
en un momento dado consultando la vista SESSION_ROLES. El número de roles que pueden activarse
concurrentemente está limitado por el parámetro de inicialización MAX_ENABLED_ROLES.
El usuario JUAN puede usar SET ROLE para activar o desactivar cualquiera de estos roles:
• roles que han sido otorgados directamente a JUAN
• roles que se han otorgado a JUAN por medio de otros roles

8/21
A.B.D. 2007 Administración de privilegios y roles
22/3/07 Práctica 5

3.4 Roles y sentencias DDL


Dependiendo de la sentencia de DDL que se desee ejecutar, el usuario requiere ciertos privilegios.
Por ejemplo, para crear una tabla, el usuario debe tener concedido el privilegio de sistema CREATE [ANY]
TABLE. Sin embargo, para crear una vista sobre una tabla perteneciente al esquema de otro usuario, el
usuario requiere el privilegio de sistema CREATE [ANY] VIEW, pero además necesita el privilegio
SELECT para dicha tabla, o bien el privilegio de sistema SELECT ANY TABLE.
Para evitar las dependencias sobre privilegios recibidos vía roles, ORACLE restringe el uso de
privilegios específicos en ciertas sentencias DDL. De este modo se aplican las siguientes restricciones:
• Todos los privilegios de sistema y/o de objetos que permiten a un usuario ejecutar una sentencia
DDL son aplicables cuando se reciben por medio de un rol.
• Todos los privilegios de sistema y de objeto que permiten a un usuario realizar una operación de
DML que se precise para emitir una sentencia de DDL (por ejemplo para emitir una sentencia
CREATE VIEW se precisa un privilegio de SELECT) no son aplicables cuando se reciben por
medio de un rol.

Para clarificar las restricciones anteriores consideremos el siguiente ejemplo. Supongamos que el
usuario JUAN recibe los siguientes privilegios:
• se le otorga un rol que tiene el privilegio de sistema CREATE VIEW
• se le otorga un rol que tiene el privilegio de objeto SELECT sobre la tabla EMP
• no recibe de forma directa el privilegio SELECT sobre la tabla EMP
• recibe de forma directa (no vía rol) el privilegio de objeto SELECT sobre la tabla DEPT

Con tales premisas el usuario JUAN está sometido a las siguientes restricciones:
• JUAN puede emitir una sentencia SELECT sobre la tabla EMP y también sobre DEPT.
• Si JUAN emite una sentencia
CREATE VIEW EMP25 as
SELECT * from EMP where SAL > 25000;
ORACLE crea una vista EMP25, pero no puede incluir datos en ella, ya que el privilegio de
seleccionar datos de la tabla EMP los recibió mediante un rol y no directamente. Así la vista
EMP25 estará llena de errores
• JUAN puede crear una vista sobre la tabla DEPT debido a que recibió el privilegio CREATE VIEW
por medio de un rol y además el privilegio SELECT sobre la tabla DEPT directamente.

4. Tablas del diccionario relacionadas con privilegios y roles


Damos a continuación un listado de tablas y vistas del diccionario que contienen información
relevante a los privilegios y roles, así como aquellas que nos referencian objetos que son accesibles por el
usuario que está conectado a la base de datos:
• ALL_OBJECTS: Objetos accesibles por el usuario
• ALL_TABLES: Tablas accesibles por el usuario
• ALL_TAB_COMMENT: Tablas y vistas accesibles por el usuario, con un comentario añadido
• ALL_TAB_PRIVS_MADE: Concesiones del usuario y concesiones sobre los objetos del usuario
• ALL_TAB_PRIVS_RECD: Concesiones sobre objetos para los cuales el usuario o PUBLIC es el
receptor de la concesión
• ALL_COL_PRIVS_MADE: Concesiones sobre columnas de objetos para los cuales el usuario es el
propietario del objeto o el que realiza la concesión
• ALL_COL_PRIVS_RECD: Concesiones sobre columnas de objetos para los cuales el usuario es el
receptor de la concesión
• DBA_ROLE_PRIVS: Descripción de los roles otorgados a usuarios y roles
• DBA_ROLES: Todos los roles que existen en la base de datos
• DBA_SYS_PRIVS: Descripción de los privilegios de sistema otorgados a usuarios y a roles
• DBA_TAB_PRIVS: Todas las concesiones habidas sobre objetos de la base de datos
• DBA_COL_PRIVS: Todas las concesiones habidas sobre columnas de objetos de la base de datos
9/21
A.B.D. 2007 Administración de privilegios y roles
22/3/07 Práctica 5

• ROLE_ROLE_PRIVS: Información sobre roles otorgados a otros roles


• ROLE_SYS_PRIVS: Información sobre privilegios de sistema otorgados a roles
• ROLE_TAB_PRIVS: Información sobre privilegios de objeto otorgados a roles
• SESSION_PRIVS: Privilegios que están actualmente disponibles al usuario conectado
• SESSION_ROLES: Roles que el usuario tiene actualmente activados
• TABLE_PRIVILEGES: Concesión de privilegios sobre objetos para los cuales el usuario es o bien
el concesor, o bien el destinatario, o bien el propietario, o el destinatario es PUBLIC
• USER_CATALOG: Objetos propiedad del usuario
• USER_ROLE_PRIVS: Roles que han sido otorgados al usuario
• USER_SYS_PRIVS: Privilegios de sistema que han sido otorgados al usuario
• USER_TAB_PRIVS: Concesión de privilegios sobre objetos para los cuales el usuario es el
propietario, el concesor, o el que recibe la concesión
• USER_TAB_PRIVS_MADE: Todas las concesiones sobre objetos que son propiedad del usuario
• USER_TAB_PRIVS_RECD: Concesiones sobre objetos para los cuales el usuario es el que recibe la
concesión.
• USER_COL_PRIVS: Concesión de privilegios sobre columnas de objetos para los cuales el usuario
es el propietario, el concesor, o el que recibe la concesión
• USER_COL_PRIVS_MADE: Todas las concesiones sobre columnas de objetos que son propiedad
del usuario
• USER_COLS_PRIVS_RECD: Concesiones sobre columnas de objetos para los cuales el usuario es
el que recibe la concesión.

10/21
A.B.D. 2007 Administración de privilegios y roles
22/3/07 Práctica 5

5. Ejercicios
El abd de la empresa se encarga de construir los objetos necesarios para almacenar los datos de la
empresa. Estos datos se almacenan en las siguientes tablas base, que se utilizarán en algunos ejercicios:
TABLA COLUMNAS TIPO COMENTARIO
id_emp Numérico (3) Identificador del empleado. Clave primaria.
emp_nombre Carácter (30) Nombre del empleado.
EMP id_dpto Numérico (2) Identificador del departamento al que pertenece. Es una clave
externa para DPTO.
edad Numérico (3) Edad del empleado.
salario Numérico (9) Salario del empleado.
id_dpto Numérico (2) Identificador del departamento. Clave primaria.
DPTO dpto_nombre Carácter (30) Nombre del departamento.
id_director Numérico (3) Identificador del empleado que dirige este departamento.
Clave externa para EMP.
presupuesto Numérico (7) Presupuesto del departamento.
id_emp_ventas Numérico (3) Identificador del empleado que debe pertenecer al
departamento de ventas. Clave primaria y clave externa para
VENTAS EMP.
Trim1 Numérico (7) Volumen de ventas realizado por el empleado en el primer
trimestre.
Trim2 Numérico (7) Volumen de ventas realizado por el empleado en el segundo
trimestre.
Trim3 Numérico (7) Volumen de ventas realizado por el empleado en el tercer
trimestre.

A continuación realizaremos una serie de ejercicios para familiarizarnos con las operaciones
relacionadas con privilegios y roles. Para cada ejercicio debe crearse un fichero ejery.sql (donde y es el
número de ejercicio) con las sentencias a ejecutar y un fichero de spool ejery.txt (donde y es el número de
ejercicio) con la salida de la ejecución. Opcionalmente puede crearse el fichero ejery.bat (donde y es el
número de ejercicio) para ejecutar el sqlplus desde la línea de comandos o usar el sqlplus o sqlplus worksheet
interactivo.

5.1 Privilegios del sistema


Aunque ya se han realizado algunas de las siguientes operaciones en las prácticas anteriores, es
preciso reejecutarlas para disponer de los objetos necesarios para realizar los ejercicios que se proponen en
esta práctica. Podéis tomar como base los ficheros .SQL que generasteis en esas prácticas.
NOTA: Antes de crear cada objeto, bórralo por si existiese previamente.
1. Crear el tablespace DATOS_USUARIOX con el fichero asociado
c:\abd\abd0\database\datusuX1.dat (donde X en ambos casos es tu número de grupo) de tamaño
20M y autoextensible con extensiones de tamaño 1M y tamaño máximo ilimitado.
2. Crear el perfil ALUMNO_ABDX (donde X es tu número de grupo) con las mismas características
que se creó en la práctica 4, es decir:
• Limitar al usuario a una única sesión
• El tiempo de CPU por sesión será ilimitado.
• El tiempo de CPU por llamada será ilimitado.
• E tiempo de conexión máximo será de 2 horas.
• El máximo tiempo muerto permitido en una sesión es media hora.
• El número de lecturas de bloques por sesión es ilimitado.
• El número de lecturas de bloques por llamada es ilimitado.
• La SGA privada por sesión debe tener un valor por defecto.
• El límite compuesto tendrá un valor por defecto.

11/21
A.B.D. 2007 Administración de privilegios y roles
22/3/07 Práctica 5

3. Crear USUARIOX1(donde X es tu número de grupo) con las siguientes especificaciones:


• El nuevo usuario debe estar autentificado por ORACLE.
• Contraseña: USUARIOX1 (donde X es tu número de grupo)
• El tablespace por defecto debe ser DATOS_USUARIOX (donde X es tu número de grupo)
• El tablespace temporal será TEMP
• La cuota de usuario será ilimitada sobre DATOS_USUARIOX (donde X es tu número de grupo)
• Asignar al usuario el profile ALUMNO_ABDX (donde X es tu número de grupo) creado en el
punto anterior.
• Debe tener los privilegios del sistema que le permitan conectarse a la base de datos y crear tablas
y vistas (ver anexo1).
4. Crear USUARIOX2 (donde X es tu número de grupo) con las siguientes especificaciones:
• El nuevo usuario debe estar autentificado por ORACLE.
• Contraseña: USUARIOX2 (donde X es tu número de grupo)
• El tablespace por defecto debe ser DATOS_USUARIOX (donde X es tu número de grupo)
• El tablespace temporal será TEMP
• Asignar al usuario el profile ALUMNO_ABDX (donde X es tu número de grupo) creado en el
punto anterior.
• Debe tener el privilegio del sistema que le permita conectarse a la base de datos únicamente.
5. Construye y ejecuta un fichero para crear las tablas EMP, DPTO y VENTAS para el usuario
USUARIOX1 (donde X es tu número de grupo). Puedes tomar como ejemplo el fichero
CREADATE.SQL que sirve para crear otras tablas diferentes.
6. Construye un fichero para que el USUARIOX1 (donde X es tu número de grupo) inserte una fila en
cada una de las tablas anteriores y al final borre todas las filas insertadas. Como USUARIOX1
(donde X es tu número de grupo), inserta datos en las tablas anteriores utilizando ahora el fichero
INSERTARDATOS.SQL que te proporcionamos.
7. Como USUARIOX1 (donde X es tu número de grupo), consulta la información que se ha
almacenado en las tablas EMP, DPTO y VENTAS.
8. Como USUARIOX2 (donde X es tu número de grupo), consulta la información que se ha
almacenado en las tablas EMP, DPTO y VENTAS propiedad del USUARIOX1 (donde X es tu
número de grupo). ¿Puedes ver esta información? ¿Por qué?
9. Reúne en un solo fichero SQL las sentencias SQL que corresponden a los ejercicios del 1 al 6, de tal
manera que puedas reejecutarlo cada día que trabajemos con esta práctica.

5.2 Privilegios de objeto


Ahora el único usuario que tiene privilegios sobre las tablas creadas es USUARIOX1 (donde X es tu
número de grupo), que es el propietario. Vamos a otorgar diferentes privilegios de objeto sobre la tabla EMP
al USUARIOX2 (donde X es tu número de grupo). Con el fin de verificar que estamos realizando las
operaciones de manera correcta y comprobar el efecto de los privilegios otorgados, para cada uno de los
ejercicios que se indican más abajo deben incluirse en el fichero ejery.sql (donde Y es el numero de
ejercicio) los siguientes pasos:
• Desde la cuenta USUARIOX1 (donde X es tu número de grupo):
• Abrir un fichero de spool con el nombre ejery.txt (donde Y es el numero de ejercicio)
• Mostrar el nombre del usuario conectado mediante la consulta SELECT USERNAME
FROM USER_USERS;
• Otorgar los derechos solicitados en cada uno de los ejercicios (del 10 al 15) al usuario
USUARIOX2 (donde X es tu número de grupo).
• Visualizar los efectos en las vistas del diccionario
• USER_TAB_PRIVS
• USER_TAB_PRIVS_MADE
• USER_TAB_PRIVS_RECD
12/21
A.B.D. 2007 Administración de privilegios y roles
22/3/07 Práctica 5

• Desde la cuenta USUARIOX2 (donde X es tu número de grupo):


• Mostrar el nombre del usuario conectado
• Visualizar los efectos en las vistas del diccionario
• Comprobar que se puede realizar la operación sobre la cual se le ha concedido
privilegios.
• Desde la cuenta USUARIOX1 (donde X es tu número de grupo):
• Mostrar el nombre del usuario conectado
• Revocar el derecho otorgado a USUARIOX2 (donde X es tu número de grupo).
• Desde la cuenta USUARIOX2 (donde X es tu número de grupo):
• Mostrar el nombre del usuario conectado
• Comprobar que NO se puede realizar la operación para la que se le habían concedido
privilegios con anterioridad y que ahora han sido revocados.
• Desde la cuenta USUARIOX1 (donde X es tu número de grupo):
• Cerrar el fichero de spool

ADVERTENCIA: Para realizar algunos de los ejercicios siguientes será necesario crear vistas.

10. Otorgar derechos de consulta sobre todos los atributos de la tabla EMP
11. Otorgar derechos de consulta sobre todos los atributos de la tabla EMP, excepto el atributo
SALARIO
12. Otorgar derechos de consulta sobre todos los atributos de la tabla EMP para aquellos empleados que
pertenezcan al departamento de PERSONAL (Código de departamento 2)
13. Otorgar derechos de consulta e inserción sobre todos los atributos de la tabla EMP, excepto el
atributo SALARIO. Comentar el resultado obtenido al intentar realizar las siguientes operaciones
desde la cuenta USUARIOX2 (donde X es tu número de grupo):
• Insertar una tupla completa (con valor para salario) de empleado
• Insertar una tupla para un empleado sin incluir el valor del atributo salario
• Visualizar el nuevo contenido
14. Otorgar derechos de consulta e inserción sobre todos los atributos de la tabla EMP, excepto el
atributo SALARIO, para empleados que pertenezcan al departamento de personal. Comentar el
resultado obtenido al intentar realizar las siguientes operaciones:
• Desde la cuenta USUARIOX2 (donde X es tu número de grupo):
• Insertar un nuevo empleado del departamento de personal sin indicar su salario.
• Insertar un nuevo empleado del departamento de ventas sin indicar su salario
• Visualizar el nuevo contenido
• Desde la cuenta USUARIOX1 (donde X es tu número de grupo):
• Visualizar el contenido de la tabla EMP
• Actualizar los salarios de aquellos empleados que no tienen relleno el atributo salario a
100
15. Otorgar derechos de actualización sobre todos los atributos de la tabla EMP, excepto el atributo
SALARIO. Comentar el resultado obtenido al intentar realizar las siguientes operaciones:
• Desde la cuenta USUARIOX2 (donde X es tu número de grupo):
• Actualizar la información de la edad de uno de los empleados.
• Actualizar la edad y el salario de uno de los empleados
• Visualizar el nuevo contenido
• Desde la cuenta USUARIOX1 (donde X es tu número de grupo):
• Visualizar el contenido de la tabla EMP

13/21
A.B.D. 2007 Administración de privilegios y roles
22/3/07 Práctica 5

5.3 Roles
La política de seguridad de la empresa está centralizada en el administrador de la base de datos, que
debe decidir qué tipos de privilegios deben concederse a cada usuario para el acceso a las tablas EMP, DPTO
y VENTAS. Después de un estudio extenso, el ABD ha decidido que deben crearse los siguientes grupos:

Grupo UsuarioBásicoX (donde X es tu número de grupo)


Este grupo lo constituyen todos los usuarios a los que el ABD les permitirá consultar datos no
significativos de la base de datos anterior. Los privilegios de que dispone un usuario básico son de consulta e
incluyen con exclusividad lo siguiente:
• Consultar el nombre y la edad de cualquier empleado
• Consultar el nombre de los departamentos junto con el nombre de su director
• Consultar los nombres de empleados que pertenecen al departamento de ventas

Grupo PersonalX (donde X es tu número de grupo)


Los usuarios de este grupo, además de poseer los derechos de un usuario básico, deben poseer
derechos para:
• Seleccionar, insertar, modificar y borrar cualquier dato de cualquier tupla en la tabla EMP.
• Seleccionar tuplas de la tabla DPTO, pero sin tener acceso a los datos del presupuesto del
departamento.

Grupo VentasX (donde X es tu número de grupo)


Los usuarios de este grupo, además de poseer los derechos de un usuario básico, deben poseer
derechos para:
• Consultar cualquier dato (incluyendo el salario) de empleados (tabla EMP) que estén adscritos al
departamento de ventas y no otros.
• Consultar el nombre de un empleado de ventas y sus correspondientes volúmenes de ventas en los
tres trimestres
• Consultar el presupuesto del departamento de ventas.

Grupo DirectivosX (donde X es tu número de grupo)


Este grupo debe tener privilegios para seleccionar, insertar, modificar y borrar cualquier dato en
cualquiera de las tablas anteriores.

Teniendo en cuenta esta información, considera que tú eres ahora el ABD de la empresa para realizar
los siguientes ejercicios:

16. Crea todos los roles necesarios para implementar esta política de seguridad, asignándole a cada rol
los privilegios convenientes en cada caso. Dado que el usuarioX1 no tiene privilegios para crear
roles deberás otorgarle el privilegio del sistema necesario para que realice esta operación (o hacer
esta operación con el usuario SYSTEM). Ve comentando mediante REM las operaciones que vas
incluyendo en el fichero SQL.
17. Con el fin de verificar que el ejercicio anterior se ha realizado correctamente, podemos asignar al
USUARIOX2 (donde X es tu número de grupo) cada uno de los roles previamente definidos. Por
ello y mediante una serie de pasos (de manera similar a 5.2) asigna, y desasigna (y activa cuando lo
creas necesario) cada uno de los roles anteriores a USUARIOX2 (donde X es tu número de grupo),
comprobando cuándo puede o no realizar las operaciones para las que se le han otorgado privilegios
a través de cada rol.

14/21
A.B.D. 2007 Administración de privilegios y roles
22/3/07 Práctica 5

Anexo 1

Privilegios de Sistema
Privilegio de sistema Operaciones Autorizadas
ALTER ANY CLUSTER Alterar cualquier cluster en cualquier esquema
ALTER ANY INDEX Alterar cualquier índice en cualquier esquema
ALTER ANY PROCEDURE Alterar cualquier procedimiento, función o paquete almacenado en
cualquier esquema
ALTER ANY ROLE Alterar cualquier role en la BD.
ALTER ANY SEQUENCE Alterar cualquier secuencia en la BD.
ALTER ANY SNAPSHOT Alterar cualquier snapshot (es una tabla que contiene los resultados de una
consulta de una o más tablas, a menudo localizados en una BD remota) en la
BD.
ALTER ANY TABLE Alterar cualquier tabla o vista en el esquema.
ALTER ANY TRIGGER Habilitar, deshabilitar o compilar cualquier trigger de la BD en cualquier
esquema.
ALTER DATABASE Alterar la BD.
ALTER PROFILE Alterar los perfiles
ALTER RESOURCE COST Actualizar los costes para los recursos de una sesión.
ALTER ROLLBACK SEGMENT Alterar los segmentos de rollback.
ALTER SESSION Usar la sentencia ALTER SESSION
ALTER SYSTEM Usar la sentencia ALTER SYSTEM
ALTER TABLESPACE Alterar los tablespaces
ALTER USER Alterar cualquier usuario. Este privilegio autoriza a quien lo recibe a
cambiar contraseñas a otros usuarios o el método de autentificación,
asignar cuotas en cualquier tablespace, definir los tablespaces por
defecto y temporal y asignar un perfil y roles por defecto
ANALYZE ANY Analizar cualquier tabla, cluster o índice en cualquier esquema.
AUDIT ANY Auditar cualquier objeto en cualquier esquema usando la sentencia
AUDIT
AUDIT SYSTEM Usar la sentencia AUDIT (Sentencias SQL).
BACKUP ANY TABLE Usar la utilidad Export para exportar objetos incrementalmente desde
los esquemas de otros usuarios.
BECOME USER Allows grantee to become another user. (Required by any user
performing a full database import.)
COMMENT ANY TABLE Poner un comentario en cualquier tabla, vista o columna en cualquier
esquema
CREATE ANY CLUSTER Crear un cluster en cualquier esquema.
CREATE ANY INDEX Crear un índice en cualquier esquema en cualquier tabla
CREATE ANY PROCEDURE Crear procedimientos, funciones y paquetes almacenados en cualquier
esquema.
CREATE ANY SEQUENCE Crear cualquier secuencia en la BD.
CREATE ANY SNAPSHOT Crear cualquier snapshot en la BD.
CREATE ANY SYNONYM Crear cualquier sinónimo en cualquier esquema
CREATE ANY TABLE Crear tablas en cualquier esquema. El que crea la tabla debe tener
cuota de espacio en el tablespace que contiene la tabla.
CREATE ANY TRIGGER Crear un trigger en cualquier esquema asociado con una tabla de
cualquier esquema.
CREATE ANY VIEW Crear vistas en cualquier esquema
CREATE CLUSTER Crear un cluster en cualquier esquema
CREATE DATABASE LINK Crear enlaces de BD privados en nuestro esquema.
CREATE PROCEDURE Crear procedimientos, funciones y paquetes almacenados en nuestro esquema
CREATE PROFILE Crear perfiles
CREATE PUBLIC DATABASE LINK Crear enlaces de BD públicos

15/21
A.B.D. 2007 Administración de privilegios y roles
22/3/07 Práctica 5

CREATE PUBLIC SYNONYM Crear sinónimos públicos


CREATE ROLE Crear roles
CREATE ROLLBACK SEGMENT Crear segmentos de rollback
CREATE SEQUENCE Crear secuencias en nuestro esquema
CREATE SESSION Conectar a la BD
CREATE SNAPSHOT Crear snapshots
CREATE SYNONYM Crear sinónimos en nuestro esquema
CREATE TABLE Crear tablas en nuestro esquema. Para crear una tabla quien recibe el permiso
debe tener espacio en la cuota dentro del tablespace que contiene la tabla
CREATE TABLESPACE Crear tablespaces.
CREATE TRIGGER Crear trigger de BD en nuestro esquema.
CREATE USER Crear usuarios. Este privilegio también permite al creador asignar cuotas
en cualquier tablespace, definir tablespace temporal y por defecto para
el usuario y asignar un perfil como parte de una sentencia CREATE
USER
CREATE VIEW Crear vistas en nuestro esquema
DELETE ANY TABLE Borrar tuplas de tablas o vistas en cualquier esquema o vaciar tablas en
cualquier esquema
DROP ANY CLUSTER Borrar clusters en cualquier esquema
DROP ANY INDEX Borrar índices en cualquier esquema
DROP ANY PROCEDURE Borrar procedimientos, funciones y paquetes almacenados, en cualquier
esquema.
DROP ANY ROLE Borrar roles.
DROP ANY SEQUENCE Borrar secuencias en cualquier esquema
DROP ANY SNAPSHOT Borrar snapshots en cualquier esquema
DROP ANY SYNONYM Borrar sinónimos privados en cualquier esquema.
DROP ANY TABLE Borrar tablas en cualquier esquema.
DROP ANY TRIGGER Borrar trigger de BD en cualquier esquema
DROP ANY VIEW Borrar vistas en cualquier esquema
DROP PROFILE Borrar perfiles
DROP PUBLIC DATABASE LINK Borrar enlaces de BD públicos
DROP PUBLIC SYNONYM Borrar sinónimos públicos.
DROP ROLLBACK SEGMENT Borrar segmentos de rollback
DROP TABLESPACE Borrar tablespace
DROP USER Borrar usuarios
EXECUTE ANY PROCEDURE Ejecutar procedimientos o funciones o paquetes en cualquier esquema
FORCE ANY TRANSACTION Forzar las sentencias commit o rollback de cualquier transacción distribuida en
la BD local. También permite al que recibe el privilegio a inducir al fallo de una
transacción distribuida
FORCE TRANSACTION Permite forzar las sentencias commit o rollback de nuestra transacción
distribuida in la BD local.
GRANT ANY PRIVILEGE Otorgar cualquier privilegio de sistema
GRANT ANY ROLE Otorgar cualquier role en la BD
INSERT ANY TABLE Insertar tuplas en tablas y vistas de cualquier esquema
LOCK ANY TABLE Bloquear tablas y vistas de cualquier esquema
MANAGE TABLESPACE Poner los tablespaces on-line y off-line y comenzar y finalizar backups de
tablespaces.
READUP Consultar datos que tienen un clase de accesos mayor que los de la
etiqueta de sesión del usuario que recibe el privilegios. Este privilegio
esta solo disponible en Trusted Oracle7
RESTRICTED SESSION Conectarse después de que la instancia ha sido arrancada usando Server
Manager STARTUP RESTRICT
SELECT ANY SEQUENCE Referenciar secuencias de cualquier esquema
SELECT ANY TABLE Consultar tablas, vistas o snapshots de cualquier esquema
UNLIMITED TABLESPACE Usar una cantidad ilimitada de espacio de cualquier tablespace. Este
privilegio borra las cuotas especificas asignadas. Si se revoca este
privilegio a un usuario, los objetos asociados a su esquema
16/21
A.B.D. 2007 Administración de privilegios y roles
22/3/07 Práctica 5

permanecen pero cualquier petición de espacio a un tablespace es


denegada a menos que sea autorizada por cuotas específicas en los
tablespaces. No se puede otorgar este privilegio a roles.
UPDATE ANY TABLE Actualizar tuplas en tablas y vistas de cualquier esquema.

Anexo 2

Privilegios de Objeto

Procedimientos
Privilegios de Funciones
Objeto Tablas Vistas Secuencias Paquetes
ALTER √ √
DELETE √ √
EXECUTE √
INDEX √
INSERT √ √
REFERENCES √
SELECT √ √ √
UPDATE √ √

17/21
A.B.D. 2007 Administración de privilegios y roles
22/3/07 Práctica 5

Anexo 3

Resumen de las sentencias SQL de ORACLE

1. Comandos DDL (Data Definition Language)


Permiten ejecutar las siguientes tareas:
• Crear, alterar y borrar objetos
• Otorgar y revocar privilegios y roles
• Establecer opciones de auditoría
• Añadir comentarios al diccionario de datos

Los comandos DDL no son soportados por PL/SQL


COMANDO PROPOSITO
ALTER CLUSTER Permite modificar las características de almacenamiento de un cluster.
ALTER DATABASE Para realizar tareas de mantenimiento de una BD existente.
ALTER FUNCTION Para recompilar una función almacenada
ALTER INDEX Para modificar las futuras localizaciones de almacenamiento de un
índice
ALTER PACKAGE Para recompilar un paquete almacenado
ALTER PROCEDURE Para recompilar un procedimiento almacenado
ALTER PROFILE Para añadir o borrar límites de recursos hacia o desde un perfil
ALTER RESOURCE COST Para especificar una formula de cálculo del coste total de recursos
usados en una sesión
ALTER ROLE Para modificar la autorización necesaria para acceder a un role
ALTER ROLLBACK SEGMENT Para modificar las características de almacenamiento de un
segmento de rollback
Para pasar un segmento de rollback a online/offline
ALTER SEQUENCE Para redefinir la generación de valores de una secuencia
ALTER SNAPSHOT Para modificar las características de almacenamiento de un
snapshot, tiempo de refresco automático, o modo de refresco
automático.
ALTER SNAPSHOT LOG Para cambiar las características de almacenamiento del log de un
snapshot.
ALTER TABLE Para añadir una restricción de columna/integridad a una tabla
Para redefinir una columna
Para modificar las características de almacenamiento de una tabla
Para habilitar/deshabilitar/borrar una restricción de integridad
Para habilitar/deshabilitar bloqueos en una tabla
Para habilitar/deshabilitar todos los triggers (disparadores) en una
tabla
Para asociar una extensión a la tabla
Para permitir/no permitir escrituras en una tabla
Para modificar el grado de paralelismo de una tabla
ALTER TABLESPACE Para añadir/renombrar ficheros de datos
Para modificar las características de almacenamiento
Para poner un tablespace online/offline
Para iniciar/finalizar un backup
Para permitir/prohibir escribir en un tablespace
ALTER TRIGGER Para habilitar/deshabilitar un trigger(disparador) de la BD
ALTER USER Para cambiar la contraseña de un usuario, su tablespace por
defecto y temporal, cuotas en los tablespaces, perfiles o roles por
defecto
ALTER VIEW Para recompilar una vista
18/21
A.B.D. 2007 Administración de privilegios y roles
22/3/07 Práctica 5

ANALYZE Para recoger las estadísticas de utilización, validar estructuras o


identificar tuplas encadenadas para una tabla, cluster o índice.
AUDIT Para auditar para un comando SQL específico u operaciones en
un objeto
COMMENT Para añadir un comentario acerca de una tabla, vista, snapshot o
columna en el diccionario de datos
CREATE CLUSTER Para crear un cluster que puede contener una o más tablas
CREATE CONTROLFILE Para recrear un fichero de control
CREATE DATABASE Para crear una BD
CREATE DATABASE LINK Para crear un enlace (link) a una BD remota
CREATE FUNCTION Para crear una función almacenada
CREATE INDEX Para crear un índice para una tabla o cluster
CREATE PACKAGE Para crear la especificación de un paquete almacenado
CREATE PACKAGE BODY Para crear el cuerpo de un paquete almacenado
CREATE PROCEDURE Para crear un procedimiento almacenado
CREATE PROFILE Para crear un perfil y especificar sus límites sobre recursos
CREATE ROLE Para crear un role
CREATE ROLLBACK SEGMENT Para crear un segmento de rollback
CREATE SCHEMA Para usar múltiples sentencias CREATE TABLE, CREATE VIEW,
y GRANT en una transacción simple
CREATE SEQUENCE Para crear una secuencia para la generación de valores
secuenciales
CREATE SHAPSHOT Para crear un snapshot de datos desde una o más tablas remotas
maestras
CREATE SNAPSHOT LOG Para crear un snapshot log que contiene los cambios hechos en la
tabla maestra de un snapshot
CREATE SYNONYM Para crear un sinónimo de un objeto del esquema
CREATE TABLE Para crear una tabla, definiendo sus columnas, restricciones de
integridad y localización del almacenamiento.
CREATE TABLESPACE Para crear un lugar en la BD para el almacenamiento de los
objetos del esquema, segmentos de rollback, y segmentos
temporales, nombrando los archivos de datos que contienen el
tablespace.
CREATE TRIGGER Para crear un trigger de la BD
CREATE USER Para crear un usuario de la BD
CREATE VIEW Para definir una vista desde una o más tablas
DROP CLUSTER Para borrar un cluster desde la BD
DROP DATABASE LINK Para borrar un link de la BD
DROP FUNCTION Para borrar una función almacenada en la BD
DROP INDEX Para borrar un índice en la BD
DROP PACKAGE Para borrar un paquete de la BD
DROP PROCEDURE Para borrar un procedimiento de la BD
DROP PROFILE Para borrar un perfil de la BD.
DROP ROLE Para borrar un role de la BD
DROP ROLLBACK SEGMENT Para borrar un segmento de rollback de la BD
DROP SEQUENCE Para borrar una secuencia de la BD
DROP SNAPSHOT Para borrar un snapshot de la BD
DROP SNAPSHOT LOG Para borrar un snapshot log de la BD
DROP SYNONYM Para borrar un sinónimo de la BD
DROP TABLE Para borrar una tabla de la BD
DROP TABLESPACE Para borrar un tablespace de la BD
DROP TRIGGER Para borrar un disparador definido sobre la BD
DROP USER Para borrar un usuario y los objetos asociados con él
DROP VIEW Para borrar una vista de la BD
GRANT Para otorgar privilegios de sistema, roles y privilegios de objeto a
usuarios y roles

19/21
A.B.D. 2007 Administración de privilegios y roles
22/3/07 Práctica 5

NOAUDIT Para deshabilitar, parcial o completamente la auditación, como


consecuencia de una sentencia AUDIT anterior.
RENAME Para cambiar el nombre de un objeto del esquema
REVOKE Para revocar los privilegios de sistema, roles y privilegios de
objeto a usuarios y roles
TRUNCATE Para borrar todas las tuplas de una tabla o cluster y liberar el
espacio usado por las tuplas

2. Comandos DML (Data Manipulation Language)


Estos comandos permiten consultar y manipular los datos en los objetos existentes. No implican
commit en la transacción actual.
Todos los comandos DML excepto EXPLAIN PLAN son soportados en PL/SQL.
COMANDO PROPOSITO
DELETE Para borrar tuplas de una tabla
EXPLAIN PLAN Para devolver el plan de ejecución de una sentencia SQL
INSERT Para añadir nuevas tuplas a una tabla
LOCK TABLE Para bloquear una tabla o vista, limitando el acceso a ella por otros usuarios.
SELECT Para seleccionar datos en tuplas y columnas desde una o más tablas
UPDATE Para cambiar datos en una tabla

3. Comandos de Control de Transacciones


Manejan los cambios realizados por los comandos DML.
COMANDOS PROPOSITO
COMMIT Para hacer permanente los cambios hechos por sentencias desde el inicio de
una transacción.
ROLLBACK Para volver atrás todos los cambios realizados desde el inicio de una
transacción o desde un savepoint
SAVEPOINT Para establecer un punto de retorno al que se pueda volver si se desea
SET TRANSACTION Para establecer las propiedades para la transacción actual

4. Comandos de Control de Sesión


Manejan dinámicamente las propiedades de una sesión de usuario. Estos comandos no implican
commit en la transacción actual. PL/SQL no soporta comandos de control de sesión.
COMANDO PROPÓSITO
ALTER SESSION Para habilitar/deshabilitar la utilidad de traza.
Para habilitar/deshabilitar la resolución de nombres globales.
Para cambiar los valores de los parámetros NLS para una sesión
En Trusted Oracle 7, para modificar la etiqueta de sesión
Para modificar el formato por defecto de una etiqueta
En un servidor paralelo, para indicar que la sesión debe acceder a los
ficheros de la BD como si la sesión estuviera conectada a otra instancia
Para cerrar un link de la BD
SET ROLE Para habilitar/deshabilitar roles para la sesión actual

5. Comandos de Control del sistema


Maneja dinámicamente las propiedades de una instancia ORACLE. Este comando no implica una
operación commit en la transacción actual. No es soportado en PL/SQL.
COMANDO PROPÓSITO
ALTER SYSTEM Para alterar la instancia Oracle para la realización de una función
especializada.
20/21
A.B.D. 2007 Administración de privilegios y roles
22/3/07 Práctica 5

6. Comandos de SQL Embebido


Los comandos de SQL embebido se utilizan para la manipulación de datos dentro de un lenguaje de
programación. Estos comandos están soportados por los Precompiladores de Oracle.
COMANDO PROPOSITO
ALLOCATE Para alocar una variable cursor
CLOSE Para deshabilitar un cursor, liberando los recursos almacenados
CONNECT Para conectarse a una instancia Oracle.
DECLARE CURSOR Para declarar un cursor, asociándolo con una consulta
DECLARE DATABASE Para declarar el nombre de una BD remota
DECLARE Para asignar una variable SQL a una sentencia SQL
STATEMENT
DECLARE TABLE Para declarar la estructura de una tabla para el chequeo semántico de
las sentencias SQL embebidas por el precompilador.
DESCRIBE Para inicializar un descriptor
EXECUTE Para ejecutar una sentencia SQL preparada o un bloque PL/SQL o para
ejecutar un bloque PL/SQL anónimo
EXECUTE IMMEDIATE Para preparar y ejecutar sentencias SQL que no contienen variables
FETCH Para recuperar las tuplas seleccionadas por una consulta
OPEN Para ejecutar la consulta asociada con un cursor
PREPARE Realiza parse en una sentencia SQL
TYPE Para ejecutar equivalencias entre datos definidos por el usuario
VAR Para ejecutar equivalencias entre variables
WHENEVER Manipulación de condiciones específicas de errores y warning

21/21

También podría gustarte