Il controllo granulare dell'accesso di Spanner combina i vantaggi di Identity and Access Management (IAM) con controllo dell'accesso basato su ruoli SQL. Con controllo dell'accesso granulare dell'accesso, definisci i ruoli del database, concedi i privilegi ai ruoli e crei policy IAM per concedere le autorizzazioni sui ruoli del database alle entità IAM. Questa pagina descrive come utilizzare controllo dell'accesso granulare dell'accesso con Spanner per i database con dialetto GoogleSQL e PostgreSQL.
In qualità di amministratore, devi attivare controllo dell'accesso granulare dell'accesso per le singole entità IAM. Le entità per cui è abilitato il controllo dell'accesso granulare dell'accesso ("utenti con controllo dell'accesso granulare dell'accesso") devono assumere un ruolo del database per accedere alle risorse Spanner.
L'accesso alle risorse per gli utenti che non sono utenti controllo dell'accesso granulare dell'accesso è regolato dai ruoli IAM a livello di database. Il controllo granulare dell'accesso è completamente compatibile e può coesistere con controllo dell'accesso a livello di database IAM esistente. Puoi utilizzarlo per accedere ai singoli oggetti del database. Per controllare l'accesso all'intero database, utilizza i ruoli IAM.
Con il controllo granulare dell'accesso, puoi controllare l'accesso a tabelle, colonne, viste e modifiche in tempo reale.
Per gestire controllo dell'accesso granulare dell'accesso, utilizza le seguenti istruzioni DDL:
- Istruzioni
CREATEeDROPper la creazione e l'eliminazione dei ruoli del database. I ruoli del database sono raccolte di privilegi. Puoi creare fino a 100 ruoli per un database. Istruzioni
GRANTeREVOKEper concedere e revocare i privilegi ai ruoli del database. I privilegi includonoSELECT,INSERT,UPDATE,DELETEeEXECUTE. I nomi dei privilegi corrispondono alle istruzioni SQL con lo stesso nome. Ad esempio, un ruolo con il privilegioINSERTpuò eseguire l'istruzione SQLINSERTsulle tabelle specificate nell'istruzioneGRANT.Le seguenti istruzioni DDL concedono
SELECTsulla tabellaemployeesal ruolo di databasehr_rep.GoogleSQL
CREATE ROLE hr_rep; GRANT SELECT ON TABLE employees TO ROLE hr_rep;PostgreSQL
CREATE ROLE hr_rep; GRANT SELECT ON TABLE employees TO hr_rep;Per ulteriori informazioni sui privilegi, consulta la pagina di riferimento sui privilegi di controllo dell'accesso granulare dell'accesso.
Istruzioni
GRANTper concedere ruoli ad altri ruoli per creare gerarchie di ruoli, con ereditarietà dei privilegi.
Casi d'uso
Di seguito sono riportati alcuni esempi di casi d'uso per controllo dell'accesso granulare dell'accesso:
- Un sistema di informazioni sulle risorse umane che prevede i ruoli di analista dei compensi di vendita, gestione delle vendite e analista delle RU, ciascuno con livelli di accesso diversi ai dati. Ad esempio, gli analisti delle retribuzioni e la gestione delle vendite non dovrebbero vedere i codici fiscali.
- Un'applicazione di ride sharing con diversi service account e privilegi per passeggeri e conducenti.
- Un ledger che consente le operazioni
SELECTeINSERT, ma non le operazioniUPDATEeDELETE.
Risorse Spanner e relativi privilegi
Di seguito è riportato un elenco delle risorse Spanner e dei privilegi di controllo dell'accesso granulare dell'accesso che puoi concedere per queste risorse.
- Schemi
- Puoi concedere il privilegio
USAGEsugli schemi a ruoli di database specifici. Per uno schema non predefinito, i ruoli del database devono disporre del privilegioUSAGEper accedere agli oggetti del database. Il controllo dei privilegi è simile al seguente:
Hai USAGE nello schema?
No: rifiuta l'accesso.
Sì: disponi anche dei diritti appropriati sulla tabella?
No: rifiuta l'accesso.
Sì: puoi accedere alla tabella.
- Tabelle
- Puoi concedere i privilegi
SELECT,INSERT,UPDATEeDELETEsulle tabelle ai ruoli del database. Per le tabelle con interleaving, un privilegio concesso alla tabella principale non si propaga alla tabella secondaria. - Colonne
- Puoi concedere
SELECT,INSERTeUPDATEsu un sottoinsieme di colonne di una tabella. Il privilegio è quindi valido solo per queste colonne.DELETEnon è consentito a livello di colonna. - Visualizzazioni
- Puoi concedere il privilegio
SELECTsu una vista. Per le visualizzazioni è supportato soloSELECT. Spanner supporta sia le viste con diritti del chiamante sia le viste con diritti del definer. Se crei una vista con i diritti di chi richiama, per eseguire query sulla vista, il ruolo o l'utente del database deve disporre del privilegioSELECTsulla vista e del privilegioSELECTsugli oggetti sottostanti a cui viene fatto riferimento nella vista. Se crei una vista con i diritti del definer, per eseguire query sulla vista, il ruolo o l'utente del database deve avere solo il privilegioSELECTsulla vista. Per saperne di più, consulta la panoramica delle visualizzazioni. - Modifiche in tempo reale
- Puoi concedere
SELECTsulle modifiche in tempo reale. Devi anche concedereEXECUTEsulla funzione di lettura associata a un feed delle modifiche in tempo reale. Per informazioni, consulta Controllo granulare dell'controllo dell'accesso per i flussi di modifiche in tempo reale. - Sequenze
- Puoi concedere
SELECTeUPDATEsulle sequenze. Per informazioni, consulta Controllo granulare dell'controllo dell'accesso per le sequenze. - Modelli
- Puoi concedere
EXECUTEsui modelli. Per informazioni, consulta Controllo granulare dell'controllo dell'accesso per i modelli.
Ruoli di sistema per controllo dell'accesso granulare dell'accesso
Il controllo granulare dell'accesso prevede ruoli di sistema predefiniti per ogni database. Come i ruoli del database definiti dall'utente, i ruoli di sistema possono controllare l'accesso alle risorse Spanner.
Ad esempio, a un utente con controllo dell'accesso granulare dell'accesso deve essere concesso il ruolo di sistema spanner_sys_reader per accedere a Key Visualizer e il ruolo di sistema spanner_info_reader per poter visualizzare i risultati non filtrati quando esegue query sulle tabelle INFORMATION_SCHEMA.
Per saperne di più, consulta Ruoli di sistema per controllo dell'accesso granulare dell'accesso.
Gerarchie ed ereditarietà dei ruoli del database
Puoi creare gerarchie di ruoli del database, in cui i ruoli secondari ereditano i privilegi dei ruoli principali. I ruoli secondari sono noti come membri del ruolo principale.
Ad esempio, considera le seguenti istruzioni GRANT:
GoogleSQL
GRANT SELECT ON TABLE employees TO ROLE pii_access;
GRANT ROLE pii_access TO ROLE hr_manager, hr_director;
PostgreSQL
GRANT SELECT ON TABLE employees TO pii_access;
GRANT pii_access TO hr_manager, hr_director;
hr_manager e hr_director sono membri del ruolo pii_access ed ereditano il privilegio SELECT sulla tabella employees.

Anche hr_manager e hr_director possono avere membri, che erediteranno il privilegio SELECT su employees.
Non esistono limiti alla profondità delle gerarchie dei ruoli, ma le prestazioni delle query potrebbero peggiorare con strutture di gerarchia dei ruoli profonde e ampie.
Backup e ripristino
I backup di Spanner includono le definizioni dei ruoli del database. Quando un database viene ripristinato dal backup, i ruoli del database vengono ricreati con i privilegi concessi. Tuttavia, le policy IAM non fanno parte dei backup del database, quindi devi concedere nuovamente l'accesso ai ruoli del database alle entità nel database ripristinato.
Panoramica della configurazione controllo dell'accesso granulare dell'accesso
Di seguito sono riportati i passaggi generali da seguire per iniziare a proteggere i dati con controllo dell'accesso granulare dell'accesso. Per maggiori dettagli, consulta Configura il controllo granulare dell'accesso.
Per eseguire queste attività, devi disporre dei ruoli IAM roles/spanner.admin o roles/spanner.databaseAdmin.
- Creare ruoli del database e concedere privilegi ai ruoli.
- (Facoltativo) Crea gerarchie di ruoli con ereditarietà concedendo ruoli ad altri ruoli.
- Esegui questi passaggi per ogni entità che deve essere un utente con controllo dell'accesso granulare dell'accesso:
- Abilita il controllo granulare dell'accesso per l'entità.
All'entità viene quindi concesso automaticamente il ruolo database
public, che non ha privilegi per impostazione predefinita. Questa operazione deve essere eseguita una sola volta per ogni entità. - Concedi all'entità le autorizzazioni IAM su uno o più ruoli del database.
- Dopo aver concesso all'entità tutti i ruoli database richiesti, se l'entità dispone di ruoli IAM a livello di database, valuta la possibilità di revocare i ruoli a livello di database in modo che controllo dell'accesso dell'entità sia gestito da un solo metodo.
- Abilita il controllo granulare dell'accesso per l'entità.
All'entità viene quindi concesso automaticamente il ruolo database
Limitazioni
- Le operazioni di esportazione non esportano i ruoli e i privilegi del database e le operazioni di importazione non possono importarli. Devi configurare manualmente i ruoli e i privilegi al termine dell'importazione.
- La scheda Dati della pagina TABELLA nella console Google Cloud non è disponibile per gli utenti con controllo dell'accesso granulare dell'accesso.
Passaggi successivi
- Accedi a un database con controllo granulare dell'accesso
- Controllo granulare dell'controllo dell'accesso per le modifiche in tempo reale
- Configura il controllo granulare dell'accesso
- Riferimento ai privilegi di controllo dell'accesso granulare
- Ruoli di sistema per il controllo dell'accesso granulare
- Istruzioni
GRANTeREVOKEdi GoogleSQL - Istruzioni
GRANTeREVOKEdi PostgreSQL - Controllo granulare dell'controllo dell'accesso per le sequenze
- Controllo granulare dell'controllo dell'accesso per i modelli