Privilegios
Por seguridad nadie puede hacer nada en una BD Oracle, a menos que se le otorgue los privilegios con anterioridad.
Por defecto, ni si quiera se permite la conexión a una base de datos si no se tiene los privilegios apropiados.
Las únicas cuentas de usuarios a los que no hay que otorgarles permisos previos son los DBAs (SYS y SYSTEM), ya que los tienen desde su creación.
Los privilegios solo pueden ser otorgados por:
- El DBA.
- Usuarios a los que se le ha otorgado el privilegio de conceder privilegios.
- Todos los usuarios pueden conceder privilegios sobre sus propios objetos.
Los privilegios se pueden otorgar o quitar a las cuentas de usuario o roles con los comandos:
- GRANT: Otorga privilegios.
- REVOKE: Elimina privilegios.
Existe 2 grupos de privilegios:
- Privilegios de sistema: Estos privilegios afectan a las operativas que se pueden hacer en el sistema o a objetos.
- Privilegios de objetos: Estos privilegios solo afectan a los objetos de la base de datos.
Privilegios de sistema
Hay unos 200 privilegios de sistema y la mayoría de estos permisos permiten acciones que afectan al Diccionario de Datos, el resto a la BD o instancia.
Los privilegios más usados son:
- CREATE SESSION: Permite al usuario poder conectarse a la base de datos, un usuario puede tener una cuenta de usuario sin este privilegio, por lo que no podrá conectarse a la base de datos.
- RESTRICTED SESSION: Si la base de datos es comenzada con STARTUP RESTRICT, o con ALTER SYSTEM ENABLE RESTRICTED SESSION, solo los usuarios con este privilegio serán capaces de conectar.
- ALTER DATABASE: Permite modificar las estructuras físicas de la base de datos.
- ALTER SYSTEM: Permite modificar las estructuras de memoria y los parámetros de instancias.
- CREATE TABLESPACE: Permite crear un tablespaces.
- CREATE TABLE: Permite crear una tabla.
- GRANT ANY OBJECT PRIVILEGE: Permite conceder permisos a otros usuarios sobre cualquier objeto de esquema.
- [CREATE | DROP | INSERT | UPDATE | DELETE | SELECT] ANY TABLE. Permite realizar estas operaciones sobre cualquier tabla.
Sintaxis para conceder y eliminar privilegios de sistema:
- GRANT privilegio1, privilegio2… TO usuario/rol
- REVOKE privilegio1, privilegio2… FROM usuario/rol
Ejemplo de conceder el permiso de crear una sesión:
- GRANT create session TO user1
Ejemplo de eliminar el permiso de crear tablas:
- REVOKE create table FROM user1
Los privilegios de un usuario se pueden ver en la tabla DBA_SYS_PRIVS:
- SELECT PRIVILEGE FROM DBA_SYS_PRIVS WHERE GRANTEE=[user1]
Privilegios de objeto
Estos permisos habilitan la realización de comandos DML (Select, Insert, Update, Delete) contra un objeto de esquema y ejecución de objetos PL/SQL específicos, esto permisos se aplican a un único objeto de un esquema.
Los privilegios son:
- SELECT: Permite al usuario realizar una consulta a las tablas, vistas, secuencias y sinónimos de un esquema.
- INSERT / UPDATE / DELETE: Permite al usuario realizar estas operaciones DML a las tablas, vistas y sinónimos de un esquema.
privilegios