Viernes, 12 Junio 2020 03:24

Control de Acceso a Usuarios de la Base de Datos

Rate this item
(0 votes)

Objetivos:

  • Diferenciar los privilegios del sistema de los de objeto.
  • Otorgar privilegios en tablas.
  • Ver privilegios en el diccionario de datos.
  • Otorgar roles.
  • Distinguir entre privilegios y roles.

NOTA: Usamos como ejemplo la base de datos: ORCL, la cual viene por defecto en cualquier versión de ORACLE.


Control de Acceso a Usuarios

En un entorno de varios usuarios, necesita mantener la seguridad del acceso y el uso de la base de datos. Con la seguridad de base de datos de Oracle Server, puede:

  • Controlar el acceso a la base de datos.
  • Otorgar acceso a objetos específicos de la base de datos.
  • Confirmar los privilegios otorgados y recibidos con el diccionario de datos Oracle.
  • Crear sinónimos para objetos de base de datos.

La seguridad de base de datos se puede clasificar en dos categorías: Seguridad del Sistema y Seguridad de los Datos. La seguridad del sistema cubre el acceso y el uso de la base de datos en el nivel del sistema como, por ejemplo, nombre de usuario y contraseña, el espacio en disco asignado a los usuarios y las operaciones del sistema que pueden realizar los usuarios. La seguridad de datos cubre el acceso y el uso de los objetos de base de datos y las acciones que esos usuarios pueden llevar a cabo en los objetos.


Privilegios

  • Seguridad de base de datos:

–Seguridad del sistema.

–Seguridad de datos.

  • Privilegios del sistema: Obtención de acceso a la base de datos.
  • Privilegios de objeto: Manipulación del contenido de los objetos de base de datos.

Los privilegios son el derecho a ejecutar sentencias SQL en particular. El DBA (administrador de la base de datos) es un usuario de alto nivel con la capacidad de crear usuarios y de otorgarles acceso a la base de datos y a sus objetos. Los usuarios necesitan privilegios del sistema para obtener acceso a la base de datos y privilegios de objeto para manipular el contenido de los objetos de la base de datos. A los usuarios también se les puede otorgar el privilegio de otorgar privilegios adicionales a otros usuarios o a roles, que son grupos especificados de privilegios relacionados. 

Esquemas

Un esquema es una recopilación de objetos como, por ejemplo, tablas, vistas y secuencias. El esquema es propiedad de un usuario de base de datos y tiene el mismo nombre que el usuario.

Privilegios del Sistema

Los usuarios y los roles tienen a su disposición más de 100 privilegios del sistema distintos. Los privilegios del sistema suelen ser proporcionados por el administrador de la base de datos.

  • Hay más de 100 privilegios disponibles.
  • El administrador de la base de datos tiene privilegios del sistema de alto nivel para tareas como, por ejemplo:

–Creación de usuarios nuevos.

–Eliminación de usuarios.

–Eliminación de tablas.

–Realización de copias de seguridad de tablas.

Privilegios de DBA Típicos.

Privilegio del Sistema.

Operaciones Autorizadas

CREATE USER

La persona a la que se otorga el privilegio puede crear otros usuarios de Oracle.

DROP USER

La persona a la que se otorga el privilegio puede borrar otro usuario.

DROP ANY TABLE

La persona a la que se otorga el privilegio puede borrar una tabla de cualquier esquema.

BACKUP ANY TABLE

La persona a la que se otorga el privilegio puede realizar copias de seguridad de cualquier esquema con la utilidad de exportación.

SELECT ANY TABLE

La persona a la que se otorga el privilegio puede consultar tablas, vistas o instantáneas en cualquier esquema.

CREATE ANY TABLE

La persona a la que se otorga el privilegio puede crear tablas en cualquier esquema.

 

Creación de un Usuario

Para crear el usuario, el DBA ejecuta la sentencia CREATE USER. El usuario no tiene ningún privilegio en ese momento. Por tanto, el DBA puede otorgar privilegios a ese usuario. Estos privilegios determinan lo que el usuario podrá hacer en el nivel de base de datos. 

Sintaxis:

CREATE USER user
IDENTIFIED BY password;

En la sintaxis:

  • useres el nombre del usuario que se va a crear.
  • Passwordespecifica que el usuario se debe conectar con esta contraseña.

Ejemplos:

CREATE USER vmoquete
IDENTIFIED BY "MagicPL/SQL";

/*En este ejemplo(conectado con hr) creamos el usuario: vmoquete, con la siguiente contraseña: MagicPL/SQL(sin las comillas dobles).*/


Privilegios de Usuario Típicos

  • Una vez creado el usuario, elDBAle puede otorgar privilegios del sistema específicos.
  • Un desarrollador de aplicaciones, por ejemplo, puede tener los siguientes privilegios del sistema:

Privilegio del Sistema

Operaciones Autorizadas

CREATE SESSION

Conectarse a la base de datos

CREATE TABLE

Crear tablas en el esquema del usuario

CREATE SEQUENCE

Crear una secuencia en el esquema del usuario

CREATE VIEW

Crear una vista en el esquema del usuario

CREATE PROCEDURE

Crear un procedimiento, una función o un paquete en el esquema del usuario

 

Sintaxis:

GRANT privilege [, privilege...] 
TO user [, user| role, PUBLIC...];

En la sintaxis:

  • privilegees el privilegio del sistema que se va a otorgar.
  • user |role|PUBLIC es el nombre del usuario, el nombre del rol o, en el caso de PUBLIC, designa que el privilegio se otorga a todos los usuarios.

Nota: Los privilegios del sistema actuales se pueden encontrar en la vista de diccionario SESSION_PRIVS.

Ejemplo:

GRANT create session, create table,
create sequence, create view
TO vmoquete;

/*El usuario vmoquete fue creado en un ejemplo previo a este, pero no se le asigno ningún privilegio por lo cual no tenia ningún tipo de acceso al sistema, en este ejemplo le otorgamos algunos privilegios para que pueda conectarse y crear ciertos objetos.*/


Los Roles

Un rol es un grupo especificado de privilegios relacionados que se pueden otorgar al usuario. Este método facilita la revocación y el mantenimiento de privilegios. 

Un usuario puede tener acceso a varios roles y se puede asignar a varios usuarios el mismo rol. Los roles se suelen crear para una aplicación de base de datos. 

Creación y Asignación de un Rol

En primer lugar, el DBA debe crear el rol. Después, el DBA puede asignar privilegios al rol y asignar el rol a usuarios. 

 

Sintaxis:

CREATE ROLE role;

En la sintaxis: 

  • role es el nombre del rol que se va a crear 

Una vez creado el rol, el DBA puede utilizar la sentencia GRANT para asignar el rol a usuarios, del mismo modo que puede asignar privilegios al rol.

Ejemplo:

CREATE ROLE auditor; 

GRANT select on hr.employees
TO auditor;

GRANT auditor
TO vmoquete;

/*El ejemplo anterior muestra como crear un role, como otorgar privilegios a dicho role y luego como asignar el role a los usuarios.*/

 

Otorgando Privilegios de Objeto

  • Los privilegios de objeto varían de un objeto a otro.
  • Un propietario tiene todos los privilegios en el objeto.
  • Un propietario puede otorgar privilegios específicos en el objeto del que es propietario.

Existen diferentes privilegios de objeto disponibles para diferentes tipos de objetos de esquema. Un usuario tiene automáticamente todos los privilegios de objeto para objetos de esquema contenidos en el esquema del usuario. Un usuario puede otorgar cualquier privilegio de objeto en cualquier objeto de esquema que sea propiedad del usuario a cualquier otro usuario o rol. Si el otorgamiento incluye WITH GRANT OPTION, la persona a la que se otorga el privilegio puede otorgar a su vez el privilegio de objeto a otros usuarios; de lo contrario, la persona a la que se otorga el privilegio lo puede utilizar pero no lo puede otorgar a otros usuarios. 

Sintaxis:

GRANT object_priv|all| [(columns)]
ON object
TO {user|role|PUBLIC}
[WITH GRANT OPTION];

En la sintaxis:

  • object_prives un privilegio de objeto que se va a otorgar.
  • ALLespecifica todos los privilegios de objeto.
  • columnsespecifica la columna de una tabla o de una vista en la que se otorgan los privilegios.
  • ONobject es el objeto en el que se otorgan privilegios.
  • TOidentifica a quién se otorga el privilegio.
  • PUBLICotorga privilegios de objeto a todos los usuarios.
  • WITH GRANT OPTIONpermite a la persona a la que se otorga el privilegio otorgar privilegios de objeto a otros usuarios y roles.

Directrices:

  • Para otorgar privilegios en un objeto, éste debe estar en el esquema o le deben haber otorgado los privilegios de objeto con la cláusulaWITH GRANT OPTION
  • Un propietario de objeto puede otorgar cualquier privilegio de objeto a cualquier otro usuario o rol de la base de datos. 
  • El propietario de un objeto adquiere automáticamente todos los privilegios de objeto en ese objeto.

Nota: Los DBA suelen asignar privilegios del sistema; cualquier usuario propietario de un objeto puede otorgar privilegios de objeto.

Ejemplos:

GRANT select 
ON hr.jobs 
TO sue, scott;

/*En ahora los usuarios sue y rich pueden consultar la tabla jobs del esquema hr.*/

 

GRANT all
ON hr.departments
TO vmoquete;

/*Luego de este GRANT el usuario vmoquete puede consultar, insertar, actualizar y eliminar registros en la tabla departments del esquema hr.*/

 

GRANT update (city, location_id) ON hr.locations TO auditor, scott;

/*En este ejemplo se le otorga el privilegio para actualizar los campos city y location_id de la tabla locations de hr al role auditor y al usuario scott.*/

 

Otorgando el Privilegio de Otorgar Privilegios

Palabras Clave WITH GRANT OPTION

La persona a la que se otorga un privilegio que se otorgue con la cláusula WITH GRANT OPTION lo puede transferir a otros usuarios y roles. Los privilegios de objeto otorgados con la cláusula WITH GRANT OPTION se revocan si se revoca el privilegio del otorgante. 

Palabra Clave PUBLIC

Un propietario de la tabla puede otorgar acceso a todos los usuarios mediante la palabra clave PUBLIC.

 

Ejemplos:

CREATE USER other_user
IDENTIFIED BY "MagicPL/SQL";

/*Aquí(conectados con hr) creamos el usuario other_user con la contraseña: MagicPL/SQL*/

 

GRANT CREATE SESSION
TO other_user;

/*Aquí le otorgamos el privilegio para que pueda crear sesiones, osea conectarse a la Base de Datos.*/

 

GRANT select, insert
ON hr.jobs
TO vmoquete
WITH GRANT OPTION;

/*Aquí otorgamos el privilegio de consultar e insertar en la tabla jobs de hr al usuario vmoquete, debido a que especificamos WITH GRANT OPTION, el usuario puede transferir estos privilegios al usuario other_user.*/

GRANT select
ON hr.countries
TO PUBLIC;

/*Con este GRANT permitimos a todos los usuarios de la Base de Datos consultar en la tabla countries de HR.*/


Confirmación de Privilegios Otorgados

Si intenta realizar una operación no autorizada, como suprimir una fila de una tabla para la que no tiene el privilegio DELETEOracle Server no permite que la operación se realice. 

Si recibe el mensaje de error de Oracle Server “table or view does not exist”, es porque ha realizado una de estas acciones: 

  • Ha especificado una tabla o una vista que no existen 
  • Ha intentado realizar una operación en una tabla o en una vista para la que no tiene el privilegio adecuado 

Puede acceder al diccionario de datos para ver los privilegios de los que dispone. El gráfico describe varias vistas de diccionario de datos.

Vista del Diccionario de Datos

Descripción

ROLE_SYS_PRIVS

Privilegios del sistema otorgados a roles.

ROLE_TAB_PRIVS

Privilegios de la tabla otorgados a roles.

USER_ROLE_PRIVS

Roles a los que puede acceder el usuario.

USER_TAB_PRIVS_MADE

Privilegios de objeto otorgados en los objetos del usuario.

USER_TAB_PRIVS_RECD

Privilegios de objeto otorgados al usuario.

USER_COL_PRIVS_MADE

Privilegios de objeto otorgados en las columnas de los objetos del usuario.

USER_COL_PRIVS_RECD

Privilegios de objeto otorgados al usuario en columnas específicas.

USER_SYS_PRIVS

Privilegios del sistema otorgados al usuario.


Revocación de Privilegios de Objeto

Puede eliminar privilegios otorgados a otros usuarios mediante la sentencia REVOKE. Al utilizar la sentencia REVOKE, los privilegios que especifique se revocarán de los usuarios que especifique y de cualquier otro usuario a quien el usuario revocado hubiera otorgado esos privilegios. 

Sintaxis:

REVOKE {privilege [, privilege...]|ALL}
ON object
FROM {user[, user...]|role|PUBLIC}
[CASCADE CONSTRAINTS];

En la sintaxis: 

  • CASCADE es necesario para eliminar cualquier restricción de integridad referencial realizada en el objeto CONSTRAINTS mediante el privilegio REFERENCES

Nota: Si revoca los privilegios de un usuario que debe dejar la compañía, debe volver a otorgar cualquier privilegio que este usuario hubiera otorgado a otros usuarios. Si borra la cuenta de usuario sin revocarle los privilegios, esta acción no afectará a los privilegios del sistema otorgados por este usuario a otros usuarios.

Ejemplo:

REVOKE select, insert
ON hr.jobs
FROM vmoquete;

/*Aquí revocamos los privilegios de consultar e insertar en la tabla jobs de hr al usuario vmoquete; dichos privilegios también son revocados de cualquier otro usuario al cual vmoquete los haya otorgado.*/

 

Detalles:

Si se otorga un privilegio a un usuario con la cláusula WITH GRANT OPTION, ese usuario también puede otorgar el privilegio con la cláusula WITH GRANT OPTION, de forma que es posible una larga cadena de personas a las que se otorgan privilegios, aunque no se permiten otorgamientos circulares. Si el propietario revoca un privilegio de un usuario que otorgó dicho privilegio a otros usuarios, se revocarán en cascada todos los privilegios otorgados. 

Por ejemplo, si el usuario vmoquete otorga un privilegio SELECT en una tabla al usuario other_user con la cláusula WITH GRANT OPTION, el usuario other_user también puede otorgar al usuario user_x el privilegio SELECT con la cláusula WITH GRANT OPTION y el usuario user_x puede otorgar al usuario user_nx el privilegio SELECT. Si el usuario vmoquete revoca los privilegios del usuario other_user, los privilegios otorgados a los usuarios user_x y user_nx también se revocan.


Link con un Archivo de ejercicios de práctica!!!


Fuente: Base de Datos Oracle 10g: Conceptos Fundamentales de SQL 1

Read 278 times Last modified on Miércoles, 08 Julio 2020 16:51

Leave a comment

Make sure you enter all the required information, indicated by an asterisk (*). HTML code is not allowed.

Magic PL/SQL

Blog orientado al desarrollo de PL/SQL en el "Maravilloso Mundo ORACLE". Cursos Online y Tutoriales Gratis.