Este artículo muestra cómo crear un usuario en un servidor de bases de datos PostgreSQL de manera simple gracias al utilitario createuser
.
La herramienta de línea de comandos createuser
, parte del paquete postgresql
, permite crear usuarios o roles en un servidor de bases de datos PostgreSQL (local o remoto) sin necesidad de ejecutar consultas SQL.
En su forma más simple, permite crear un usuario directamente ejecutando:
$ createuser fulanito
Este comando intenta crear el rol "fulanito" en el servidor de bases de datos local (localhost) corriendo en el puerto 5432
, conectándose a través de un socket Unix (típicamente localizado en la ruta /tm/.s.PGSQL.5432
).
Sin embargo cuenta con un buen número de opciones:
emi@hal9000:~ % createuser --help createuser creates a new PostgreSQL role. Usage: createuser [OPTION]... [ROLENAME] Options: -c, --connection-limit=N connection limit for role (default: no limit) -d, --createdb role can create new databases -D, --no-createdb role cannot create databases (default) -e, --echo show the commands being sent to the server -E, --encrypted encrypt stored password -g, --role=ROLE new role will be a member of this role -i, --inherit role inherits privileges of roles it is a member of (default) -I, --no-inherit role does not inherit privileges -l, --login role can login (default) -L, --no-login role cannot login -N, --unencrypted do not encrypt stored password -P, --pwprompt assign a password to new role -r, --createrole role can create new roles -R, --no-createrole role cannot create roles (default) -s, --superuser role will be superuser -S, --no-superuser role will not be superuser (default) -V, --version output version information, then exit --interactive prompt for missing role name and attributes rather than using defaults --replication role can initiate replication --no-replication role cannot initiate replication -?, --help show this help, then exit Connection options: -h, --host=HOSTNAME database server host or socket directory -p, --port=PORT database server port -U, --username=USERNAME user name to connect as (not the one to create) -w, --no-password never prompt for password -W, --password force password prompt Report bugs to <pgsql-bugs@postgresql.org>.
Es posible crear un usuario en cualquier servidor remoto (siempre que se disponga de un usuario y permiso de conexión válido) a través de las opciones -h
(host), -p
(puerto), -U
(usuario) y -W
(solicitar contraseña) al igual que el utilitario psql
.
Una opción interesante es -e
, la cual vuelca por pantalla las sentencias SQL que fueron ejecutadas en el servidor.
En el siguiente ejemplo se crea el usuario "webmaster" con rol "readonly" en el servidor "dbserver.linuxito.com" escuchando en el puerto 5432
y autenticándose como "postgres":
emi@hal9000:~ % createuser -h dbserver.linuxito.com -p 5432 -U postgres -W -D -e -E -g readonly -P -R -S webmaster Enter password for new role: Enter it again: CREATE ROLE webmaster ENCRYPTED PASSWORD 'md501ba8b3f203e1a977a059ee61a9cf1e1' NOSUPERUSER NOCREATEDB NOCREATEROLE INHERIT LOGIN IN ROLE readonly;
Por supuesto el usuario "postgres" en este servidor tiene permiso para crear roles, y se tiene acceso al mismo tanto a través de su firewall como en el archivo pg_hba.conf
.
La opción -D
indica que el usuario no tiene permisos para crear bases de datos; -E
indica que su contraseña se almacena cifrada; -P
hace que la herramienta solicite de manera interactiva la contraseña para el nuevo usuario; -R
impide que el usuario pueda crear roles; y por último -S
indica que no es superusuario.
Referencias