Informazioni sugli utenti e sui ruoli PostgreSQL

Questa pagina descrive come Cloud SQL funziona con gli utenti e i ruoli di PostgreSQL. I ruoli di PostgreSQL consentono di controllare l'accesso e le funzionalità degli utenti che accedono a un'istanza PostgreSQL.

Per la documentazione completa sui ruoli di PostgreSQL, consulta Ruoli del database nella documentazione di PostgreSQL. Per informazioni sulla creazione e la gestione degli utenti di Cloud SQL, consulta Creare e gestire gli utenti.

Differenza tra utenti e ruoli

I ruoli di PostgreSQL possono essere un singolo ruolo o possono fungere da gruppo di ruoli. Un utente è un ruolo con la possibilità di accedere (il ruolo ha l'attributo LOGIN). Poiché tutti i ruoli creati da Cloud SQL hanno l'attributo LOGIN, Cloud SQL utilizza i termini ruolo e utente in modo intercambiabile. Tuttavia, se crei un ruolo con il client psql, il ruolo non ha necessariamente l'attributo LOGIN.

Tutti gli utenti di PostgreSQL devono avere una password. Non puoi accedere con un utente senza password.

Restrizioni e privilegi di superuser

Cloud SQL per PostgreSQL è un servizio gestito, pertanto limita l'accesso ad alcune procedure e tabelle di sistema che richiedono privilegi avanzati. In Cloud SQL, i clienti non possono creare o avere accesso a utenti con attributi superuser.

Non puoi creare utenti del database con privilegi di superuser. Tuttavia, puoi creare utenti del database con il ruolo cloudsqlsuperuser, che ha alcuni privilegi di superuser, tra cui:

  • Creazione di estensioni che richiedono privilegi di superuser.
  • Creazione di trigger di eventi.
  • Creazione di utenti di replica.
  • Creazione di pubblicazioni e sottoscrizioni di replica.
  • Esecuzione delle istruzioni CREATE CAST e DROP CAST come utente del database con il ruolo cloudsqlsuperuser. Tuttavia, questo utente deve avere il privilegio USAGE sui tipi di dati di origine e di destinazione. Ad esempio, un utente può creare un cast che converte il tipo di dati int di origine nel tipo di dati boolean di destinazione.

  • Avere accesso completo alla tabella del catalogo pg_largeobject

Utenti predefiniti di PostgreSQL

Quando crei una nuova istanza Cloud SQL per PostgreSQL, viene creato l'utente amministratore predefinito postgres, ma non la relativa password. Devi impostare una password per questo utente prima di poter accedere. Puoi farlo nella Google Cloud console o utilizzando il seguente gcloud comando:

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

L'utente postgres fa parte del ruolo cloudsqlsuperuser e ha i seguenti attributi (privilegi): CREATEROLE, CREATEDB e LOGIN. Non ha gli attributi SUPERUSER o REPLICATION.

Viene creato un utente cloudsqlimportexport predefinito con il set minimo di privilegi necessari per le operazioni di importazione ed esportazione CSV. Puoi creare i tuoi utenti per eseguire queste operazioni, ma in caso contrario viene utilizzato l'utente cloudsqlimportexport predefinito. L'utente cloudsqlimportexport è un utente di sistema e non puoi utilizzarlo direttamente.

Utenti e ruoli di sistema di Cloud SQL

Cloud SQL utilizza utenti e ruoli di sistema per supportare le funzionalità di Cloud SQL. Non puoi eliminare o modificare i ruoli o gli utenti di sistema di Cloud SQL. Non puoi assegnare ruoli di sistema, ad eccezione del ruolo cloudsqlsuperuser, agli utenti del database. Non puoi assegnare ruoli del database agli utenti di sistema.

  • Ruoli di sistema

    • cloudsqliamgroup

      Utilizzato per designare un account di autenticazione del gruppo IAM non di accesso utilizzato per l'autenticazione del gruppo IAM.

    • cloudsqlinactiveuser

      Utilizzato per designare un account di autenticazione del gruppo IAM come inattivo.

    • cloudsqliamgroupserviceaccount

      Utilizzato per designare un account di servizio IAM che esegue l'autenticazione utilizzando l'autenticazione del gruppo IAM.

    • cloudsqliamgroupuser

      Utilizzato per designare un utente IAM che esegue l'autenticazione utilizzando l'autenticazione del gruppo IAM.

    • cloudsqliamserviceaccount

      Utilizzato per designare un account di servizio IAM che esegue l'autenticazione utilizzando l'autenticazione IAM dei database.

    • cloudsqliamuser

      Utilizzato per designare un utente IAM che esegue l'autenticazione utilizzando l'autenticazione IAM dei database.

    • cloudsqlsuperuser

      Ruolo concesso agli utenti con privilegi di superuser limitati. Il ruolo cloudsqlsuperuser viene concesso automaticamente ai nuovi utenti di PostgreSQL che utilizzano l'autenticazione integrata.

  • Utenti di sistema

    • cloudsqladmin

      Utente di sistema con privilegi di superuser sul database.

    • cloudsqlagent

      Utilizzato per il monitoraggio dei database.

    • cloudsqlconnpooladmin

      Utilizzato per il pool di connessioni gestito.

    • cloudsqlimportexport

      Utilizzato per l'importazione e l'esportazione dei dati.

    • cloudsqllogical

      Utilizzato per la creazione della replica logica.

    • cloudsqlobservability

      Utilizzato per l'osservabilità del database, ad esempio il suggeritore di indici e le query attive.

    • cloudsqlreplica

      Utilizzato per la replica.

Utenti IAM di Cloud SQL per l'autenticazione IAM

Identity and Access Management (IAM) è integrato con Cloud SQL in una funzionalità chiamata autenticazione IAM dei database. Quando crei istanze utilizzando questa funzionalità, gli utenti IAM possono accedere all'istanza utilizzando i propri nomi utente e password IAM. Il vantaggio dell'utilizzo dell'autenticazione IAM è che puoi utilizzare le credenziali IAM esistenti di un utente quando gli concedi l'accesso a un database. Quando l'utente lascia l'organizzazione, il suo account IAM viene sospeso, rimuovendo automaticamente l'accesso.

Altri utenti di PostgreSQL

Puoi creare altri utenti di PostgreSQL o ruoli. Gli utenti creati utilizzando Cloud SQL che non vengono creati utilizzando IAM fanno parte del ruolo cloudsqlsuperuser e hanno lo stesso set di attributi dell'utente postgres: CREATEROLE, CREATEDB e LOGIN. Puoi modificare gli attributi di qualsiasi utente utilizzando il comando ALTER ROLE.

Se crei un nuovo utente con il client psql, puoi scegliere di associarlo a un ruolo diverso o assegnargli attributi diversi.

Ruoli di PostgreSQL

Puoi creare ruoli personalizzati in PostgreSQL per organizzare e assegnare i privilegi del database per gli utenti di PostgreSQL. Puoi utilizzare i ruoli per fornire i privilegi iniziali del database agli utenti quando crei un'istanza Cloud SQL.

Per saperne di più sulla creazione e l'utilizzo dei ruoli in PostgreSQL, consulta Ruoli del database.

Quando crei un utente PostgreSQL integrato in Cloud SQL per PostgreSQL e non assegni alcun ruolo del database, all'utente viene concesso automaticamente il ruolo cloudsqlsuperuser. In alternativa, puoi creare un nuovo utente PostgreSQL e assegnare un ruolo o ruoli personalizzati diversi con privilegi più granulari. Per saperne di più sull'assegnazione dei ruoli agli utenti in Cloud SQL per PostgreSQL, consulta Gestire gli utenti con l'autenticazione integrata.

Percorso di ricerca sicuro

Per impedire il dirottamento del percorso di ricerca, assicurati che gli utenti con privilegi elevati abbiano il parametro search_path impostato su pg_catalog. In questo modo, il percorso di ricerca è protetto e gli schemi non attendibili come public vengono ignorati.

Per impostare questo valore in modo permanente per un utente, esegui il seguente comando:

ALTER ROLE <var>USER_NAME</var> SET search_path = pg_catalog;

Per impostarlo per la sessione corrente, esegui il seguente comando:

SET search_path TO pg_catalog;

Per saperne di più, consulta la documentazione di PostgreSQL sull'utilizzo sicuro dello schema e la guida CVE-2018-1058.

Utenti IAM e ruoli del database

Quando crei un account utente IAM in Cloud SQL per PostgreSQL e non assegni alcun ruolo del database, all'utente non viene concesso automaticamente alcun ruolo del database.

Puoi concedere il ruolo cloudsqlsuperuser e i ruoli del database personalizzati a utenti IAM, service account o gruppi assegnando i ruoli del database quando crei o aggiorni gli account IAM sull'istanza.

Per saperne di più sulla concessione dei ruoli agli utenti IAM, consulta Assegnare i ruoli del database durante l'aggiunta di un account IAM a un'istanza.

Accesso alla visualizzazione pg_shadow e alla tabella pg_authid

Puoi utilizzare la visualizzazione pg_shadow per lavorare con le proprietà dei ruoli contrassegnati come rolcanlogin nella pg_authid tabella del catalogo.

La visualizzazione pg_shadow contiene password con hash e altre proprietà dei ruoli (utenti) autorizzati ad accedere a un cluster. La tabella del catalogo pg_authid contiene password con hash e altre proprietà per tutti i ruoli del database.

In Cloud SQL, i clienti non possono accedere alla visualizzazione pg_shadow o alla tabella pg_authid utilizzando i privilegi predefiniti. Tuttavia, l'accesso ai nomi dei ruoli e alle password con hash è utile in determinate situazioni, tra cui:

  • Configurazione di proxy o bilanciamento del carico con utenti e password esistenti
  • Migrazione degli utenti senza modifiche alle password
  • Implementazione di soluzioni personalizzate per la gestione delle policy relative alle password

Impostazione dei flag per la visualizzazione pg_shadow e la tabella pg_authid

Per accedere alla visualizzazione pg_shadow, imposta il cloudsql.pg_shadow_select_role flag su un nome di ruolo PostgreSQL. Per accedere alla tabella pg_authid, imposta il flag cloudsql.pg_authid_select_role su un nome di ruolo PostgreSQL.

Se esiste cloudsql.pg_shadow_select_role, ha accesso di sola lettura (SELECT) alla visualizzazione pg_shadow. Se esiste cloudsql.pg_authid_select_role, ha accesso SELECT alla tabella pg_authid.

Se uno dei due ruoli non esiste, le impostazioni non hanno effetto, ma non si verifica alcun errore. Tuttavia, viene registrato un errore quando un utente tenta di accedere alla visualizzazione o alla tabella. L'errore viene registrato nel log del database PostgreSQL: cloudsql.googleapis.com/postgres.log. Per informazioni sulla visualizzazione di questo log, consulta Visualizzare i log dell'istanza.

Assicurati che i ruoli configurati esistano e che non ci siano errori di battitura nel valore del flag cloudsql.pg_shadow_select_role o cloudsql.pg_authid_select_role. Puoi anche utilizzare la funzione pg_has_role per verificare che un utente sia membro di questi ruoli. Le informazioni su questa funzione sono disponibili nella pagina Funzioni e operatori delle informazioni di sistema.

Puoi utilizzare il flag cloudsql.pg_shadow_select_role o il cloudsql.pg_authid_select_role flag con l'appartenenza ai ruoli di PostgreSQL per gestire l'accesso a pg_shadow o pg_authid per più utenti.

Le modifiche a uno dei due flag non richiedono il riavvio del database.

Per saperne di più sui flag supportati, consulta Configurare i flag di database.

Scegliere un formato di archiviazione delle password

Cloud SQL per PostgreSQL archivia le password degli utenti in formato con hash. Puoi utilizzare il flag password_encryption per impostare l'algoritmo di crittografia su md5 o scram-sha-256. L'algoritmo md5 offre la più ampia compatibilità, mentre scram-sha-256 è più sicuro, ma potrebbe essere incompatibile con i client meno recenti.

Quando abiliti l'accesso a pg_shadow per esportare le proprietà dei ruoli da un'istanza Cloud SQL, valuta la possibilità di utilizzare l'algoritmo più sicuro supportato dai tuoi client.

Nella documentazione di PostgreSQL, consulta anche:

Passaggi successivi