Acerca de los usuarios 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 las funciones de PostgreSQL, consulta la documentación de PostgreSQL. Para obtener más información sobre cómo crear y administrar usuarios de Cloud SQL, consulta Cómo crear y administrar usuarios.

Funciones y usuarios de PostgreSQL

Las funciones de PostgreSQL pueden ser una función única o pueden funcionar como un grupo de funciones. Un usuario es una función con la capacidad de acceder (la función 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” indistintamente. Sin embargo, si creas una función con el cliente psql, 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 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
  • 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 base de datos de IAM

IAM está integrado en Cloud SQL en una característica llamada autenticación de base de datos de IAM. Cuando creas instancias con esta función, los usuarios de IAM pueden acceder a la instancia con su nombre de usuario y contraseña de IAM. La ventaja de usar la autenticación de base de datos 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. Para obtener más información sobre la autenticación de base de datos de IAM, consulta Descripción general de la autenticación de base de datos de IAM.

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

Puedes usar la vista pg_shadow para trabajar con las propiedades de roles que están marcadas como rolcanlogin en el 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. En Cloud SQL, los clientes no pueden acceder a la vista pg_shadow 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 la marca para la vista pg_shadow

Para acceder a la vista pg_shadow, configura la marca cloudsql.pg_shadow_select_role como el nombre de un rol de PostgreSQL. Si el rol existe, tiene acceso de solo lectura (SELECT) a la vista pg_shadow.

Si el rol 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. 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 el rol configurado exista y de que no haya un error tipográfico en el valor de la marca cloudsql.pg_shadow_select_role. También puedes usar el rol pg_has_role para verificar que un usuario sea miembro de un rol. La información sobre esta función está disponible en la página Funciones y operadores de información del sistema.

Puedes usar la marca cloudsql.pg_shadow_select_role con la membresía del rol de PostgreSQL a fin de administrar el acceso pg_shadow para varios usuarios.

Los cambios en la marca no requieren que se reinicie la base de datos.

Consulta Configura marcas de base de datos para obtener información sobre las marcas compatibles.

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?