本頁面說明如何建立、使用及捨棄具名結構定義,以及如何對具名結構定義中的物件套用精細的存取權控制。如要瞭解具名結構定義的總覽資訊,請參閱具名結構定義。
事前準備
如要執行這個頁面的程序,您需要下列項目:
建立具名結構定義
CREATE SCHEMA
指令 (GoogleSQL 和 PostgreSQL) 用於建立具名結構定義。
在 Google Cloud 控制台中,開啟「Spanner」頁面。
從清單中選取執行個體。
選取資料庫。
在導覽選單中,按一下「Spanner Studio」。
按一下「開啟新的 SQL 編輯器分頁」或「開啟新分頁」,開啟新分頁。
在「Editor」(編輯器) 分頁中,輸入 DDL。
GoogleSQL
執行
CREATE SCHEMA
陳述式來建立具名結構定義,例如:CREATE SCHEMA sch1;
在具名結構定義中新增資料庫物件,例如:
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 只允許您建立與使用索引的資料表具有相同結構定義的索引。我們需要確保索引和資料表結構定義名稱相同。
PostgreSQL
執行
CREATE SCHEMA
陳述式來建立具名結構定義,例如:CREATE SCHEMA sch1;
在具名結構定義中新增資料庫物件,例如:
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 只允許在相同結構定義中建立索引。在 Spanner 中,PostgreSQL 陳述式預設會執行這項操作。您不需要使用完整名稱,即可在具名結構定義上建立索引。
在「Explorer」窗格中,查看具名結構定義和相關物件。
為具名結構定義新增精細的存取權控管機制
下列 DDL 陳述式會為具名結構定義新增精細的存取權控管機制:
USAGE
權限會授予結構定義物件權限。預設情況下,系統會將USAGE
權限授予預設結構定義。不過,您可以撤銷預設結構定義的USAGE
權限。撤銷存取權時請務必小心,因為使用者和角色一旦遭到撤銷,就會失去預設結構定義中所有物件的存取權。ALL
陳述式會對結構定義中的某類型「所有」物件執行大量授權作業。DEFAULT
關鍵字是指 FGAC DDL 陳述式中的預設結構定義。
如要存取具名結構定義中的物件,您必須具備該具名結構定義的使用權限,以及使用該結構定義的資料庫物件的相應權限。舉例來說,下列陳述式會授予從資料表讀取資料的權限:
GRANT SELECT ON TABLE TABLE_NAME IN SCHEMA TO ROLE ROLE_NAME
(GoogleSQL 和 PostgreSQL) 可授予角色權限,從結構定義中的特定資料表讀取資料。或者,您也可以使用ALL
關鍵字,授予從結構定義中所有資料表讀取資料的角色權限。例如:GRANT SELECT ON ALL TABLES IN SCHEMA TO ROLE ROLE_NAME
。上述ALL
陳述式只適用於執行陳述式時存在的資料表。GRANT USAGE ON SCHEMA SCHEMA_NAME TO ROLE ROLE_NAME
(GoogleSQL 和 PostgreSQL) 如果角色也符合所含物件的權限,即可存取結構定義中包含的物件。舉例來說,如要讀取結構定義中的資料表,您需要對結構定義具有「USAGE」權限,並對資料表具有「SELECT」權限。
在 Google Cloud 控制台中,開啟「Spanner」頁面。
從清單中選取執行個體。
選取資料庫。
在導覽選單中,按一下「Spanner Studio」。
按一下「開啟新的 SQL 編輯器分頁」或「開啟新分頁」,開啟新分頁。
在「Editor」(編輯器) 分頁中,輸入 DDL。
GoogleSQL
為具名結構定義建立自訂角色。在以下範例中,我們使用
role1
和role2
。CREATE ROLE role1 CREATE ROLE role2
使用
GRANT ALL
,將角色授予使用具名結構定義的資料表。在以下範例中,我們使用sch1
代表具名結構定義,並使用role1
代表角色。GRANT SELECT ON ALL TABLES IN SCHEMA sch1 TO ROLE role1
授予您所建立角色的架構使用權。在下列範例中,我們將
sch1
的使用權授予role1
和role2
。GRANT USAGE ON SCHEMA sch1 TO ROLE role1, role2
PostgreSQL
為具名結構定義建立自訂角色。在以下範例中,我們使用
role1
和role2
。CREATE ROLE role1 CREATE ROLE role2
使用
GRANT ALL
,將角色授予使用具名結構定義的資料表。在以下範例中,我們使用sch1
代表具名結構定義,並使用role1
代表角色。GRANT SELECT ON ALL TABLES IN SCHEMA sch1 TO role1
授予您所建立角色的架構使用權。在下列範例中,我們將
sch1
的使用權授予role1
和role2
。GRANT USAGE ON SCHEMA sch1 TO role1, role2
為預設結構定義新增及撤銷精細的存取權控管機制
如果您有已命名的結構定義,預設結構定義會稱為 default
。新增或撤銷細部存取權控管時,您需要使用 default
結構定義名稱。
在預設結構中新增精細的存取權控管機制
根據預設,所有使用者和角色在預設結構定義中都具有 USAGE
權限。
在 Google Cloud 控制台中,開啟「Spanner」頁面。
從清單中選取執行個體。
選取資料庫。
在導覽選單中,按一下「Spanner Studio」。
按一下「開啟新的 SQL 編輯器分頁」或「開啟新分頁」,開啟新分頁。
在「Editor」(編輯器) 分頁中,輸入 DDL。
GoogleSQL
在下列範例中,我們將所有資料表的存取權授予
role1
。GRANT SELECT ON ALL TABLES IN SCHEMA default TO ROLE role1
PostgreSQL
在下列範例中,我們將所有資料表的存取權授予
role1
。GRANT SELECT ON ALL TABLES IN SCHEMA default TO role1
撤銷預設結構定義的精細存取權控管機制
您可以使用 REVOKE USAGE
指令,撤銷預設結構定義的預設精細存取權控管權限。
在 Google Cloud 控制台中,開啟「Spanner」頁面。
從清單中選取執行個體。
選取資料庫。
在導覽選單中,按一下「Spanner Studio」。
按一下「開啟新的 SQL 編輯器分頁」或「開啟新分頁」,開啟新分頁。
在「Editor」(編輯器) 分頁中,輸入 DDL。
GoogleSQL
REVOKE USAGE ON SCHEMA DEFAULT FROM ROLE public
PostgreSQL
REVOKE USAGE ON SCHEMA public FROM public
執行上一個指令後,我們必須明確授予需要存取預設結構定義的角色權限。在以下範例中,我們將權限授予
role1
。GoogleSQL
在以下範例中,我們將預設結構定義的存取權授予
role1
。GRANT USAGE ON SCHEMA default to ROLE role1
PostgreSQL
在以下範例中,我們將預設結構定義的存取權授予
role1
。GRANT USAGE ON SCHEMA public To role1
查看具名結構定義
- 從清單中選取執行個體。
- 選取資料庫。
- 在導覽選單中,按一下「Spanner Studio」。
在「Explorer」窗格中,展開「結構定義」下拉式清單。
或者,您也可以使用 SQL 查看 information_schema.schemata
資料表中的所有結構定義。
以下範例說明如何查看檢視區塊名稱結構定義及其擁有者:
SELECT schema_name, schema_owner
FROM information_schema.schemata
ORDER BY schema_owner
這項陳述式會提供結構定義和擁有者清單,類似於下列內容:
public spanner_admin
products spanner_admin
analytics spanner_admin
logs spanner_admin
pg_catalog spanner_system
information_schema spanner_system
spanner_sys spanner_system
捨棄具名結構定義
DROP SCHEMA
指令 (GoogleSQL 和 PostgreSQL) 用於捨棄具名結構定義。
在 Google Cloud 控制台中,開啟「Spanner」頁面。
從清單中選取執行個體。
選取資料庫。
在導覽選單中,按一下「Spanner Studio」。
按一下「開啟新的 SQL 編輯器分頁」或「開啟新分頁」,開啟新分頁。
在「Editor」(編輯器) 分頁中,輸入 DDL。
GoogleSQL
在以下範例中,我們會捨棄
sch1
。DROP SCHEMA IF EXISTS sch1;
PostgreSQL
在以下範例中,我們會捨棄
sch1
。DROP SCHEMA IF EXISTS sch1;