이 페이지에서는 이름이 지정된 스키마를 생성, 사용, 삭제하는 방법과 이름이 지정된 스키마의 객체에 세분화된 액세스 제어를 적용하는 방법을 설명합니다. 이름이 지정된 스키마에 대한 개요 정보는 이름이 지정된 스키마를 참조하세요.
시작하기 전에
이 페이지의 절차를 수행하려면 다음이 필요합니다.
- 사용자 계정의 Database Adminroles/spanner.databaseAdmin 역할
- 세분화된 액세스 제어 작동 방식 이해하기
이름이 지정된 스키마 만들기
CREATE SCHEMA
명령어(GoogleSQL 및 PostgreSQL)은 명명된 스키마를 만드는 데 사용됩니다.
Google Cloud 콘솔에서 Spanner 페이지를 엽니다.
목록에서 인스턴스를 선택합니다.
데이터베이스를 선택합니다.
탐색 메뉴에서 Spanner 스튜디오를 클릭합니다.
새 SQL 편집기 탭 또는 새 탭을 클릭하여 새 탭을 엽니다.
편집기 탭에서 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 문은 기본적으로 이 작업을 수행합니다. 이름이 지정된 스키마에 인덱스를 생성하기 위해 정규화된 이름을 사용할 필요는 없습니다.
탐색기 창에서 이름이 지정된 스키마 및 관련 객체를 확인합니다.
이름이 지정된 스키마에 세분화된 액세스 제어 추가
다음 DDL 문은 이름이 지정된 스키마에 세분화된 액세스 제어를 추가합니다.
USAGE
권한은 스키마 객체에 대한 권한을 부여합니다.USAGE
권한이 기본 스키마에 기본적으로 부여됩니다. 하지만 기본 스키마에 대해USAGE
권한을 취소할 수 있습니다. 사용자 및 역할이 취소되면 기본 스키마의 객체에 대한 모든 액세스 권한을 잃게 되므로 액세스 권한을 취소할 때는 주의해야 합니다.- 이
ALL
문은 스키마에 있는 특정 유형의 모든 객체에 대해 일괄 부여 권한을 수행합니다. DEFAULT
키워드는 FGAC DDL 문의 기본 스키마를 참조합니다.
이름이 지정된 스키마의 객체에 액세스하려면 이름이 지정된 스키마에 대한 사용 권한과 해당 스키마를 사용하는 데이터베이스 객체에 대한 해당 권한이 있어야 합니다. 다음 문은 이러한 권한을 제공합니다.
GRANT ALL
(GoogleSQL 및 PostgreSQL)은 이름이 지정된 스키마로 생성된 테이블의 모든 객체에 액세스할 수 있는 권한을 역할에 부여합니다. 이 설명은 해당 시점에 존재하는 객체에만 적용됩니다. 나중에 테이블에 객체를 더 추가하는 경우 해당 객체를 생성할 때 해당 객체에 대한 액세스 권한을 부여해야 합니다.GRANT USAGE
(GoogleSQL 및 PostgreSQL)은 스키마에 포함된 객체에 액세스할 수 있는 권한을 역할에 부여합니다. 이를 통해 수혜자가 스키마 내에서 객체를 조회할 수 있습니다.
Google Cloud 콘솔에서 Spanner 페이지를 엽니다.
목록에서 인스턴스를 선택합니다.
데이터베이스를 선택합니다.
탐색 메뉴에서 Spanner 스튜디오를 클릭합니다.
새 SQL 편집기 탭 또는 새 탭을 클릭하여 새 탭을 엽니다.
편집기 탭에서 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 스튜디오를 클릭합니다.
새 SQL 편집기 탭 또는 새 탭을 클릭하여 새 탭을 엽니다.
편집기 탭에서 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 스튜디오를 클릭합니다.
새 SQL 편집기 탭 또는 새 탭을 클릭하여 새 탭을 엽니다.
편집기 탭에서 DDL을 입력합니다.
GoogleSQL
REVOKE USAGE ON SCHEMA DEFAULT FROM ROLE public
PostgreSQL
REVOKE USAGE ON SCHEMA public FROM public
이전 명령어를 실행한 후에는 기본 스키마에 액세스해야 하는 역할에 명시적으로 권한을 부여해야 합니다. 다음 예에서
role1
에 권한을 부여합니다.GoogleSQL
다음 예에서는
role1
에 기본 스키마에 대한 액세스 권한을 부여합니다.SCHEMA default to ROLE role1
PostgreSQL
다음 예에서는
role1
에 기본 스키마에 대한 액세스 권한을 부여합니다.GRANT USAGE ON SCHEMA public To role1
이름이 지정된 스키마 보기
- 목록에서 인스턴스를 선택합니다.
- 데이터베이스를 선택합니다.
- 탐색 메뉴에서 Spanner 스튜디오를 클릭합니다.
탐색기 창에서 스키마 드롭다운 목록을 펼칩니다.
또는 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 스튜디오를 클릭합니다.
새 SQL 편집기 탭 또는 새 탭을 클릭하여 새 탭을 엽니다.
편집기 탭에서 DDL을 입력합니다.
GoogleSQL
다음 예에서는
sch1
를 삭제합니다.DROP SCHEMA IF EXISTS sch1;
PostgreSQL
다음 예에서는
sch1
를 삭제합니다.DROP SCHEMA IF EXISTS sch1;