martes, 1 de diciembre de 2009

Iniciando con uso de esquemas, usuarios y permisos con Postgres.

Hola a todos, en estos últimos días hemos estado desarrollando con postgres y nos toco la creación de la base para el sistema, debido a la complejidad que representaba el uso de varias tablas y la administración de ellas decidimos organizarlas en esquemas, dividiendo a la base de manera lógica usando tablas en común que se encuentran en un esquema que es visible para todos aquí presentamos una pequeña introducción a los esquemas.


Para crear un esquema basta con usar el comando:

CREATE SCHEMA esquema1;

Los esquemas son usados en las bases de datos para separarlas de manera lógica dándonos la opción de tener en un momento determinado corriendo un sistema real y uno de prueba dentro de la misma base pero separados mediante esquemas, podemos también tener en dos esquemas distintos los mismos nombres de tablas sin que esto nos represente un error.


Si queremos crear una tabla en nuestro nuevo esquema haremos lo siguiente:

CREATE TABLE esquema1.tabla1(id_tabla1 integer,nombre text);

Ahora para la creación de usuarios con postgres usaremos lo siguiente:

CREATE USER daniel;

De esta forma ya contamos con un esquema y un usuario dentro de nuestra base de datos, con los cuales podemos practicar el uso de privilegios.
Se pueden asignar a los usuarios varios tipos de autorización para diferentes partes de la base de datos. Por ejemplo:


* La autorizacion de lectura.

* La autorizacion de insercion.

* La autorizacion de actualizacion.

* La autorizacion de borrado.

Cada uno de estos tipos de autorización se denomina privilegio. Se puede conceder a cada usuario todos estos tipos de privilegios, ninguno de ellos o una combinación de los mismos sobre partes concretas de la base de datos, como puede ser una tabla una relación una vista o bien un esquema. La norma SQL incluye los privilegios select, insert, update y delete.


El lenguaje de datos SQL incluye comandos para conceder y retirar privilegios. La instrucción grant se utiliza para conceder autorizaciones. La forma básica de esta instrucción es:


grant -lista de privilegios- on -nombre de relación o de vista- to -lista de usuarios o de roles-

la lista de privilegios permite la concesión de varios privilegios con un solo comando, la siguiente instrucción grant concede al usuario daniel la autorización select sobre la relación tabla1

grant select on esquema1.tabla1 to daniel

la autorización update puede concederse sobre todos los atributos de la relación o solo sobre algunos. Si se incluye la autorización update en una instrucción grant, la lista de atributos sobre los que se concede la autorización update puede aparece entre paréntesis justo después de la palabra clave update, si se omite la lista de atributos, el privilegio update se concede sobre todos los atributos de la relación.

La siguiente instrucción grant concede al usuario daniel la autorización update sobre el atributo importe de la relacion prestamo:

grant update(nombre) on esquema1.tabla1 to daniel

El privilegio insert también puede especificar una lista de atributos; cualquier inserción en la relación debe especificarse solo esos atributos y el sistema asigna el resto de los valores predeterminados ( si hay alguno para ellos ) o los define como nulos.

El nombre de usuario public hace referencia a todos los usuarios actuales y futuros del sistema. Por tanto, los privilegios concedidos a public se conceden de manera implícita a todos los usuarios actuales y futuros.
Ahora para retirar una autorización se emplea la instrucción revoke. es muy similar a grant su sintaxis es la siguiente:


revoke -lista de privilegios- on -nombre de la relación o nombre de la vista- from -lista de usuarios o de roles-

por lo tanto para retirar los privilegios anteriores se haría de la siguiente manera:


revoke select on esquema1.tabla1 to daniel



revoke update(nombre) on esquema1.tabla1 to daniel



Hasta aquí este articulo de introducción, hay mucho que tratar aun, espero seguir con estos artículos sobre los usuarios, esquemas y privilegios.

Saludos !


Fuentes:

Fundamentos de base de datos. quinta edicion Silberschatz , Korth , Sudarshan

Lista Oficial de postgres

http://www.postgresql.org/