next up previous contents index
Next: Bibliografía Up: Detalles de instalación, puesta Previous: Inicio del servidor   Índice General   Índice de Materias

Autentificación de usuarios

En el archivo pg_hba.conf --localizado usualmente en el directorio /var/lib/pgsql en la instalación de RedHat-- se pueden dar los métodos de autentificación de usuarios a nivel de máquinas, subredes y redes. En el caso más común, sólo deseamos que los usuarios locales, es decir de la misma computadora y los de la red local sean usuarios autentificados del servidor. En este caso basta con tener las siguientes líneas en dicho archivo:

local        all                                         trust
host         all         127.0.0.1     255.255.255.255   trust
host         all         192.168.0.0   255.255.255.0     ident     sameuser

En la primera línea indicamos que todos los usuarios locales tienen acceso a las bases de datos por medio de UNIX domain sockets, es decir únicamente de forma local. Con la segunda línea especificamos que los mismos usuarios locales tienen acceso a las bases de datos por medio de Internet domain sockets, es decir, que pueden iniciar una conexión por medio de los servicios de red, que es precisamente el método más empleado. Finalmente, con la tercera línea indicamos que todas las máquinas en la red 192.168.0.0 tienen acceso a todas las bases de datos, siempre y cuando, el protocolo ident sea capáz de autentificarlos a un usuario local.

Por supuesto, estos usuarios remotos deben de tener acceso a la base de datos en sí.

Supongamos que queremos que el usuario fulgano de una máquina en otra red tenga acceso sólo a una base de datos de nuestro sistema, con las restricciones que fijemos para él en dicha base. Primero debemos de darle acceso a conectarse con el servidor por medio de la línea:

host         labase      200.43.51.17  255.255.255.0     crypt

con lo cual cualquier usuario de la máquina con la dirección en particular que dimos puede conectarse, siempre y cuando tenga un password que sea validado en el sistema local para el usuario que inicia la conexión. El password viaja encriptado y es comparado contra el password encriptado que se encuentra localmente. Otros métodos seguros son krb4 y krb5 que utilizan las versiones 4 y 5 de Kerberos. Un método altamente inseguro, y por ende no recomendado, es password donde la contraseña viaja sin encriptar por la red.

Un error muy común es crear una base de datos para ser alimentada por un usuario o un proceso y consultada por medio de scripts o CGIs, sin tener en cuenta los permisos de acceso. Si iniciamos una sesión en la base de datos a emplear con el cliente psql, podemos ver los permisos de cada tabla con el comando \z:

discos=> \z
Database    = discos
 +-------------+--------------------------+
 | Relation    | Grant/Revoke Permissions |
 +-------------+--------------------------+
 | discos      |                          |
 | ids         |                          |
 | lesdiscs    |                          |
 | lola        |                          |
 | ndis        |                          |
 | pepa        |                          |
 | pp          |                          |
 | rolas       |                          |
 | seqdis      |                          |
 +-------------+--------------------------+
discos=>

y en este caso observamos que no hay ningún tipo de permisos para cada una de las tablas. Esto quiere decir que sólo el usuario dueño de la base puede hacer consultas y actualizar la información. Véase la sección 8.10 para ver cómo habrán de darse los permisos adecuados. Obviamente, en este caso lo que deseamos es que el usuario encargado de mantener la información pueda insertar, leer, actualizar y borrar registros, mientras que los clientes que se conectan por medio del CGI sólo pueden hacer consultas. En tal caso, podemos dar todos los permisos al usuario encargado y al usuario nobody, que por lo general es el usuario con el que el servidor de httpd ejecuta los CGIs sólo tendrá los permisos de lectura:

discos=> grant all on discos,ids,rolas to encargado;
CHANGE
discos=> grant select on discos,ids,rolas to nobody;
CHANGE
discos=> \z
Database    = discos
 +-------------+-----------------------------------+
 | Relation    | Grant/Revoke Permissions          |
 +-------------+-----------------------------------+
 | discos      | {"=","encargado=arwR","nobody=r"} |
 | ids         | {"=","encargado=arwR","nobody=r"} |
 | lesdiscs    |                                   |
 | lola        |                                   |
 | ndis        |                                   |
 | pepa        |                                   |
 | pp          |                                   |
 | rolas       | {"=","encargado=arwR","nobody=r"} |
 | seqdis      |                                   |
 +-------------+-----------------------------------+
discos=>

Mientras que a las tablas lesdiscs, lola, ndis, pepa, seqdis y pp sólo el dueño de la base de datos tiene acceso.


next up previous contents index
Next: Bibliografía Up: Detalles de instalación, puesta Previous: Inicio del servidor   Índice General   Índice de Materias
Ismael Olea 2001-04-21