Informazioni su utenti e ruoli PostgreSQL

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

Per una documentazione completa sui ruoli PostgreSQL, consulta Ruoli database nella documentazione di PostgreSQL. Per informazioni su come creare e gestire gli utenti Cloud SQL, consulta Creare e gestire gli utenti.

Differenza tra utenti e ruoli

I ruoli PostgreSQL possono essere un singolo ruolo o funzionare come un 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 deve necessariamente avere l'attributo LOGIN.

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

Restrizioni e privilegi di superutente

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 super user.

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

  • Creazione di estensioni che richiedono privilegi di superutente.
  • Creazione di trigger di eventi.
  • Creazione di utenti di replica.
  • Creazione di pubblicazioni e sottoscrizioni di replica.
  • Esegui le istruzioni CREATE CAST e DROP CAST come utente del database con il ruolo cloudsqlsuperuser. Tuttavia, questo utente deve disporre del privilegio USAGE sia sui tipi di dati di origine che su quelli di destinazione. Ad esempio, un utente può creare una conversione che converta il tipo di dati int di origine nel tipo di dati boolean di destinazione.

  • Avere accesso completo alla tabella del catalogo pg_largeobject.

Utenti PostgreSQL predefiniti

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

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

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

Viene creato un utente cloudsqlimportexport predefinito con l'insieme minimo di privilegi necessari per le operazioni di importazione/esportazione in formato CSV. Puoi creare i tuoi utenti per eseguire queste operazioni, ma se non lo fai, viene utilizzato l'utente cloudsqlimportexport predefinito. L'utente cloudsqlimportexport è un utente di sistema e i clienti non possono utilizzarlo direttamente.

Utenti IAM Cloud SQL per l'autenticazione IAM

Identity and Access Management (IAM) è integrato con Cloud SQL in una funzionalità chiamata autenticazione IAM. Quando crei istanze utilizzando questa funzionalità, gli utenti IAM possono accedere all'istanza utilizzando i propri nomi utente e le proprie 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 e il suo accesso viene rimosso automaticamente.

Altri utenti PostgreSQL

Puoi creare altri utenti o ruoli PostgreSQL. Tutti gli utenti che crei utilizzando Cloud SQL vengono creati all'interno del ruolo cloudsqlsuperuser e hanno lo stesso insieme 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.

Accesso alla vista pg_shadow e alla tabella pg_authid

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

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

In Cloud SQL, i clienti non possono accedere alla vista pg_shadow o alla tabella pg_authid utilizzando i privilegi predefiniti. Tuttavia, l'accesso ai nomi dei ruoli e alle password sottoposte ad hashing è utile in determinate situazioni, ad esempio:

  • 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 vista pg_shadow, imposta il flag cloudsql.pg_shadow_select_role su un nome di ruolo PostgreSQL. Per accedere alla tabella pg_authid, imposta il cloudsql.pg_authid_select_role flag su un nome del ruolo PostgreSQL.

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

Se uno dei due ruoli non esiste, le impostazioni non hanno alcun effetto, ma non si verificano errori. Tuttavia, viene registrato un errore quando un utente tenta di accedere alla vista o alla tabella. L'errore viene registrato nel log del database PostgreSQL: cloudsql.googleapis.com/postgres.log. Per informazioni su come visualizzare questo log, vedi Visualizzare i log delle istanze.

Assicurati che i ruoli configurati esistano e che non ci siano errori ortografici nel valore del flag cloudsql.pg_shadow_select_role o del flag 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 di informazioni di sistema.

Puoi utilizzare il flag cloudsql.pg_shadow_select_role o il cloudsql.pg_authid_select_role con l'appartenenza al ruolo PostgreSQL per gestire l'accesso pg_shadow o pg_authid per più utenti.

Le modifiche a entrambi i flag non richiedono il riavvio del database.

Per ulteriori informazioni sui flag supportati, consulta Configurare i flag di database.

Scegliere un formato di archiviazione delle password

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

Quando attivi l'accesso pg_shadow per esportare le proprietà dei ruoli da un'istanza Cloud SQL, ti consigliamo di utilizzare l'algoritmo più sicuro supportato dai tuoi clienti.

Nella documentazione di PostgreSQL, consulta anche:

Passaggi successivi