Il controllo granulare degli accessi di Spanner combina i vantaggi di Identity and Access Management (IAM) con il controllo dell'accesso basato sui ruoli SQL. Con il controllo dell'accesso granulare, puoi definire i ruoli del database, concedere privilegi ai ruoli e creare criteri IAM per concedere autorizzazioni sui ruoli del database agli entità IAM. Questa pagina descrive come utilizzare il controllo dell'accesso granulare con Spanner per i database in dialetto GoogleSQL e PostgreSQL.
In qualità di amministratore, devi attivare il controllo dell'accesso granulare per le singole entità IAM. Le entità per le quali è abilitato il controllo dell'accesso granulare ("utenti con controllo dell'accesso granulare") devono assumere un ruolo del database per accedere alle risorse Spanner.
L'accesso alle risorse per gli utenti che non sono utenti del controllo dell'accesso granulare è regolato dai ruoli a livello di database IAM. Il controllo dell'accesso granulare è completamente compatibile e può coesistere con il controllo dell'accesso a livello di database IAM esistente. Puoi utilizzarla per accedere ai singoli oggetti del database. Per controllare l'accesso all'intero database, utilizza ruoli IAM.
Con il controllo dell'accesso granulare, puoi controllare l'accesso a tabelle, colonne, viste e stream di variazioni.
Per gestire il controllo dell'accesso granulare, utilizza le seguenti istruzioni DDL:
- Istruzioni
CREATE
eDROP
per creare ed eliminare i ruoli del database. I ruoli database sono raccolte di privilegi. Puoi creare fino a 100 ruoli per un database. Dichiarazioni
GRANT
eREVOKE
per concedere e revocare i privilegi ai e dai ruoli di database. I privilegi includonoSELECT
,INSERT
,UPDATE
,DELETE
eEXECUTE
. I nomi dei privilegi corrispondono alle istruzioni SQL con lo stesso nome. Ad esempio, un ruolo con il privilegioINSERT
può eseguire l'istruzione SQLINSERT
sulle tabelle specificate nell'istruzioneINSERT
.GRANT
Le seguenti istruzioni DDL concedono
SELECT
nella tabellaemployees
al ruolo del 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 Informazioni di riferimento sui privilegi di controllo dell'accesso granulare.
Dichiarazioni
GRANT
per concedere ruoli ad altri ruoli al fine di creare gerarchie di ruoli con ereditarietà dei privilegi.
Casi d'uso
Di seguito sono riportati alcuni casi d'uso di esempio per il controllo granulare dell'accesso:
- Un sistema informativo per le risorse umane con ruoli per analista della compensazione delle vendite, gestione delle vendite e analista delle risorse umane, ciascuno con diversi livelli di accesso ai dati. Ad esempio, gli analisti della compensazione e la gestione delle vendite non devono vedere i codici fiscali.
- Un'applicazione di car sharing con account di servizio e privilegi diversi per passeggeri e conducenti.
- Un libro mastro che consente le operazioni
SELECT
eINSERT
, ma non le operazioniUPDATE
eDELETE
.
Risorse Spanner e relativi privilegi
Di seguito è riportato un elenco delle risorse Spanner e dei diritti di controllo dell'accesso granulare che puoi concedere per queste risorse.
- Schemi
- Puoi concedere il privilegio
USAGE
sugli schemi a ruoli di database specifici. Per un schema non predefinito, i ruoli del database devono disporre del privilegioUSAGE
per accedere agli oggetti del database. Il controllo dei privilegi è il 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
,UPDATE
eDELETE
sulle tabelle ai ruoli del database. Per le tabelle con interleaving, un privilegio concesso sulla tabella principale non viene propagato alla tabella secondaria. - Colonne
- Puoi concedere
SELECT
,INSERT
eUPDATE
a un sottoinsieme di colonne in una tabella. Il privilegio è quindi valido solo per queste colonne.DELETE
non è consentito a livello di colonna. - Visualizzazioni
- Puoi concedere il privilegio
SELECT
a una vista. Per le visualizzazioni è supportato soloSELECT
. Spanner supporta sia le visualizzazioni dei diritti dell'invoker sia quelle dei diritti del definitore. Se crei una vista con i diritti dell'autore dell'istruzione, per eseguire query sulla vista, il ruolo o l'utente del database deve disporre del privilegioSELECT
sulla vista e anche del privilegioSELECT
sugli oggetti sottostanti a cui viene fatto riferimento nella vista. Se crei una vista con i diritti del definitore, per eseguire query sulla vista, il ruolo o l'utente del database deve disporre solo del privilegioSELECT
sulla vista. Per ulteriori informazioni, consulta la Panoramica delle visualizzazioni. - Flussi di modifiche
- Puoi concedere
SELECT
sugli stream di variazioni. Devi anche concedereEXECUTE
alla funzione di lettura associata a uno stream di modifiche. Per informazioni, consulta Controllo dell'accesso granulare per gli stream di modifiche. - Sequenze
- Puoi concedere
SELECT
eUPDATE
alle sequenze. Per informazioni, consulta Controllo dell'accesso granulare per le sequenze. - Modelli
- Puoi concedere
EXECUTE
ai modelli. Per informazioni, consulta Controllo dell'accesso granulare per i modelli.
Ruoli del sistema di controllo dell'accesso granulare
Il controllo dell'accesso granulare ha ruoli di sistema predefiniti per ogni database. Come i ruoli 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 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 esegui query sulle tabelle INFORMATION_SCHEMA
.
Per ulteriori informazioni, consulta Ruoli del sistema di controllo dell'accesso granulare.
Gerarchie e ereditarietà dei ruoli del database
Puoi creare gerarchie di ruoli 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
e ereditano il
privilegio SELECT
nella tabella employees
.
hr_manager
e hr_director
possono anche avere membri, che eredittano il privilegio SELECT
su employees
.
Non ci sono limiti alla profondità delle gerarchie dei ruoli, ma il rendimento delle query potrebbe peggiorare con strutture gerarchiche dei ruoli ampie e profonde.
Backup e ripristino
I backup di Spanner includono le definizioni dei ruoli database. Quando un database viene ripristinato dal backup, i ruoli del database vengono ricreati con i relativi privilegi concessi. Tuttavia, i criteri IAM non fanno parte dei backup del database, quindi devi concedere di nuovo l'accesso ai ruoli del database alle entità nel database ripristinato.
Panoramica della configurazione del controllo dell'accesso granulare
Di seguito sono riportati i passaggi di alto livello da seguire per iniziare a proteggere i dati con il controllo dell'accesso granulare. Per maggiori dettagli, consulta Configurare il controllo dell'accesso granulare.
Per eseguire queste attività, devi disporre dei ruoli IAM roles/spanner.admin
o
roles/spanner.databaseAdmin
.
- Crea i ruoli di database e concedi i privilegi ai ruoli.
- (Facoltativo) Crea gerarchie di ruoli con ereditarietà concedendo i ruoli ad altri ruoli.
- Esegui questi passaggi per ogni entità che deve essere un utente con controllo dell'accesso granulare:
- Attiva il controllo dell'accesso granulare per l'entità.
All'entità viene quindi concesso automaticamente il ruolo database
public
, che non ha privilegi per impostazione predefinita. Si tratta di un'operazione da eseguire una sola volta per ciascun amministratore. - Concedi all'entità le autorizzazioni IAM su uno o più ruoli di database.
- Dopo aver assegnato all'entità tutti i ruoli di 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 il controllo dell'accesso dell'entità sia gestito da un solo metodo.
- Attiva il controllo dell'accesso granulare 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 nella pagina TABELLA della console Google Cloud non è disponibile per gli utenti con controllo dell'accesso granulare.
Passaggi successivi
- Accedere a un database con controllo dell'accesso granulare
- Controllo dell'accesso granulare per gli stream di modifiche
- Configurare il controllo dell'accesso granulare
- Informazioni di riferimento sui privilegi per il controllo dell'accesso granulare
- Ruoli di sistema per il controllo dell'accesso granulare
- Comandi
GRANT
eREVOKE
di GoogleSQL - Comandi
GRANT
eREVOKE
di PostgreSQL - Controllo dell'accesso granulare per le sequenze
- Controllo dell'accesso granulare per i modelli