Questa pagina descrive i privilegi che puoi concedere a un ruolo del database per controllo dell'accesso granulare dell'accesso.
Per informazioni sui ruoli del database e sul controllo dell'accesso dell'accesso granulare, consulta Informazioni sul controllo dell'accesso granulare.
La tabella seguente mostra i privilegi di controllo dell'accesso granulare e gli oggetti del database su cui possono essere concessi.
SELEZIONA | INSERT | AGGIORNA | ELIMINA | EXECUTE | UTILIZZO | |
---|---|---|---|---|---|---|
Schema | ✓ | |||||
Tabella | ✓ | ✓ | ✓ | ✓ | ||
Colonna | ✓ | ✓ | ✓ | ✓ | ||
Visualizza | ✓ | |||||
Modifiche in tempo reale | ✓ | |||||
Funzione di lettura del flusso di modifiche | ✓ | |||||
Sequenza | ✓ | ✓ | ||||
Modello | ✓ |
Le sezioni seguenti forniscono dettagli su ciascun privilegio.
SELECT
Consente al ruolo di leggere o eseguire query da una tabella, una vista, uno stream di variazioni, una sequenza o un modello.
Se per una tabella è 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, incluse quelle aggiunte in un secondo momento. Un elenco di colonne non è consentito per una visualizzazione.
Spanner supporta sia le visualizzazioni dei diritti dell'invoker sia quelle dei diritti del definitore. Per saperne di più, consulta Informazioni sulle visualizzazioni.
Se crei una vista con i diritti dell'invoker, per eseguire query sulla vista, il ruolo o l'utente del database deve disporre del privilegio
SELECT
sulla vista e anche del privilegioSELECT
sugli oggetti sottostanti a cui viene fatto riferimento nella vista. Ad esempio, supponiamo che la visualizzazioneSingerNames
sia creata nella tabellaSingers
.CREATE VIEW SingerNames SQL SECURITY INVOKER AS SELECT Singers.SingerId, Singers.FirstName, Singers.LastName FROM Singers;
Supponiamo che il ruolo database
myRole
esegua la querySELECT * FROM SingerNames
. Il ruolo deve disporre del privilegioSELECT
per la visualizzazione e del privilegioSELECT
per le tre colonne a cui si fa riferimento o per l'intera tabellaSingers
.Se crei una vista con i diritti del fondatore, per eseguire query sulla vista, il ruolo o l'utente del database deve disporre solo del privilegio
SELECT
sulla vista. Ad esempio, supponiamo che la visualizzazioneAlbumsBudget
sia creata nella tabellaAlbums
.CREATE VIEW AlbumsBudget SQL SECURITY DEFINER AS SELECT Albums.Id, Albums.AlbumTitle, MarketingBudget FROM Albums;
Supponiamo che il ruolo database
Analyst
esegua la querySELECT * FROM AlbumsBudget
. Il ruolo richiede solo il privilegioSELECT
sulla visualizzazione. Non è necessario il privilegioSELECT
per le tre colonne a cui si fa riferimento o per la tabellaAlbums
.Dopo aver concesso
SELECT
a un sottoinsieme di colonne di una tabella, l'utente FGAC non può più utilizzareSELECT *
in quella tabella. Le query su questa tabella devono indicare il nome di tutte le colonne da includere.I diritti
SELECT
concessi a una colonna generata non vengono concessi alle colonne di base sottostanti.SELECT
Per le tabelle con interleaving, i diritti
SELECT
concessi alla tabella principale non si propagano alla tabella secondaria.Quando concedi
SELECT
a un flusso di variazioni, devi concedereSELECT
anche alla funzione con valori di tabella per il flusso di variazioni.EXECUTE
Per ulteriori informazioni, consulta EXECUTE.Quando
SELECT
viene utilizzato con una funzione di aggregazione in colonne specifiche, ad esempioSELECT
, il ruolo deve disporre del privilegioSELECT
per queste colonne.SUM(col_a)
Se la funzione di aggregazione non specifica colonne, ad esempioCOUNT(*)
, il ruolo deve disporre del privilegioSELECT
su almeno una colonna della tabella.Quando utilizzi
SELECT
con una sequenza, puoi visualizzare solo le sequenze per le quali hai i privilegi di visualizzazione.
Esempi
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 assume il valore predefinito al momento dell'inserimento.
INSERT
non può essere concesso alle colonne generate.
Esempi
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. Se lo utilizzi con le sequenze, consente al ruolo di chiamare la funzione get-next-sequence-value
sulla sequenza.
Oltre al privilegio UPDATE
, il ruolo deve disporre del privilegio SELECT
su tutte le colonne sottoposte a query. Le colonne su cui è stata eseguita la query includono le colonne nella clausola WHERE
.
UPDATE
non può essere concesso alle colonne generate.
Esempi
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.
DELETE
non può essere concesso a livello di colonna.Il ruolo richiede inoltre
SELECT
per tutte le colonne che potrebbero essere incluse nelle clausoleWHERE
della query.Per le tabelle interlacciate nei database con dialetto GoogleSQL, il privilegio
DELETE
è richiesto solo per la tabella principale. Se una tabella secondaria specificaON DELETE CASCADE
, le righe della tabella secondaria vengono eliminate anche senza il privilegioDELETE
sulla tabella secondaria.
Esempio
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 SELECT
anche alla funzione di lettura per il flusso di modifiche.EXECUTE
Per ulteriori informazioni, consulta
Funzioni di lettura e sintassi delle query per i flussi di modifiche.
Se lo utilizzi con i modelli, il ruolo può utilizzarli nelle funzioni di machine learning.
Esempio
L'esempio seguente mostra come concedere EXECUTE
alla funzione di lettura per il stream di variazioni 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, fornisci i privilegi per accedere agli oggetti contenuti nello schema denominato. Il privilegio USAGE
viene concesso per impostazione predefinita allo schema predefinito.
Passaggi successivi
Per ulteriori informazioni, vedi:
- Configurare il controllo dell'accesso granulare
- Informazioni sul controllo dell'accesso granulare
- Istruzioni GRANT e REVOKE (database in dialetto GoogleSQL)
- Comandi GRANT e REVOKE (database in dialetto PostgreSQL)