In questa pagina vengono descritti i privilegi che è possibile concedere a un ruolo di database per un controllo dell'accesso granulare.
Per saperne di più sui ruoli del database e sul controllo granulare dell'accesso, consulta Informazioni sul controllo dell'accesso granulare.
La tabella seguente mostra i privilegi di controllo dell'accesso granulare e gli oggetti di database su cui possono essere concesse.
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 ciascun privilegio.
SELECT
Consente al ruolo di leggere o eseguire query da una tabella, una visualizzazione, un flusso di modifiche, una sequenza o un modello.
Se un elenco di colonne è specificato per una tabella, il privilegio è valido solo colonne. Se non viene specificato nessun elenco di colonne, il privilegio è valido su tutti colonne della tabella, incluse le colonne aggiunte in seguito. Un elenco di colonne non è consentito per una visualizzazione.
Spanner supporta sia le visualizzazioni dei diritti dell'invocatore che quelle del definitore visualizzazioni dei diritti umani. Per ulteriori informazioni, consulta Informazioni sulle viste.
Se crei una vista con i diritti dell'invocatore, per eseguire query sulla vista, il database il ruolo o l'utente deve avere il privilegio
SELECT
per la vista, oltre al privilegioSELECT
per gli oggetti sottostanti a cui viene fatto riferimento nella vista. Ad esempio: Supponiamo che la vistaSingerNames
sia stata creata nella tabellaSingers
.CREATE VIEW SingerNames SQL SECURITY INVOKER AS SELECT Singers.SingerId, Singers.FirstName, Singers.LastName FROM Singers;
Supponiamo che il ruolo di database
myRole
esegua la querySELECT * FROM SingerNames
. Il ruolo deve avere il privilegioSELECT
per la visualizzazione e deve disporre del privilegioSELECT
per le tre colonne di riferimento o nella l'intera tabellaSingers
.Se crei una vista con i diritti del definitore, per eseguire query sulla vista, il database il ruolo o l'utente richiede solo il privilegio
SELECT
per la vista. Ad esempio: Supponiamo che la vistaAlbumsBudget
sia stata creata nella tabellaAlbums
.CREATE VIEW AlbumsBudget SQL SECURITY DEFINER AS SELECT Albums.Id, Albums.AlbumTitle, MarketingBudget FROM Albums;
Supponiamo che il ruolo di database
Analyst
esegua la querySELECT * FROM AlbumsBudget
. Il ruolo richiede solo il privilegioSELECT
nella vista. Non è necessario il privilegioSELECT
nelle tre colonne di riferimento o nella tabellaAlbums
.Dopo aver concesso
SELECT
su un sottoinsieme di colonne di una tabella, l'utente FGAC può non usano piùSELECT *
in quella tabella. Le query di quella tabella devono assegnare un nome a tutti colonne da includere.SELECT
concesso per una colonna generata non concedeSELECT
sulla colonna sottostante colonne di base.Per le tabelle con interleaving,
SELECT
concesso per la tabella padre non propagarsi alla tabella figlio.Quando concedi
SELECT
su una modifica in tempo reale, devi concedere ancheEXECUTE
su la funzione con valore di tabella per il flusso di modifiche. Per ulteriori informazioni, vedi EXECUTE.Quando
SELECT
viene utilizzato con una funzione di aggregazione su colonne specifiche, per ad esempioSUM(col_a)
, il ruolo deve avere il privilegioSELECT
per queste colonne. Se la funzione aggregata non specifica colonne, ad esempioCOUNT(*)
, il ruolo deve disporre del privilegioSELECT
per almeno una colonna della tabella.Quando utilizzi
SELECT
con una sequenza, puoi visualizzare solo le sequenze che dispongono dei 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 un elenco di colonne è specificato, l'autorizzazione è valida solo colonne. Se non viene specificato nessun elenco di colonne, il privilegio è valido su tutti colonne nella tabella.
Se vengono specificati nomi di colonna, tutte le colonne non incluse ottiene il valore predefinito al momento dell'inserimento.
Impossibile concedere
INSERT
per le 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. Quando la usi con le sequenze,
consente al ruolo di chiamare la funzione get-next-sequence-value
nella sequenza.
Oltre al privilegio UPDATE
, il ruolo deve
il privilegio SELECT
su tutte le colonne chiave e su tutte le colonne di cui è stata eseguita la query. Query eseguita
includono colonne nella clausola WHERE
e colonne utilizzate per
calcolare i nuovi valori delle colonne aggiornate e delle colonne generate.
Impossibile concedere UPDATE
per le 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.
Impossibile concedere
DELETE
a livello di colonna.Il ruolo deve anche essere
SELECT
in tutte le colonne chiave e in tutte le eventuali colonne incluso nelle clausole della queryWHERE
.Per le tabelle con interfoliazione nei database di dialetti GoogleSQL, il Il privilegio
DELETE
è obbligatorio solo per la tabella padre. Se una tabella secondaria specificaON DELETE CASCADE
, le righe della tabella figlio vengono eliminate anche senza il privilegioDELETE
per la tabella figlio.
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
su una modifica in tempo reale, devi concedere EXECUTE
anche nella
di lettura per il flusso di modifiche. Per ulteriori informazioni, vedi
Modificare le funzioni di lettura e la sintassi delle query dei flussi di dati.
Se utilizzi questa funzionalità con i modelli, il ruolo può usare il modello funzioni di machine learning.
Esempio
L'esempio seguente mostra come concedere EXECUTE
sulla funzione di lettura per l'oggetto
la modifica in tempo reale denominata 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, questo fornisce i privilegi per accedere
contenuti nello schema denominato. Il privilegio USAGE
viene concesso da
lo schema predefinito.
Passaggi successivi
Per ulteriori informazioni, vedi:
- Configurare un controllo dell'accesso granulare
- Informazioni sul controllo dell'accesso granulare
- Istruzioni GRANT e REVOKE (database di dialetti GoogleSQL)
- Istruzioni GRANT e REVOKE (database di dialetti PostgreSQL)