Información sobre los usuarios y los roles de PostgreSQL

En esta página se describe cómo funciona Cloud SQL con los usuarios y los roles de PostgreSQL. Los roles de PostgreSQL te permiten controlar el acceso y las funciones de los usuarios que acceden a una instancia de PostgreSQL.

Para consultar la documentación completa sobre los roles de PostgreSQL, consulta Roles de base de datos en la documentación de PostgreSQL. Para obtener información sobre cómo crear y gestionar usuarios de Cloud SQL, consulta Crear y gestionar usuarios.

Diferencia entre usuarios y roles

Los roles de PostgreSQL pueden ser únicos o funcionar como un grupo de roles. Un usuario es un rol que puede iniciar sesión (el rol tiene el atributo LOGIN ). Como todos los roles que crea Cloud SQL tienen el atributo LOGIN, Cloud SQL usa los términos rol y usuario indistintamente. Sin embargo, si creas un rol con el cliente psql, no tiene por qué tener el atributo LOGIN.

Todos los usuarios de PostgreSQL deben tener una contraseña. No puedes iniciar sesión con un usuario que no tenga contraseña.

Restricciones y privilegios de superusuario

Cloud SQL para PostgreSQL es un servicio gestionado, por lo que restringe el acceso a ciertos procedimientos y tablas del sistema que requieren privilegios avanzados. En Cloud SQL, los clientes no pueden crear ni acceder a las cuentas de usuario con atributos de superusuario.

No puedes crear usuarios de la base de datos que tengan privilegios de superusuario. Sin embargo, puedes crear usuarios de la base de datos con el rol cloudsqlsuperuser, que tiene algunos privilegios de superusuario, como los siguientes:

  • Crear extensiones que requieran privilegios de superusuario.
  • Crear activadores de eventos.
  • Crear usuarios de replicación.
  • Crear publicaciones y suscripciones de replicación.
  • Ejecutar las instrucciones CREATE CAST y DROP CAST como usuario de la base de datos con el rol cloudsqlsuperuser. Sin embargo, este usuario debe tener el privilegio USAGE en los tipos de datos de origen y de destino. Por ejemplo, un usuario puede crear un cast que convierta el tipo de datos de origen int en el tipo de datos de destino boolean.

  • Tener acceso completo a la tabla del catálogo pg_largeobject.

Usuarios predeterminados de PostgreSQL

Cuando creas una instancia de Cloud SQL para PostgreSQL, se crea el usuario administrador predeterminado postgres, pero no su contraseña. Debes definir una contraseña para este usuario antes de poder iniciar sesión. Puedes hacerlo en la consola Google Cloud o mediante el siguiente comando gcloud:

gcloud sql users set-password postgres \
--instance=INSTANCE_NAME \
--password=PASSWORD

El usuario postgres forma parte del rol cloudsqlsuperuser y tiene los siguientes atributos (privilegios): CREATEROLE, CREATEDB y LOGIN. No tiene los atributos SUPERUSER ni REPLICATION.

Se crea un usuario cloudsqlimportexport predeterminado con el conjunto mínimo de privilegios necesarios para las operaciones de importación y exportación de CSV. Puedes crear tus propios usuarios para realizar estas operaciones, pero, si no lo haces, se usará el usuario cloudsqlimportexport predeterminado. El usuario cloudsqlimportexport es un usuario del sistema y los clientes no pueden usarlo directamente.

Usuarios de gestión de identidades y accesos de Cloud SQL para la autenticación de gestión de identidades y accesos

Gestión de Identidades y Accesos (IAM) se integra con Cloud SQL en una función llamada autenticación de IAM. Cuando creas instancias con esta función, los usuarios de IAM pueden iniciar sesión en la instancia con sus nombres de usuario y contraseñas de IAM. La ventaja de usar la autenticación de IAM es que puedes usar las credenciales de IAM de un usuario cuando le concedas acceso a una base de datos. Cuando el usuario abandona la organización, su cuenta de gestión de identidades y accesos se suspende y se le retira el acceso automáticamente.

Otros usuarios de PostgreSQL

Puedes crear otros usuarios o roles de PostgreSQL. Todos los usuarios que crees con Cloud SQL se crearán como parte del rol cloudsqlsuperuser y tendrán el mismo conjunto de atributos que el usuario postgres: CREATEROLE, CREATEDB y LOGIN. Puede cambiar los atributos de cualquier usuario con el comando ALTER ROLE.

Si crea un usuario con el psql cliente, puede asociarlo a otro rol o asignarle otros atributos.

Acceso a la vista pg_shadow y a la tabla pg_authid

Puedes usar la vista pg_shadow para trabajar con las propiedades de los roles marcados como rolcanlogin en la tabla de catálogo pg_authid.

La vista pg_shadow contiene contraseñas cifradas y otras propiedades de los roles (usuarios) que tienen permiso para iniciar sesión en un clúster. La tabla de catálogo pg_authid contiene contraseñas cifradas y otras propiedades de todos los roles de la base de datos.

En Cloud SQL, los clientes no pueden acceder a la vista pg_shadow ni a la tabla pg_authid con los privilegios predeterminados. Sin embargo, el acceso a los nombres de los roles y a las contraseñas cifradas con hash es útil en determinadas situaciones, como las siguientes:

  • Configurar proxies o balanceo de carga con usuarios y contraseñas
  • Migrar usuarios sin cambiar las contraseñas
  • Implementar soluciones personalizadas para la gestión de políticas de contraseñas

Definir las marcas de la vista pg_shadow y la tabla pg_authid

Para acceder a la vista pg_shadow, asigna el nombre de un rol de PostgreSQL a la marca cloudsql.pg_shadow_select_role. Para acceder a la tabla pg_authid, asigna a la marca cloudsql.pg_authid_select_role el nombre de un rol de PostgreSQL.

Si existe cloudsql.pg_shadow_select_role, tiene acceso de solo lectura (SELECT) a la vista pg_shadow. Si cloudsql.pg_authid_select_role existe, entonces tiene acceso SELECT a la tabla pg_authid.

Si no existe ninguno de los dos roles, la configuración no tendrá ningún efecto, pero no se producirá ningún error. Sin embargo, se registra un error cuando un usuario intenta acceder a la vista o a la tabla. El error se registra en el registro de la base de datos PostgreSQL: cloudsql.googleapis.com/postgres.log. Para obtener información sobre cómo ver este registro, consulta Ver registros de instancias.

Comprueba que los roles configurados existen y que no hay errores tipográficos en el valor de la marca cloudsql.pg_shadow_select_role o de la marca cloudsql.pg_authid_select_role. También puedes usar la función pg_has_role para verificar que un usuario es miembro de estos roles. Puedes consultar información sobre esta función en la página Funciones y operadores de información del sistema.

Puedes usar la marca cloudsql.pg_shadow_select_role o la marca cloudsql.pg_authid_select_role con miembros del rol de PostgreSQL para gestionar el acceso pg_shadow o pg_authid de varios usuarios.

No es necesario reiniciar la base de datos para que los cambios en ninguna de las dos marcas surtan efecto.

Para obtener más información sobre las marcas admitidas, consulta el artículo sobre cómo configurar marcas de bases de datos.

Elegir un formato de almacenamiento de contraseñas

Cloud SQL para PostgreSQL almacena las contraseñas de los usuarios en formato cifrado con hash. Puedes usar la marca password_encryption para definir el algoritmo de cifrado como md5 o scram-sha-256. El algoritmo md5 ofrece la compatibilidad más amplia, mientras que scram-sha-256 es más seguro, pero puede que no sea compatible con clientes antiguos.

Cuando habilites el acceso pg_shadow para exportar propiedades de roles desde una instancia de Cloud SQL, te recomendamos que uses el algoritmo más seguro que admitan tus clientes.

En la documentación de PostgreSQL, también puedes consultar lo siguiente:

Siguientes pasos