Seguridad en PostgreSQL?

Leonardo Alberro
24 de Noviembre del 2003
Agradeceria a quien pueda darme informacion al respecto de la seguridad en POSTGRESQL:
¿Como implanta PostgreSQL la seguridad y autorizacion para sus bases de datos?
¿De que medios o recursos dispone PostgreSQL para controlar la seguridad?
Desde ya muchas gracias. Atte, Leonardo Alberro.

Alberto Pi?
24 de Noviembre del 2003
Se puede tener un control de acceso a la base de datos y decirle qué máquinas pueden acceder y cuales no en virtud de direcciones IP, todo esto es en el archivo pg_hba.conf ubicado normalmente en el mismo directorio donde inicializaste la base de datos.

Hay dos tipos de accesos, el acceso local y el acceso remoto.
El local es el que se produce en la propia máquina y el otro desde una máquina remota que puede estar o no en la misma red por ejemplo conexiones tcp.

En el archivo pg_hba.conf encontraras algo como esto
acceso                IP                Máscara
Autorización
=========================================
local         all                                                                trust       //permite el acceso local a todos
host         all         127.0.0.1     255.255.255.255         trust      //permite todo acceso remoto solo desde la maquina


El acceso que se hace a la base de datos mediante CGIs entonces se considera que es local. Otra cosa sería una conexión mediante ODBC desde otra máquina, y para ello sería nocesario poner una línea adicional como esta:


host         all         direc_ip_cliente     255.255.255.255         trust      //permite acceso remoto solo desde esta maquina

# Permite cualquier conexion via TCP/IP con esta máquina.
host    all     127.0.0.1       255.255.255.255         trust (permite el acceso)

# Permite cualquier conexion via TCP/IP de los equipos de esta subred.
host    all     195.70.0.0       255.255.0.0        trust

# No queremos que acceda una máquina concreta
host    all     192.168.0.10    255.255.255.0           reject (no deja
acceder)

# No queremos que acceda las máquinas de una determinada subred
host    all     192.168.0.0    255.255.0.0           reject

Cabe mencionar que puedes manejar los niveles de seguridad no solo en trust, sino también con passwords encriptados via md5 y otros mecanismos que puedes verificar en la documentación de postgresql. 

Otro tipo de seguridad es la que se hace a traves de permisos a los usuarios de la base de datos. Cuando nos referimos a este tipo de seguridad nos referimos a que podemos crear una serie de grupos y de usuarios de postgresql y a los cuales les podemos dar una serie de permisos sobre tablas, vistas etc.

- Creación de usuarios
para crear un usuario se debe poner la sentencia desde la shell o también lo puedes hacer ejecutando una sentencia sql:

createuser nombre_usuario


- Creación de grupos


la creación de grupos se lleva a cabo mediante una inserción en la tabla pg_group mediante SQL. Supongamos que queremos crear el grupo 'usuarios' en pgsql, pues como usuario 'postgres' le decimos:


insert into pg_group (groname,grosysid,grolist) values (nombre_grupo,numero_identificacion_grupo,Lista_de_componentes(uids));

Una vez que tenemos definidos la los usuarios y los grupos lo único que debemos hacer es dar permisos con las sentencias SQL GRANT y REVOkE.

Espero poder ayudarte con esto