Acerca de los usuarios y los roles de PostgreSQL

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

Para obtener la documentación completa sobre los roles de PostgreSQL, consulta Roles de base de datos en la documentación de PostgreSQL. Para obtener más información sobre la creación y la administración de usuarios de Cloud SQL, consulta la sección Crea y administra usuarios.

Diferencia entre los usuarios y los roles

Las funciones de PostgreSQL pueden ser una función única o pueden funcionar como un grupo de funciones. Un usuario es un rol con la capacidad de acceder (el rol tiene el atributo LOGIN). Debido a que todos los roles que crea Cloud SQL tienen el atributo LOGIN, Cloud SQL usa los términos rol y usuario de forma indistinta. Sin embargo, si creas un rol con el cliente psql, el rol no siempre tiene el atributo LOGIN.

Todos los usuarios de PostgreSQL deben tener una contraseña. No puedes acceder con un usuario que no tiene una contraseña.

Restricciones y privilegios de superusuario

Debido a que Cloud SQL para PostgreSQL es un servicio administrado, restringe el acceso a ciertas tablas y procedimientos del sistema que requieren privilegios avanzados. En Cloud SQL, los clientes no pueden crear usuarios con atributos de superusuario ni tener acceso a ellos.

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, incluidos los siguientes:

  • Crear extensiones que requieran privilegios de superusuario.
  • Crear activadores de eventos.
  • Crear usuarios de replicación.
  • Crear suscripciones y publicaciones de replicación.
  • Realizar las sentencias 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 una transmisión que convierta el tipo de datos int de origen en el tipo de datos boolean de destino.

  • Acceso completo a la tabla del catálogo pg_largeobject

Usuarios de PostgreSQL predeterminados

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

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

El usuario postgres es parte de la función cloudsqlsuperuser y tiene los siguientes atributos (privilegios): CREATEROLE, CREATEDB y LOGIN. No tiene los atributos SUPERUSER o 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. Sin embargo, si no lo haces, se usa el usuario cloudsqlimportexport predeterminado. El usuario cloudsqlimportexport es un usuario del sistema, y los clientes no pueden usarlo de forma directa.

Usuarios de IAM de Cloud SQL para la autenticación de IAM

Identity and Access Management (IAM) está integrada en Cloud SQL en una función llamada autenticación de IAM. Cuando creas instancias con esta función, los usuarios de IAM pueden acceder a 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 existentes de un usuario cuando le otorgas acceso a una base de datos. Cuando el usuario abandona la organización, su cuenta de IAM se suspende y se le quita automáticamente el acceso.

Otros usuarios de PostgreSQL

Puedes crear otros usuarios de PostgreSQL o funciones. Todos los usuarios que crees con Cloud SQL se crean como parte de la función cloudsqlsuperuser y tienen el mismo conjunto de atributos que el usuario postgres: CREATEROLE, CREATEDB y LOGIN. Puedes cambiar los atributos de cualquier usuario mediante el comando ALTER ROLE.

Si creas un usuario nuevo con el cliente psql, puedes asociarlo con una función diferente o asignarle atributos diferentes.

Acceso a la vista pg_shadow y la tabla pg_authid

Puedes usar la vista pg_shadow para trabajar con las propiedades de roles que están marcadas como rolcanlogin en la tabla del catálogo pg_authid.

La vista pg_shadow contiene contraseñas con hash y otras propiedades de los roles (usuarios) que pueden acceder a un clúster. La tabla del catálogo pg_authid contiene contraseñas con hash y otras propiedades para todos los roles de bases de datos.

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

  • Configurar proxies o balanceo de cargas con usuarios y contraseñas existentes
  • Migrar usuarios sin cambios en las contraseñas
  • Implementar soluciones personalizadas para la administración de políticas de contraseñas

Configura las marcas para la vista pg_shadow y la tabla pg_authid

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

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

Si alguna de las funciones no existe, la configuración no tiene ningún efecto, pero no se produce ningún error. Sin embargo, se registra un error cuando un usuario intenta acceder a la vista o a la tabla. El error se ingresa al registro de la base de datos de PostgreSQL: cloudsql.googleapis.com/postgres.log. Para obtener información sobre cómo ver este registro, consulta Visualiza los registros de la instancia.

Asegúrate de que existan los roles configurados y de que no haya un error tipográfico en el valor de la marca cloudsql.pg_shadow_select_role o la marca cloudsql.pg_authid_select_role. También puedes usar la función pg_has_role para verificar que un usuario sea miembro de esos roles. La información sobre esta función está disponible en la página Funciones y operadores de información del sistema.

Puedes usar las marcas cloudsql.pg_shadow_select_role o cloudsql.pg_authid_select_role con membresía del rol de PostgreSQL a fin de administrar el acceso pg_shadow o pg_authid para varios usuarios.

Los cambios en cualquiera de las marcas no requieren que se reinicie la base de datos.

Para obtener más información sobre las marcas compatibles, consulta Configura marcas de base de datos.

Elige un formato de almacenamiento de contraseñas

Cloud SQL para PostgreSQL almacena las contraseñas de los usuarios en un formato de hash. Puedes usar la marca password_encryption para establecer el algoritmo de encriptación como md5 o scram-sha-256. El algoritmo md5 proporciona la compatibilidad más amplia, mientras que scram-sha-256 es más seguro, pero puede ser incompatible con clientes más antiguos.

Cuando habilites el acceso pg_shadow para exportar propiedades de rol desde una instancia de Cloud SQL, considera usar el algoritmo más seguro que admitan tus clientes.

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

¿Qué sigue?