Volver al blog

Cómo usar roles y gestionar permisos en PostgreSQL

Cómo usar roles y gestionar permisos en PostgreSQL

PostgreSQL es un DBMS de código abierto que a su vez utiliza SQL. Es una herramienta muy potente que se utiliza para gestionar aplicaciones y alojar datos web en VPS. En este tutorial, aprenderá a gestionar permisos en PostgreSQL. Le ayudará a proporcionar a los roles de su aplicación los permisos necesarios. Realizaremos este tutorial utilizando PostgreSQL en un Ubuntu 18.04 servidor en la nube en CloudSigma.

Instalación de PostgreSQL

Para descargar e instalar PostgreSQL, ejecute los siguientes comandos:

El instalador creará un usuario por defecto – “Postgres” para operar. Utilizaremos este usuario durante la mayor parte de este tutorial. Puede iniciar sesión con este usuario con este comando:

Ahora que PostgreSQL está instalado, aprenderá cómo maneja los permisos. También puede seguir nuestro tutorial sobre cómo configurar PostgreSQL en Ubuntu para obtener una guía detallada paso a paso del proceso de instalación.

Conceptos de permisos de PostgreSQL

Postgres gestiona los permisos a través del concepto de “roles”. Con los roles, no hay distinción entre usuarios y grupos. Los roles son más flexibles que el sistema Unix tradicional de usuarios y grupos. Por ejemplo, un rol puede actuar como miembro de otro rol, heredando sus permisos.

Visualización de roles en PostgreSQL

Para ver los roles en PostgreSQL, primero debe iniciar sesión en la consola utilizando el siguiente comando:

A continuación, ejecute lo siguiente para ver los roles:

show roles manage permissions in PostgreSQL

Por ahora, solo hay un rol predeterminado con todos los privilegios.

Cómo crear roles en PostgreSQL

Puede crear roles para Postgres ya sea desde la línea de comandos o desde la consola de Postgres. Puede probar los siguientes dos enfoques, tras lo cual verá cómo gestionar permisos y accesos en PostgreSQL.

Cómo crear roles desde dentro de PostgreSQL

La forma más sencilla de crear roles es desde la consola de Postgres. Puede hacerlo con el siguiente comando:

Para comprobar si se ha creado, ejecute el comando:

create role from prompt

Especifica que el nuevo rol no tiene permisos de inicio de sesión. Aprenderá cómo cambiar eso más adelante en el tutorial.

Cómo crear roles desde la línea de comandos

La alternativa al método anterior es crear el usuario desde la línea de comandos. Para salir de la consola de PostgreSQL, escriba lo siguiente:

Puede crear un rol llamado “test” con el siguiente comando:

Una vez que haya ejecutado el comando anterior, inicie sesión en psql y enumere los roles utilizando los siguientes comandos:

creating user from commandline

Puede observar que el usuario creado de esta manera no tiene los mismos atributos.

Cómo eliminar roles en PostgreSQL

Puede eliminar roles fácilmente en PostgreSQL utilizando la siguiente sintaxis:

Puede eliminar el rol de demostración que creamos anteriormente utilizando el comando:

drop role

Si intentamos eliminar un rol que no existe, simplemente arrojará un error. Para ver eso, puede intentar eliminar el mismo rol de nuevo:

drop role fail

Si desea que el comando no arroje un error cuando el rol no exista, puede agregar ‘IF EXISTS’ en el comando:

Puede volver a intentar eliminar el rol con este comando:

drop role if exists

Cómo definir privilegios al crear un rol

Hasta ahora, ha creado y eliminado roles. En esta sección, creará roles con permisos modificados. Puede hacerlo especificando los permisos para el rol con el comando de creación:

Para ver las opciones de esto, puede abrir la ayuda usando este comando:

help create user

Si desea crear un rol con permisos de inicio de sesión, puede formular el comando de esta manera:

create role with login manage permissions in PostgreSQL

Como vimos anteriormente, si desea crear roles con permiso de inicio de sesión, también puede utilizar el siguiente comando:

La única diferencia entre los dos comandos es que ‘CREATE USER’ otorga permiso de inicio de sesión al rol de forma predeterminada.

Cómo cambiar los privilegios de los roles en PostgreSQL

Hasta ahora, ha probado cómo otorgar permisos al crear el usuario. En esta sección, modificará los permisos de los usuarios ya creados. La sintaxis para el comando alter es:

Por ejemplo, si lo desea, puede cambiar los permisos de inicio de sesión de demo_role a ‘iniciar sesión’ con este comando:

alter nologin

Para permitir que el usuario vuelva a iniciar sesión, puede modificar los permisos con el siguiente comando:

Cómo iniciar sesión como un usuario diferente en PostgreSQL

PostgreSQL le permite iniciar sesión solo localmente de forma predeterminada si su nombre de usuario coincide con el nombre de usuario del sistema. Para evitar esto, puede cambiar el tipo de inicio de sesión o configurar PostgreSQL para usar la interfaz de red de bucle de retorno (loopback). Esta interfaz cambiaría el tipo de conexión a remota, incluso si la conexión es local.

En esta sección, probará la segunda opción. Para empezar, puede establecer la contraseña del usuario, de modo que la autenticación sea posible.

Establezca la contraseña de ‘demo_user’ con el siguiente comando:

Cuando se le solicite, introduzca y confirme la contraseña. Una vez hecho esto, puede salir de la interfaz de PostgreSQL y volver a su usuario normal de la máquina:

PostgreSQL requiere que inicie sesión con un nombre de usuario que coincida con el nombre de usuario de su sistema operativo y también que se conecte a la base de datos con el mismo nombre de usuario. Dado que no está haciendo eso en este caso, tendrá que especificar explícitamente las opciones que desea utilizar. Puede utilizar la siguiente sintaxis:

usuario: El nombre de usuario con el que desea conectarse
BD: Una base de datos existente a la que tenga acceso
-h 127.0.0.1: Especifica a PostgreSQL que se conectará a través de una interfaz de red a la máquina local. Esta opción nos permite la autenticación aunque el nombre de usuario no coincida con el nombre de usuario del sistema.
-W: Indica a PostgreSQL que introducirá una contraseña

Para iniciar sesión con nuestro “test_user”, podemos ejecutar el siguiente comando:

postgresql login through network interface manage permissions in PostgreSQL

Una vez que introduzca la contraseña, iniciará sesión en la consola. En nuestro ejemplo, utilizamos la base de datos ‘postgres’, la base de datos predeterminada que se configura automáticamente durante la instalación.

En esta sesión, según el usuario que haya seleccionado para iniciar sesión, se enfrentará al problema de que no tiene los permisos adecuados para realizar diversas acciones. La razón de este problema es que aún no ha otorgado al usuario los permisos suficientes para administrar las cosas.

En la siguiente sección, otorgará los permisos necesarios a los usuarios. Primero, deberá volver a cambiar el usuario a uno administrativo:

Gestionar permisos en PostgreSQL: Cómo otorgar permisos en PostgreSQL

En PostgreSQL, si un rol particular crea una base de datos o una tabla, solo ese rol tiene permisos para modificarla. La excepción a esto serían los roles que tienen permisos de superusuario. En esta sección, otorgará permisos a otros roles. Puede otorgar permisos a otros roles utilizando la sentencia ‘GRANT’. La sintaxis es:

Puedes crear una tabla simple para ejecutar el comando:

Para ver la tabla creada, ejecuta el comando:

create table manage permissions in PostgreSQL

Ahora que tienes una tabla demo, puedes otorgar privilegios sobre la tabla ‘demo’ a ‘demo_role’. Puedes darle al rol el privilegio ‘UPDATE’ con este comando:

Puedes otorgar todos los permisos a un rol especificando el permiso como ‘ALL’:

Si deseas otorgar un permiso específico a todos los roles del sistema, puedes usar la palabra clave ‘public’ en lugar del rol, como en el siguiente comando:

Puedes ver todos los permisos otorgados usando el siguiente comando:

granted permissions

Gestionar permisos en PostgreSQL: Cómo eliminar permisos en PostgreSQL

Puedes eliminar fácilmente los permisos de un rol usando el comando ‘REVOKE’. Es muy similar al comando grant:

Al igual que con GRANT, podemos usar las palabras clave – ‘ALL’ y ‘PUBLIC’ para otorgar todos los permisos u otorgar permisos a todos los roles:

Cómo usar roles de grupo en PostgreSQL

Para permitir un control de permisos generalizado, los roles son lo suficientemente flexibles como para permitir la agrupación con otros roles. Por ejemplo, puedes crear un rol – ‘temporary_role’ y luego agregar ‘demo_role’ y ‘test_user’ a ese rol:

Ahora puedes gestionar los permisos de estos dos roles simplemente gestionando los permisos del rol ‘temporary_role’. Esto permite una gestión de permisos más sencilla. Puedes ver la información de pertenencia al rol con este comando:

role - group manage permissions in PostgreSQL

Cualquier miembro del grupo puede actuar como el grupo usando el comando ‘set role’. Como el usuario ‘postgres’ es un superusuario, puedes usar ‘set role’ incluso si no eres miembro del grupo:

Cualquier tabla que crees ahora será propiedad de temporary_role:

Para verificar la propiedad de la tabla, ejecuta el siguiente comando:

create table with temporary_role

Puedes ver que el rol ‘temporary_role’ es el propietario de la nueva tabla y de la secuencia asociada con el tipo de datos serial. Para volver a los permisos del rol original, ejecuta el siguiente comando:

Si deseas que el rol tenga todos los privilegios del rol al que pertenece, puedes especificar la propiedad ‘inherit’ con el comando ‘alter role’:

Con el comando anterior, ‘test_user’ ha obtenido todos los privilegios de los roles a los que pertenece. Para eliminar un rol, puedes usar el comando ‘drop role’:

drop role manage permissions in PostgreSQL

El comando anterior arroja un error porque tenemos algunos objetos, como la tabla ‘hello’, que dependen de él. Para eliminarlo, puedes transferir la propiedad de la tabla a un rol diferente:

Puedes verificar que temporary_role ya no es propietario de ninguna tabla con el siguiente comando:

check ownerships

Puedes eliminar el ‘temporary_role’ ahora, ya que no tiene ninguna dependencia:

Aunque el comando anterior eliminará el rol temporary_users, los antiguos miembros del grupo de roles no se eliminan.

Conclusión

Has completado el tutorial y ahora sabes cómo administrar los permisos en PostgreSQL. Puedes administrar los permisos fácilmente. Saber cómo administrar los permisos garantiza que tus aplicaciones tengan acceso a las bases de datos requeridas y, al mismo tiempo, no tengan acceso a ninguna otra base de datos utilizada por una aplicación diferente.

¡Feliz computación!

author

Akshay Nagpal

Autor · CloudSigma

Preslav Dobrev es diseñador creativo en CloudSigma, centrado en una identidad empresarial coherente mediante el uso de canales de marketing tradicionales e innovadores. Es experto en fusionar la visión artística con el marketing estratégico para crear narrativas de marca impactantes.

Comentarios

Aún no hay comentarios. Sea el primero.