Questa pagina descrive come creare, utilizzare ed eliminare schemi denominati e come applicare il controllo dell'accesso granulare agli oggetti negli schemi denominati. Per informazioni generali sugli schemi denominati, consulta la sezione Schemi denominati.
Prima di iniziare
Per eseguire le procedure in questa pagina, devi disporre di quanto segue:
- Il ruolo Amministratore database/spanner.databaseAdmin nel tuo account utente.
- Scopri come funziona il controllo dell'accesso granulare.
Crea uno schema denominato
Il comando CREATE SCHEMA (GoogleSQL
e PostgreSQL)
viene utilizzato per creare uno schema denominato.
Nella console Google Cloud , apri la pagina Spanner.
Seleziona un'istanza dall'elenco.
Seleziona un database.
Nel menu di navigazione, fai clic su Spanner Studio.
Apri una nuova scheda facendo clic su Nuova scheda dell'editor SQL o Nuova scheda.
Nella scheda Editor, inserisci il DDL.
GoogleSQL
Esegui l'istruzione
CREATE SCHEMAper creare lo schema denominato, ad esempio:CREATE SCHEMA sch1;Aggiungi oggetti di database nello schema denominato, ad esempio:
CREATE SEQUENCE sch1.sequence OPTIONS ( sequence_kind = 'bit_reversed_positive' ); CREATE TABLE Singers ( SingerId INT64 NOT NULL, FirstName STRING(1024), LastName STRING(1024), SingerInfo BYTES(MAX), ) PRIMARY KEY(SingerId); CREATE INDEX indexOnSingers ON Singers(FirstName); CREATE TABLE Albums ( SingerId INT64 NOT NULL, AlbumId INT64 NOT NULL, AlbumTitle STRING(MAX), ) PRIMARY KEY(SingerId, AlbumId), INTERLEAVE IN PARENT Singers ON DELETE CASCADE; CREATE TABLE Songs ( SingerId INT64 NOT NULL, AlbumId INT64 NOT NULL, TrackId INT64 NOT NULL, SongName STRING(MAX), ) PRIMARY KEY(SingerId, AlbumId, TrackId), INTERLEAVE IN PARENT Albums ON DELETE CASCADE; CREATE TABLE sch1.Singers ( SingerId INT64 NOT NULL, FirstName STRING(1024), LastName STRING(1024), SingerInfo BYTES(MAX), ) PRIMARY KEY(SingerId); CREATE INDEX sch1.indexOnSingers ON sch1.Singers(FirstName); CREATE TABLE sch1.Albums ( SingerId INT64 NOT NULL, AlbumId INT64 NOT NULL, AlbumTitle STRING(MAX), ) PRIMARY KEY(SingerId, AlbumId), INTERLEAVE IN PARENT sch1.Singers ON DELETE CASCADE; CREATE TABLE sch1.Songs ( SingerId INT64 NOT NULL, AlbumId INT64 NOT NULL, TrackId INT64 NOT NULL, SongName STRING(MAX), ) PRIMARY KEY(SingerId, AlbumId, TrackId), INTERLEAVE IN PARENT sch1.Albums ON DELETE CASCADE; CREATE VIEW sch1.SingerView SQL SECURITY INVOKER AS Select s.FirstName, s.LastName, s.SingerInfo FROM sch1.Singers AS s WHERE s.SingerId = 123456; CREATE VIEW SingerView SQL SECURITY INVOKER AS Select s.FirstName, s.LastName, s.SingerInfo FROM Singers AS s WHERE s.SingerId = 123456;Spanner consente di creare solo un indice che utilizza lo stesso schema della tabella che utilizza l'indice. Dobbiamo assicurarci che i nomi dello schema dell'indice e della tabella siano gli stessi.
PostgreSQL
Esegui l'istruzione
CREATE SCHEMAper creare lo schema denominato, ad esempio:CREATE SCHEMA sch1;Aggiungi oggetti di database nello schema denominato, ad esempio:
CREATE SEQUENCE sch1.sequence BIT_REVERSED_POSITIVE CREATE TABLE sch1.singers( singer_id bigint primary key, album_id bigint default(nextval('sch1.sequence'))) CREATE TABLE sch1.albums(k bigint default(nextval('sch1.sequence'))primary key, album_id bigint) CREATE VIEW sch1.singer_view SQL SECURITY INVOKER AS SELECT * FROM sch1.singers CREATE INDEX index_singers ON TABLE sch1.singers(album_id)Spanner consente la creazione di indici solo nello stesso schema. In Spanner, le istruzioni PostgreSQL lo fanno per impostazione predefinita. Non è necessario utilizzare nomi completi per creare indici negli schemi denominati.
Visualizza gli schemi denominati e gli oggetti correlati nel riquadro Explorer.
Aggiungere il controllo dell'accesso granulare a uno schema denominato
Le seguenti istruzioni DDL aggiungono il controllo dell'accesso granulare a uno schema denominato:
- Il privilegio
USAGEconcede privilegi all'oggetto dello schema. Il privilegioUSAGEviene concesso, per impostazione predefinita, allo schema predefinito. Tuttavia, puoi revocare il privilegioUSAGEper lo schema predefinito. Presta attenzione quando revoca l'accesso perché gli utenti e i ruoli revocati perdono l'accesso a oggetti nello schema predefinito. - L'istruzione
ALLconcede privilegi collettivi su TUTTI gli oggetti di un tipo nello schema. - La parola chiave
DEFAULTsi riferisce allo schema predefinito nelle istruzioni DDL FGAC.
Per accedere a un oggetto in uno schema denominato, devi disporre dell'autorizzazione di utilizzo per lo schema denominato e delle autorizzazioni corrispondenti per gli oggetti di database che utilizzano lo schema. Ad esempio, le seguenti istruzioni concedono le autorizzazioni per leggere da una tabella:
GRANT SELECT ON TABLE TABLE_NAME IN SCHEMA SCHEMA_NAME TO ROLE ROLE_NAME(GoogleSQL e PostgreSQL) concede l'autorizzazione del ruolo per la lettura da una tabella specifica all'interno di uno schema. In alternativa, puoi concedere l'autorizzazione del ruolo per leggere da tutte le tabelle all'interno dello schema utilizzando la parola chiaveALL. Ad esempio,GRANT SELECT ON ALL TABLES IN SCHEMA SCHEMA_NAME TO ROLE ROLE_NAME. L'istruzioneALLprecedente si applica solo alle tabelle presenti al momento dell'esecuzione dell'istruzione.GRANT USAGE ON SCHEMA SCHEMA_NAME TO ROLE ROLE_NAME(GoogleSQL e PostgreSQL) concede al ruolo l'autorizzazione di accedere agli oggetti contenuti nello schema se vengono soddisfatte anche le autorizzazioni dell'oggetto contenuto. Ad esempio, per una tabella in uno schema, devi disporre di "USAGE" nello schema e di "SELECT" nella tabella per leggere i dati della tabella.
Nella console Google Cloud , apri la pagina Spanner.
Seleziona un'istanza dall'elenco.
Seleziona un database.
Nel menu di navigazione, fai clic su Spanner Studio.
Apri una nuova scheda facendo clic su Nuova scheda dell'editor SQL o Nuova scheda.
Nella scheda Editor, inserisci il DDL.
GoogleSQL
Crea il ruolo personalizzato per lo schema denominato. Nell'esempio seguente, utilizziamo
role1erole2.CREATE ROLE role1 CREATE ROLE role2Concedi il ruolo alle tabelle che utilizzano lo schema denominato utilizzando
GRANT ALL. Nel seguente esempio, utilizziamosch1per lo schema denominato erole1per il ruolo.GRANT SELECT ON ALL TABLES IN SCHEMA sch1 TO ROLE role1Concedi l'utilizzo dello schema per i ruoli che hai creato. Nel seguente esempio, concediamo l'utilizzo di
sch1arole1erole2.GRANT USAGE ON SCHEMA sch1 TO ROLE role1, role2PostgreSQL
Crea il ruolo personalizzato per lo schema denominato. Nell'esempio seguente, utilizziamo
role1erole2.CREATE ROLE role1 CREATE ROLE role2Concedi il ruolo alle tabelle che utilizzano lo schema denominato utilizzando
GRANT ALL. Nel seguente esempio, utilizziamosch1per lo schema denominato erole1per il ruolo.GRANT SELECT ON ALL TABLES IN SCHEMA sch1 TO role1Concedi l'utilizzo dello schema per i ruoli che hai creato. Nel seguente esempio, concediamo l'utilizzo di
sch1arole1erole2.GRANT USAGE ON SCHEMA sch1 TO role1, role2
Aggiungere e revocare il controllo dell'accesso granulare a uno schema predefinito
Quando hai schemi denominati, lo schema predefinito è chiamato default. Quando aggiungi o revochi il controllo dell'accesso granulare, devi
utilizzare il nome dello schema default.
Aggiungere il controllo dell'accesso granulare a uno schema predefinito
Per impostazione predefinita, tutti gli utenti e i ruoli dispongono dell'autorizzazione USAGE sullo schema predefinito.
Nella console Google Cloud , apri la pagina Spanner.
Seleziona un'istanza dall'elenco.
Seleziona un database.
Nel menu di navigazione, fai clic su Spanner Studio.
Apri una nuova scheda facendo clic su Nuova scheda dell'editor SQL o Nuova scheda.
Nella scheda Editor, inserisci il DDL.
GoogleSQL
Nell'esempio seguente, concediamo l'accesso a tutte le tabelle a
role1.GRANT SELECT ON ALL TABLES IN SCHEMA default TO ROLE role1PostgreSQL
Nell'esempio seguente, concediamo l'accesso a tutte le tabelle a
role1.GRANT SELECT ON ALL TABLES IN SCHEMA default TO role1
Revocare il controllo dell'accesso granulare a uno schema predefinito
Puoi revocare le autorizzazioni di controllo dell'accesso granulare predefinite nello schema predefinito utilizzando il comando
REVOKE USAGE.
Nella console Google Cloud , apri la pagina Spanner.
Seleziona un'istanza dall'elenco.
Seleziona un database.
Nel menu di navigazione, fai clic su Spanner Studio.
Apri una nuova scheda facendo clic su Nuova scheda dell'editor SQL o Nuova scheda.
Nella scheda Editor, inserisci il DDL.
GoogleSQL
REVOKE USAGE ON SCHEMA DEFAULT FROM ROLE publicPostgreSQL
REVOKE USAGE ON SCHEMA public FROM publicDopo aver eseguito il comando precedente, dobbiamo concedere esplicitamente le autorizzazioni ai ruoli che devono accedere allo schema predefinito. Nell'esempio seguente, concediamo le autorizzazioni a
role1.GoogleSQL
Nell'esempio seguente, concediamo l'accesso allo schema predefinito a
role1.GRANT USAGE ON SCHEMA default to ROLE role1PostgreSQL
Nell'esempio seguente, concediamo l'accesso allo schema predefinito a
role1.GRANT USAGE ON SCHEMA public To role1
Visualizzare gli schemi denominati
- Seleziona un'istanza dall'elenco.
- Seleziona un database.
- Nel menu di navigazione, fai clic su Spanner Studio.
Nel riquadro Explorer, espandi l'elenco a discesa Schemi.
In alternativa, puoi utilizzare SQL per visualizzare tutti gli schemi nella tabella information_schema.schemata.
L'esempio seguente mostra gli schemi dei nomi delle visualizzazioni e i relativi proprietari:
SELECT schema_name, schema_owner
FROM information_schema.schemata
ORDER BY schema_owner
Questa istruzione fornisce un elenco di schemi e proprietari, simile al seguente:
public spanner_admin
products spanner_admin
analytics spanner_admin
logs spanner_admin
pg_catalog spanner_system
information_schema spanner_system
spanner_sys spanner_system
Eliminare uno schema denominato
Il comando DROP SCHEMA (GoogleSQL
e PostgreSQL)
viene utilizzato per eliminare uno schema denominato.
Nella console Google Cloud , apri la pagina Spanner.
Seleziona un'istanza dall'elenco.
Seleziona un database.
Nel menu di navigazione, fai clic su Spanner Studio.
Apri una nuova scheda facendo clic su Nuova scheda dell'editor SQL o Nuova scheda.
Nella scheda Editor, inserisci il DDL.
GoogleSQL
Nel seguente esempio, eliminiamo
sch1.DROP SCHEMA IF EXISTS sch1;PostgreSQL
Nel seguente esempio, eliminiamo
sch1.DROP SCHEMA IF EXISTS sch1;
Passaggi successivi
- Scopri di più sulle best practice per lo schema.
- Scopri di più sulle visualizzazioni.
- Scopri di più sugli indici secondari.
- Scopri di più sulle chiavi esterne.