Gestión de usuarios en PostgreSQL

Sep 2020

Cuando se crea una aplicación en Java y en cualquier otro lenguaje, no conviene que la aplicación use las credenciales de administrador del sistema gestor. Para ello, cada aplicación usa un usuario propio que sólo le permitirá el acceso a las tablas que le corresponden. Averigua cómo crear usuarios en PostgreSQL.

Qué necesitas para comenzar

Si aun no tienes instalada una base de datos en local, te recomendamos que adquieras una mediante el uso de Docker que simplifica al máximo las tareas necesarias, y mantiene tu PC limpio de ficheros esparcidos por tu sistema operativo.

Conectar con una base de datos PostgreSQL

Si ha seguido los pasos para la instalación de PostgreSQL con docker necesitará los siguientes parámetros para conectar al contenedor de base de datos, asegúrese que el servicio está activo.

  • Dirección del servidor (host): localhost
  • Puerto del servicio (port): 5432
  • Nombre de usuario (username): postgres
  • Clave de usuario (password): secure_pass_here

Con estos datos está en disposición de conectar a la base de datos. Ésta, puede estar en su ordenador local mediante Docker, o ser un servidor en red al que conectar remotamente. Sea cual sea el caso, podrá conectar usando diferentes clientes.

Para conectar con la herramienta nativa de PostgreSQL, en el caso de tenerlas instaladas (paquete de ubuntu postgresql-client), podrá hacerlo usando la siguiente instrucción por el terminal de comandos:

psql -h localhost -p 5432 -U postgres

O mejor aún, usando algún interfaz gráfico como el recomendado y cliente multi base de datos DBeaver

En cualquiera de ellos puede agregar una nueva conexión e indicar los datos citados en el listado anterior.

Crear usuario PostgreSQL

La creación de un usuario, diferente al administrador de sistemas (postgres), es un paso importante, ya que si cometemos un error ejecutando sentencias SQL o si la aplicación hace lo que no esperamos, no se vea afectado más allá del alcance que pueda tener este usuario. Para ello se suele crear siempre un usuario por cada base de datos que almacena el sistema gestor PostgreSQL. Así todas las aplicaciones podrán funcionar de forma aislada sin interferir unas con otras. Esta manera de actuar es la más recomendada.

Para crear un usuario en PostgreSQL necesitamos saber el nombre de usuario, la contraseña y la IP desde la que estará permitido su acceso (o si se debe dejar abierto desde cualquier dirección). Una vez tengamos claros estos parámetros, abriremos una conexión desde la forma que más nos guste y ejecutaremos la siguiente sentencia:

create user pepito with encrypted password 'pepitoPass';

Debe cambiarse el nombre de usuario y clave por los correspondientes en cada caso.

Cambiar contraseña en PostgreSQL

Para cambiar la clave de un usuario en PostgreSQL:

ALTER USER pepito WITH PASSWORD 'securePepitoPass';

Borrar un usuario en PostgreSQL

Borrar un usuario no se puede deshacer, en todo caso, si nos hemos equivocado podremos crear de nuevo el mismo usuario. De hacerlo así ni la base de datos ni los permisos que tuviera se verían afectados.

drop user pepito;

Crear base de datos PostgreSQL

La creación de una base de datos en PostgreSQL es una de las operaciones más sencillas de realizar, sólo requiere el nombre de la base de datos:

create database pepito_app;

Dar permisos a un usuario en PostgreSQL

Una vez creado el usuario y la base de datos dentro del contenedor que ejecuta el sistema gestor SQL el siguiente paso es otorgar permisos al usuario sobre dicha base de datos. Hay toda una gama amplia de permisos que pueden tener los usuarios, para afinar con mucha precisión qué puede hacer cada uno de ellos y que estará prohibido. Esta granularidad ofrece mucho control y seguridad sobre los datos que se almacenan. Por ejemplo, algunos de los permisos que se usan con frecuencia son:

  • ALL, otorga todos los permisos sobre la base de datos
  • ALTER, permite modificar tablas, secuencias, etc…
  • CREATE, permite crear tablas, secuencias, etc…
  • DROP, permite borrar tablas, secuencias, etc…
  • DELETE, permite borrar registros en tablas
  • INSERT, permite insertar registros tablas
  • UPDATE, permite actualizar registros en tablas
  • SELECT, permite consultar tablas, secuencias, etc…

En la mayoría de las ocasiones, si tenemos un usuario por base de datos, será suficiente con dar el permiso ALL, o como mínimo los necesarios para manejar los registros de la base de datos. Sea como fuere, para dar permisos a un usuario sobre una base de datos deberíamos escribir la siguiente sentencia SQL:

grant all privileges on database pepito_app to pepito;

Esta sentencia asigna todos los permisos sobre todos los objetos de la base de datos pepito_app. A partir de ese momento el usuario podrá crear, modificar o borrar objetos como tablas, secuencias, etc.. Y también operar con las tablas y los registros que contienen pudiendo insertar, actualizar, consultar y borrar las filas que contienen.

Revocar permisos a un usuario en PostgreSQL

La eliminación de permisos sobre un usuario se hace de forma análoga a la dotación de acceso, pero en este caso se usa la palabra clave revoke de la siguiente manera:

revoke all privileges on database pepito_app from pepito;

Borrar base de datos en PostgreSQL

Si la creación es una de las operaciones más sencillas de realizar, el borrado será similar:

drop database pepito_app;

Todas las tablas, secuencias, índices y datos de la base de datos se eliminarán de forma permanente e irrevocable del sistema gestor. ¡Asegúrate de que introduces el nombre correcto de la base de datos!

Gestión de usuarios en PostgreSQL

¿Con ganas de seguir leyendo?

Nuestra guía de Java

Cerca de 450 páginas en un libro de tapa blanda que podrás utilizar para aprender a programar en Java desde cero sin conocimientos previos. Explicamos como usar las herramientas más usadas en el mundo empresarial, todas ellas son totalmente gratis y Open Source.

Aprende conceptos como TDD para desarrollar software con garantías. Conecta tus apps con JPA en bases de datos SQL. Integra tus proyectos con Maven y mantenlos bajo control con Git. Mantente al día con la programación funcional de Java 8+.

Nuestra guía de Java
Libro Javañol