Introducción
La administración de privilegios de usuario y acceso a privilegios es un concepto de seguridad crucial para cualquier tipo de base de datos. PostgreSQL maneja el control de acceso a través de roles y privilegios. Por ejemplo, agregar el permiso LOGIN a un rol produce un usuario. Postgres ofrece varias formas de crear y administrar cuentas de usuario.
Este tutorial muestra cómo crear y configurar diferentes tipos de usuarios para una base de datos de PostgreSQL.
Requisitos previos
- Postgres instalado (siga nuestra guía para Ubuntu o Windows).
- Acceso a la terminal con privilegios sudo.
- Acceso al usuario de postgres.
Crear un nuevo usuario en PostgreSQL
Hay dos formas de crear un nuevo usuario en PostgreSQL, y ambos casos requieren acceso a postgres usuario.
Método 1:uso de la utilidad de cliente createuser
La primera forma de crear un nuevo usuario es con createuser
utilidad del cliente. Este método evita conectarse a la interfaz de línea de comandos de PSQL.
Para crear el usuario, ejecute el siguiente comando en la terminal:
sudo -u postgres createuser <name>
El terminal no emite ningún mensaje. Para hacer eco del mensaje del servidor, agregue -e
etiqueta:
sudo -u postgres createuser -e <name>
Por ejemplo:
sudo -u postgres createuser -e john
Alternativamente, divida el comando en dos partes:
1. Cambia a postgres usuario:
sudo su - postgres
2. Ejecute createuser
comando:
createuser <name>
Postgres crea automáticamente el usuario (rol con permisos de inicio de sesión) en ambos casos.
Método 2:Usar PSQL
La segunda forma de crear un nuevo usuario en PostgreSQL es a través del shell interactivo de PSQL.
1. Cambia a postgres usuario e inicie la terminal interactiva con:
sudo -u postgres psql
La sesión de terminal cambia a postgres=#
, lo que indica una conexión exitosa al shell de Postgres.
2. Use la siguiente instrucción para crear un usuario:
CREATE USER <name>;
Por ejemplo:
CREATE USER mary;
Ejecutar el comando imprime CREATE ROLE
a la consola La razón es que el CREATE USER
query es un alias para el siguiente comando:
CREATE ROLE <name> WITH LOGIN;
Ambas consultas arrojan el mismo resultado.
Crear un superusuario en PostgreSQL
Para crear un superusuario en PostgreSQL, debe tener el rol de superusuario.
Advertencia: Un superusuario de la base de datos pasa por alto todas las comprobaciones, lo que es peligroso desde el punto de vista de la seguridad. Use esta acción con cuidado y evite trabajar con una cuenta de superusuario a menos que sea absolutamente necesario.
Hay dos formas de crear un superusuario en PostgreSQL:
1. Cree un rol de superusuario a través de la utilidad de cliente agregando --superuser
etiqueta:
sudo -u postgres createuser --superuser <name>
O use la etiqueta abreviada -s
en lugar de --superuser
:
sudo -u postgres createuser -s <name>
El terminal emite un mensaje en caso de error o si el usuario ya existe. Si tiene éxito, no aparece ningún mensaje.
2. Alternativamente, use el CREATE USER
Declaración PSQL:
CREATE USER <name> SUPERUSER;
El CREATE USER
declaración es un alias para la siguiente declaración:
CREATE ROLE <name> LOGIN SUPERUSER;
El CREATE ROLE
declaración requiere agregar el LOGIN
permiso para emular un usuario.
Cree una contraseña para el usuario
Cada usuario de la base de datos debe tener una contraseña segura para evitar ataques de fuerza bruta. PostgreSQL ofrece dos métodos para crear un usuario con una contraseña.
Advertencia: De los dos métodos, el primero es el preferido y más seguro.
1. Usa el createuser
utilidad de cliente y agregue el --pwprompt
opción para invocar una solicitud de creación de contraseña automáticamente:
sudo -u postgres createuser <name> --pwprompt
La versión abreviada es -P
etiqueta:
sudo -u postgres createuser <name> -P
El terminal le pide que ingrese la contraseña dos veces. La contraseña en sí o la longitud se cifra y oculta cuando se comunica con el servidor.
2. Use PSQL para crear un usuario con una contraseña:
CREATE USER <name> WITH PASSWORD '<password>';
Si el usuario ya existe, agregue la contraseña usando ALTER USER
:
ALTER USER <name> WITH PASSWORD '<password>';
La administración de contraseñas a través de PSQL viene con tres vulnerabilidades de seguridad:
- La contraseña es visible en la pantalla.
- Ver el historial de comandos expone la contraseña.
- La información se transmite como texto claro sin ningún tipo de cifrado.
Utilice este método con precaución.
Otorgar Privilegios al Usuario
De forma predeterminada, los nuevos usuarios no tienen ningún privilegio excepto el de inicio de sesión. Para agregar privilegios al crear un usuario, ejecute createuser
utilidad de cliente en el siguiente formato:
createuser <option> <name>
Para hacer lo mismo en PSQL, ejecute:
CREATE USER <name> WITH <option>;
A continuación se muestra una tabla con opciones comúnmente utilizadas para ambos métodos.
Sintaxis de opciones | PSQL | Explicación |
---|---|---|
-s --superuser | SUPERUSER | Agregue el privilegio de superusuario. |
-S --no-superuser | NOSUPERUSER | Sin privilegios de superusuario (predeterminado). |
-d --createdb | CREATEDB | Permite al usuario crear bases de datos. |
-D --no-createdb | NOCREATEDB | No se permite crear bases de datos (predeterminado). |
-r --createrole | CREATEROLE | Permite al usuario crear nuevos roles. |
-R --no-createrole | NOCREATEROLE | No se permite crear roles (predeterminado). |
-i --inherit | INHERIT | Heredar automáticamente los privilegios de los roles (predeterminado). |
-I --no-inherit | NOINHERIT | No heredar privilegios de roles. |
-l --login | LOGIN | Permite al usuario iniciar sesión en una sesión con el nombre del rol (predeterminado). |
-L --no-login | NOLOGIN | No se permite iniciar sesión en una sesión con el nombre del rol. |
--replication | REPLICATION | Permite iniciar la replicación de transmisión y activar/desactivar el modo de copia de seguridad. |
--no-replication | NOREPLICATION | No se permite iniciar la replicación de transmisión o el modo de copia de seguridad (predeterminado). |
-P --pwprompt | PASSWORD '<password>' | Inicia la solicitud de creación de contraseña o agrega la contraseña proporcionada al usuario. Evite usar esta opción para crear un usuario sin contraseña. |
/ | PASSWORD NULL | Establece específicamente la contraseña en nulo. Cada autenticación de contraseña falla para este usuario. |
-c <number> --connection-limit=<number> | CONNECTION LIMIT <number> | Establece el número máximo de conexiones por usuario. El valor predeterminado es ilimitado. |