이름이 지정된 스키마 만들기 및 관리

이 페이지에서는 이름이 지정된 스키마를 생성, 사용, 삭제하는 방법과 이름이 지정된 스키마의 객체에 세분화된 액세스 제어를 적용하는 방법을 설명합니다. 이름이 지정된 스키마에 대한 개요 정보는 이름이 지정된 스키마를 참조하세요.

시작하기 전에

이 페이지의 절차를 수행하려면 다음이 필요합니다.

이름이 지정된 스키마 만들기

CREATE SCHEMA 명령어(GoogleSQLPostgreSQL)은 명명된 스키마를 만드는 데 사용됩니다.

  1. Google Cloud 콘솔에서 Spanner 페이지를 엽니다.

    Spanner로 이동

  2. 목록에서 인스턴스를 선택합니다.

  3. 데이터베이스를 선택합니다.

  4. 탐색 메뉴에서 Spanner 스튜디오를 클릭합니다.

  5. 새 SQL 편집기 탭 또는 새 탭을 클릭하여 새 탭을 엽니다.

  6. 편집기 탭에서 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 문은 기본적으로 이 작업을 수행합니다. 이름이 지정된 스키마에 인덱스를 생성하기 위해 정규화된 이름을 사용할 필요는 없습니다.

  7. 탐색기 창에서 이름이 지정된 스키마 및 관련 객체를 확인합니다.

이름이 지정된 스키마에 세분화된 액세스 제어 추가

다음 DDL 문은 이름이 지정된 스키마에 세분화된 액세스 제어를 추가합니다.

  • USAGE 권한은 스키마 객체에 대한 권한을 부여합니다. USAGE 권한이 기본 스키마에 기본적으로 부여됩니다. 하지만 기본 스키마에 대해 USAGE 권한을 취소할 수 있습니다. 사용자 및 역할이 취소되면 기본 스키마의 객체에 대한 모든 액세스 권한을 잃게 되므로 액세스 권한을 취소할 때는 주의해야 합니다.
  • ALL 문은 스키마에 있는 특정 유형의 모든 객체에 대해 일괄 부여 권한을 수행합니다.
  • DEFAULT 키워드는 FGAC DDL 문의 기본 스키마를 참조합니다.

이름이 지정된 스키마의 객체에 액세스하려면 이름이 지정된 스키마에 대한 사용 권한과 해당 스키마를 사용하는 데이터베이스 객체에 대한 해당 권한이 있어야 합니다. 다음 문은 이러한 권한을 제공합니다.

  • GRANT ALL (GoogleSQLPostgreSQL)은 이름이 지정된 스키마로 생성된 테이블의 모든 객체에 액세스할 수 있는 권한을 역할에 부여합니다. 이 설명은 해당 시점에 존재하는 객체에만 적용됩니다. 나중에 테이블에 객체를 더 추가하는 경우 해당 객체를 생성할 때 해당 객체에 대한 액세스 권한을 부여해야 합니다.
  • GRANT USAGE (GoogleSQLPostgreSQL)은 스키마에 포함된 객체에 액세스할 수 있는 권한을 역할에 부여합니다. 이를 통해 수혜자가 스키마 내에서 객체를 조회할 수 있습니다.
  1. Google Cloud 콘솔에서 Spanner 페이지를 엽니다.

    Spanner로 이동

  2. 목록에서 인스턴스를 선택합니다.

  3. 데이터베이스를 선택합니다.

  4. 탐색 메뉴에서 Spanner 스튜디오를 클릭합니다.

  5. 새 SQL 편집기 탭 또는 새 탭을 클릭하여 새 탭을 엽니다.

  6. 편집기 탭에서 DDL을 입력합니다.

    GoogleSQL

    이름이 지정된 스키마의 커스텀 역할을 만듭니다. 다음 예에서 role1role2를 사용합니다.

    CREATE ROLE role1
    CREATE ROLE role2
    

    GRANT ALL을 사용하여 이름이 지정된 스키마를 사용하는 테이블에 역할을 부여합니다. 다음 예에서는 이름이 지정된 스키마에 sch1를, 역할에 role1을 사용합니다.

    GRANT SELECT ON ALL TABLES IN SCHEMA sch1 TO ROLE role1
    

    생성한 역할에 스키마의 사용 권한을 부여합니다. 다음 예에서는 sch1에 대한 사용을 role1role2에 부여합니다.

    GRANT USAGE ON SCHEMA sch1 TO ROLE role1, role2
    

    PostgreSQL

    이름이 지정된 스키마의 커스텀 역할을 만듭니다. 다음 예에서 role1role2를 사용합니다.

    CREATE ROLE role1
    CREATE ROLE role2
    

    GRANT ALL을 사용하여 이름이 지정된 스키마를 사용하는 테이블에 역할을 부여합니다. 다음 예에서는 이름이 지정된 스키마에 sch1를, 역할에 role1을 사용합니다.

    GRANT SELECT ON ALL TABLES IN SCHEMA sch1 TO role1
    

    생성한 역할에 스키마의 사용 권한을 부여합니다. 다음 예에서는 sch1에 대한 사용을 role1role2에 부여합니다.

    GRANT USAGE ON SCHEMA sch1 TO role1, role2
    

기본 스키마에 대한 세분화된 액세스 제어 추가 및 취소

이름이 지정된 스키마가 있으면 기본 스키마는 default입니다. 세분화된 액세스 제어를 추가하거나 취소할 때 default 스키마 이름을 사용해야 합니다.

기본 스키마에 세분화된 액세스 제어 추가

기본적으로 모든 사용자와 역할은 기본 스키마에서 USAGE 권한을 가집니다.

  1. Google Cloud 콘솔에서 Spanner 페이지를 엽니다.

    Spanner로 이동

  2. 목록에서 인스턴스를 선택합니다.

  3. 데이터베이스를 선택합니다.

  4. 탐색 메뉴에서 Spanner 스튜디오를 클릭합니다.

  5. 새 SQL 편집기 탭 또는 새 탭을 클릭하여 새 탭을 엽니다.

  6. 편집기 탭에서 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 명령어를 사용하여 기본 스키마의 세분화된 기본 액세스 제어 권한을 취소할 수 있습니다.

  1. Google Cloud 콘솔에서 Spanner 페이지를 엽니다.

    Spanner로 이동

  2. 목록에서 인스턴스를 선택합니다.

  3. 데이터베이스를 선택합니다.

  4. 탐색 메뉴에서 Spanner 스튜디오를 클릭합니다.

  5. 새 SQL 편집기 탭 또는 새 탭을 클릭하여 새 탭을 엽니다.

  6. 편집기 탭에서 DDL을 입력합니다.

    GoogleSQL

    REVOKE USAGE ON SCHEMA DEFAULT FROM ROLE public
    

    PostgreSQL

    REVOKE USAGE ON SCHEMA public FROM public
    
  7. 이전 명령어를 실행한 후에는 기본 스키마에 액세스해야 하는 역할에 명시적으로 권한을 부여해야 합니다. 다음 예에서 role1에 권한을 부여합니다.

    GoogleSQL

    다음 예에서는 role1에 기본 스키마에 대한 액세스 권한을 부여합니다.

    SCHEMA default to ROLE role1
    

    PostgreSQL

    다음 예에서는 role1에 기본 스키마에 대한 액세스 권한을 부여합니다.

    GRANT USAGE ON SCHEMA public To role1
    

이름이 지정된 스키마 보기

  1. 목록에서 인스턴스를 선택합니다.
  2. 데이터베이스를 선택합니다.
  3. 탐색 메뉴에서 Spanner 스튜디오를 클릭합니다.
  4. 탐색기 창에서 스키마 드롭다운 목록을 펼칩니다.

    탐색기의 스키마 목록이 펼쳐진 상태

또는 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 명령어(GoogleSQLPostgreSQL)는 이름이 지정된 스키마를 삭제하는 데 사용됩니다.

  1. Google Cloud 콘솔에서 Spanner 페이지를 엽니다.

    Spanner로 이동

  2. 목록에서 인스턴스를 선택합니다.

  3. 데이터베이스를 선택합니다.

  4. 탐색 메뉴에서 Spanner 스튜디오를 클릭합니다.

  5. 새 SQL 편집기 탭 또는 새 탭을 클릭하여 새 탭을 엽니다.

  6. 편집기 탭에서 DDL을 입력합니다.

    GoogleSQL

    다음 예에서는 sch1를 삭제합니다.

    DROP SCHEMA IF EXISTS sch1;
    

    PostgreSQL

    다음 예에서는 sch1를 삭제합니다.

    DROP SCHEMA IF EXISTS sch1;
    

다음 단계