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
yDROP CAST
como usuario de la base de datos con el rolcloudsqlsuperuser
. Sin embargo, este usuario debe tener el privilegioUSAGE
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 origenint
en el tipo de datos de destinoboolean
.- 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
- Crear y administrar usuarios
- Crear y administrar bases de datos
- Consulta la documentación de PostgreSQL sobre los roles.
- Más información sobre las opciones para conectarse a la instancia