Questa pagina descrive i privilegi che puoi concedere a un ruolo del database per controllo dell'accesso granulare. Queste informazioni si applicano sia ai database con dialetto GoogleSQL sia a quelli con dialetto PostgreSQL.
Per scoprire di più sui ruoli del database e sul controllo dell'accesso granulare, consulta la panoramica del controllo dell'accesso dell'accesso granulare.
La tabella seguente mostra i privilegi di controllo dell'accesso granulare e gli oggetti di database su cui possono essere concessi.
| SELEZIONA | INSERISCI | AGGIORNA | ELIMINA | EXECUTE | UTILIZZO | |
|---|---|---|---|---|---|---|
| Schema | ✓ | |||||
| Tabella | ✓ | ✓ | ✓ | ✓ | ||
| Colonna | ✓ | ✓ | ✓ | ✓ | ||
| Visualizza | ✓ | |||||
| Modifiche in tempo reale | ✓ | |||||
| Funzione di lettura delle modifiche in tempo reale | ✓ | |||||
| Sequenza | ✓ | ✓ | ||||
| Modello | ✓ |
Le sezioni seguenti forniscono dettagli su ogni privilegio.
SELECT
Consente al ruolo di leggere o eseguire query da una tabella, una vista, un flusso di modifiche, una sequenza o un modello.
Se per una tabella viene specificato un elenco di colonne, il privilegio è valido solo per queste colonne. Se non viene specificato alcun elenco di colonne, il privilegio è valido per tutte le colonne della tabella, comprese quelle aggiunte in seguito. Un elenco di colonne non è consentito per una visualizzazione.
Spanner supporta sia le viste con diritti dell'invocatore sia quelle con diritti del definer. Per saperne di più, consulta la panoramica delle visualizzazioni.
Se crei una vista con i diritti dell'invocatore, per eseguire query sulla vista, il ruolo o l'utente del database deve disporre del privilegio
SELECTsulla vista e anche del privilegioSELECTsugli oggetti sottostanti a cui viene fatto riferimento nella vista. Ad esempio, supponiamo che la vistaSingerNamesvenga creata nella tabellaSingers.CREATE VIEW SingerNames SQL SECURITY INVOKER AS SELECT Singers.SingerId, Singers.FirstName, Singers.LastName FROM Singers;Supponiamo che il ruolo del database
myRoleesegua la querySELECT * FROM SingerNames. Il ruolo deve disporre del privilegioSELECTsulla visualizzazione e del privilegioSELECTsulle tre colonne a cui viene fatto riferimento o sull'intera tabellaSingers.Se crei una vista con i diritti del definer, per eseguire query sulla vista, il ruolo o l'utente del database deve disporre solo del privilegio
SELECTsulla vista. Ad esempio, supponiamo che la vistaAlbumsBudgetvenga creata nella tabellaAlbums.CREATE VIEW AlbumsBudget SQL SECURITY DEFINER AS SELECT Albums.Id, Albums.AlbumTitle, MarketingBudget FROM Albums;Supponiamo che il ruolo del database
Analystesegua la querySELECT * FROM AlbumsBudget. Il ruolo richiede solo il privilegioSELECTnella visualizzazione. Non richiede il privilegioSELECTsulle tre colonne a cui viene fatto riferimento o sulla tabellaAlbums.Dopo aver concesso
SELECTsu un sottoinsieme di colonne per una tabella, l'utente FGAC non può più utilizzareSELECT *su quella tabella. Le query su questa tabella devono specificare tutte le colonne da includere.SELECTconcesso a una colonna generata non concedeSELECTalle colonne di base sottostanti.Per le tabelle con interleaving,
SELECTconcesso nella tabella principale non si propaga alla tabella secondaria.Quando concedi
SELECTsu uno stream di modifiche, devi concedere ancheEXECUTEsulla funzione con valori di tabella per lo stream di modifiche. Per saperne di più, consulta EXECUTE.Quando
SELECTviene utilizzato con una funzione di aggregazione su colonne specifiche, ad esempioSUM(col_a), il ruolo deve disporre del privilegioSELECTsu queste colonne. Se la funzione di aggregazione non specifica colonne, ad esempioCOUNT(*), il ruolo deve disporre del privilegioSELECTsu almeno una colonna della tabella.Quando utilizzi
SELECTcon una sequenza, puoi visualizzare solo le sequenze per le quali disponi dei privilegi di visualizzazione.
Esempi di utilizzo di GRANT SELECT
GoogleSQL
GRANT SELECT ON TABLE employees TO ROLE hr_director; GRANT SELECT ON TABLE customers, orders, items TO ROLE account_mgr; GRANT SELECT(name, level, cost_center, location, manager) ON TABLE employees TO ROLE hr_manager; GRANT SELECT(name, address, phone) ON TABLE employees, contractors TO ROLE hr_rep; GRANT SELECT ON VIEW orders_view TO ROLE hr_manager; GRANT SELECT ON CHANGE STREAM ordersChangeStream TO ROLE hr_analyst; GRANT SELECT ON SEQUENCE sequence_name TO ROLE role_name;
PostgreSQL
GRANT SELECT ON TABLE employees TO hr_director; GRANT SELECT ON TABLE customers, orders, items TO account_mgr; GRANT SELECT(name, level, cost_center, location, manager) ON TABLE employees TO hr_manager; GRANT SELECT(name, address, phone) ON TABLE employees, contractors TO hr_rep; GRANT SELECT ON TABLE orders_view TO hr_manager; // orders_view is an invoker rights view GRANT SELECT ON CHANGE STREAM orders_change_stream TO hr_analyst; GRANT SELECT ON SEQUENCE sequence_name TO hr_package;
INSERT
Consente al ruolo di inserire righe nelle tabelle specificate. Se viene specificato un elenco di colonne, l'autorizzazione è valida solo per queste colonne. Se non viene specificato alcun elenco di colonne, il privilegio è valido per tutte le colonne della tabella.
Se vengono specificati i nomi delle colonne, qualsiasi colonna non inclusa riceve il valore predefinito al momento dell'inserimento.
INSERTnon può essere concesso per le colonne generate.
Esempi di utilizzo di GRANT INSERT
GoogleSQL
GRANT INSERT ON TABLE employees, contractors TO ROLE hr_manager; GRANT INSERT(name, address, phone) ON TABLE employees TO ROLE hr_rep;
PostgreSQL
GRANT INSERT ON TABLE employees, contractors TO hr_manager; GRANT INSERT(name, address, phone) ON TABLE employees TO hr_rep;
UPDATE
Consente al ruolo di aggiornare le righe nelle tabelle specificate. Gli aggiornamenti possono essere
limitati a un sottoinsieme di colonne della tabella. Quando lo utilizzi con le sequenze, consente al ruolo di chiamare la funzione get-next-sequence-value nella sequenza.
Oltre al privilegio UPDATE, il ruolo deve disporre del privilegio SELECT su
tutte le colonne per cui è stata eseguita la query. Le colonne sottoposte a query includono le colonne nella clausola WHERE.
UPDATE non può essere concesso per le colonne generate.
Esempi di utilizzo di GRANT UPDATE
GoogleSQL
GRANT UPDATE ON TABLE employees, contractors TO ROLE hr_manager; GRANT UPDATE(name, address, phone) ON TABLE employees TO ROLE hr_rep;
PostgreSQL
GRANT UPDATE ON TABLE employees, contractors TO hr_manager; GRANT UPDATE(name, address, phone) ON TABLE employees TO hr_rep;
DELETE
Consente al ruolo di eliminare righe dalle tabelle specificate.
DELETEnon può essere concesso a livello di colonna.Il ruolo deve disporre anche dell'autorizzazione
SELECTper tutte le colonne che potrebbero essere incluse nelle clausoleWHEREdella query.Per le tabelle interleaved nei database con dialetto GoogleSQL, il privilegio
DELETEè richiesto solo nella tabella padre. Se una tabella secondaria specificaON DELETE CASCADE, le righe della tabella secondaria vengono eliminate anche senza il privilegioDELETEnella tabella secondaria.
Esempio di utilizzo di GRANT DELETE
GoogleSQL
GRANT DELETE ON TABLE employees, contractors TO ROLE hr_admin;
PostgreSQL
GRANT DELETE ON TABLE employees, contractors TO hr_admin;
EXECUTE
Quando concedi SELECT a un flusso di modifiche, devi concedere anche EXECUTE alla funzione di lettura del flusso di modifiche. Per saperne di più, consulta Funzioni di lettura dello stream di modifiche e sintassi delle query.
Quando lo utilizzi con i modelli, il ruolo può utilizzare il modello nelle funzioni di machine learning.
Esempio di utilizzo di GRANT EXECUTE
L'esempio seguente mostra come concedere EXECUTE alla funzione di lettura per lo stream delle modifiche denominato my_change_stream.
GoogleSQL
GRANT EXECUTE ON TABLE FUNCTION READ_my_change_stream TO ROLE hr_analyst;
PostgreSQL
GRANT EXECUTE ON FUNCTION spanner.read_json_my_change_stream TO hr_analyst;
UTILIZZO
Quando concedi USAGE a uno schema denominato, vengono forniti privilegi per accedere agli oggetti contenuti nello schema denominato. Il privilegio USAGE viene concesso per impostazione predefinita allo schema predefinito.
Passaggi successivi
- Configurare il controllo dell'accesso granulare
- Panoramica del controllo dell'accesso granulare
- Istruzioni GRANT e REVOKE (database con dialetto GoogleSQL)
- Istruzioni GRANT e REVOKE (database con dialetto PostgreSQL)