Panoramica del controllo dell'accesso granulare

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 e DROP 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 e REVOKE per concedere e revocare i privilegi ai e dai ruoli di database. I privilegi includono SELECT, INSERT, UPDATE, DELETE e EXECUTE. I nomi dei privilegi corrispondono alle istruzioni SQL con lo stesso nome. Ad esempio, un ruolo con il privilegio INSERT può eseguire l'istruzione SQL INSERT sulle tabelle specificate nell'istruzione INSERT.GRANT

    Le seguenti istruzioni DDL concedono SELECT nella tabella employees al ruolo del database hr_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 e INSERT, ma non le operazioni UPDATE e DELETE.

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 privilegio USAGE 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 e DELETE 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 e UPDATE 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 solo SELECT. 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 privilegio SELECT sulla vista e anche del privilegio SELECT 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 privilegio SELECT sulla vista. Per ulteriori informazioni, consulta la Panoramica delle visualizzazioni.
Flussi di modifiche
Puoi concedere SELECT sugli stream di variazioni. Devi anche concedere EXECUTE 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 e UPDATE 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.

Eredità dei privilegi

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.

  1. Crea i ruoli di database e concedi i privilegi ai ruoli.
  2. (Facoltativo) Crea gerarchie di ruoli con ereditarietà concedendo i ruoli ad altri ruoli.
  3. Esegui questi passaggi per ogni entità che deve essere un utente con controllo dell'accesso granulare:
    1. 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.
    2. Concedi all'entità le autorizzazioni IAM su uno o più ruoli di database.
    3. 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.

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