Questa pagina descrive come creare, utilizzare e rilasciare schemi denominati e come applicare un controllo granulare dell'accesso agli oggetti in schemi denominati. Per informazioni generali su schemi denominati, consulta Schemi denominati.
Prima di iniziare
Per eseguire le procedure in questa pagina, devi disporre di quanto segue:
- Il ruolo Database Admin roles/spanner.databaseAdmin per il 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 tuo DDL.
GoogleSQL
Esegui l'istruzione
CREATE SCHEMA
per creare lo schema denominato, per 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 ti consente di creare solo un indice che utilizza lo stesso schema della tabella che lo utilizza. Dobbiamo assicurarci che i nomi degli schemi di indice e di tabella siano gli stessi.
PostgreSQL
Esegui l'istruzione
CREATE SCHEMA
per creare lo schema denominato, per 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 di creare indici solo nello stesso schema. Nel Le istruzioni Spanner, PostgreSQL eseguono questa operazione predefinito. Non è necessario utilizzare nomi completi per creare indici su schemi denominati.
Visualizza gli schemi denominati e gli oggetti correlati nel riquadro Explorer.
Aggiungi un controllo dell'accesso granulare a uno schema denominato
Le seguenti istruzioni DDL aggiungono il controllo granulare dell'accesso a uno schema denominato:
- Il privilegio
USAGE
concede i privilegi all'oggetto dello schema.USAGE
per impostazione predefinita viene concesso lo schema predefinito. Tuttavia, puoi revocare il privilegioUSAGE
per lo schema predefinito. Presta attenzione quando la revoca dell'accesso perché gli utenti e i ruoli revocati perdono l'accesso a nello schema predefinito. - L'istruzione
ALL
esegue la concessione di privilegi in blocco su TUTTI gli oggetti di un tipo in lo schema. - La parola chiave
DEFAULT
fa riferimento allo schema predefinito nelle istruzioni DDL FGAC.
Per accedere a un oggetto in uno schema denominato, devi disporre dell'autorizzazione di utilizzo nella schema denominato e autorizzazioni corrispondenti per gli oggetti di database che utilizzano tale . Le seguenti istruzioni forniscono queste autorizzazioni:
GRANT ALL
(GoogleSQL e PostgreSQL). concede l'autorizzazione del ruolo per accedere a tutti gli oggetti nella tabella creata con lo schema denominato. Questa istruzione si applica solo agli oggetti esistenti in quel in un determinato momento. Se in seguito aggiungi altri oggetti alla tabella, devi concedere a questi oggetti quando li crei.GRANT USAGE
(GoogleSQL e PostgreSQL). Concede al ruolo l'autorizzazione per accedere agli oggetti contenuti nello schema. In questo modo, il concesso può cercare gli oggetti all'interno dello schema.
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 tuo DDL.
GoogleSQL
Crea un ruolo personalizzato per lo schema denominato. Nell'esempio seguente, utilizziamo
role1
erole2
.CREATE ROLE role1 CREATE ROLE role2
Concedi il ruolo alle tabelle che utilizzano lo schema denominato utilizzando
GRANT ALL
. Nell'esempio seguente, utilizziamosch1
per lo schema denominato erole1
per il ruolo.GRANT SELECT ON ALL TABLES IN SCHEMA sch1 TO ROLE role1
Concedi l'utilizzo dello schema per i ruoli che hai creato. Nell'esempio seguente, concediamo l'utilizzo di
sch1
arole1
erole2
.GRANT USAGE ON SCHEMA sch1 TO ROLE role1, role2
PostgreSQL
Crea il ruolo personalizzato per lo schema denominato. Nell'esempio seguente, utilizziamo
role1
erole2
.CREATE ROLE role1 CREATE ROLE role2
Concedi il ruolo alle tabelle che utilizzano lo schema denominato utilizzando
GRANT ALL
. Nell'esempio seguente, utilizziamosch1
per lo schema denominato erole1
per il ruolo.GRANT SELECT ON ALL TABLES IN SCHEMA sch1 TO role1
Concedi l'utilizzo dello schema per i ruoli che hai creato. Nel seguente Ad esempio, concediamo l'utilizzo su
sch1
arole1
erole2
.GRANT USAGE ON SCHEMA sch1 TO role1, role2
Aggiungi e revoca il controllo dell'accesso granulare a uno schema predefinito
Quando hai definito gli schemi, lo schema predefinito è chiamato default
. Devi usare il nome dello schema default
quando aggiungi o revochi il controllo dell'accesso granulare.
Aggiungi un controllo dell'accesso granulare a uno schema predefinito
Per impostazione predefinita, tutti gli utenti e i ruoli hanno l'autorizzazione 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 tuo DDL.
GoogleSQL
Nell'esempio seguente, concediamo l'accesso a tutte le tabelle a
role1
.GRANT SELECT ON ALL TABLES IN SCHEMA default TO ROLE role1
PostgreSQL
Nell'esempio seguente, concediamo l'accesso a tutte le tabelle a
role1
.GRANT SELECT ON ALL TABLES IN SCHEMA default TO role1
Revoca il controllo dell'accesso granulare a uno schema predefinito
Puoi revocare le autorizzazioni predefinite di controllo dell'accesso granulare sullo schema predefinito utilizzando il metodo
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 tuo DDL.
GoogleSQL
REVOKE USAGE ON SCHEMA DEFAULT FROM ROLE public
PostgreSQL
REVOKE USAGE ON SCHEMA public FROM public
Dopo l'esecuzione del comando precedente, dobbiamo concedere esplicitamente le autorizzazioni i ruoli che devono accedere allo schema predefinito. Nell'esempio seguente, concediamo le autorizzazioni a
role1
.GoogleSQL
Nel seguente esempio, viene concesso l'accesso allo schema predefinito
role1
.SCHEMA default to ROLE role1
PostgreSQL
Nel seguente esempio, viene concesso l'accesso allo schema predefinito
role1
.GRANT USAGE ON SCHEMA public To role1
Visualizza 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 nel
Tabella information_schema.schemata
.
L'esempio seguente mostra come visualizzare gli schemi dei nomi 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, come nell'esempio 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
Rilascia uno schema denominato
Il comando DROP SCHEMA
(GoogleSQL
e PostgreSQL).
viene utilizzato per rilasciare 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 tuo DDL.
GoogleSQL
Nell'esempio seguente, 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 relative agli schemi.
- Scopri di più sulle viste.
- Scopri di più sugli indici secondari.
- Scopri di più sulle chiavi esterne.