AWS 계정 내 데이터에 대한 읽기 액세스 공유 - Amazon Redshift

AWS 계정 내 데이터에 대한 읽기 액세스 공유

AWS 계정 내의 여러 Amazon Redshift 클러스터에서 읽기용으로 데이터를 공유할 수 있습니다.

생산자 클러스터 관리자 또는 데이터베이스 소유자로서 읽기용으로 데이터를 공유하려면
  1. 클러스터에서 datashare를 생성합니다. 자세한 내용은 CREATE DATASHARE 단원을 참조하십시오.

    CREATE DATASHARE salesshare;

    클러스터 슈퍼 사용자와 데이터베이스 소유자는 datashare를 생성할 수 있습니다. 각 datashare는 생성하는 동안 데이터베이스와 연결됩니다. 해당 데이터베이스의 객체만 해당 datashare에서 공유할 수 있습니다. 동일하거나 다른 세부 수준의 객체를 사용하여 동일한 데이터베이스에 여러 datashare를 생성할 수 있습니다. 클러스터가 생성할 수 있는 datashare 수에는 제한이 없습니다.

    Amazon Redshift 콘솔을 사용하여 datashare를 생성할 수도 있습니다. 자세한 내용은 datashare 생성 단원을 참조하십시오.

  2. datashare에 대한 작업 권한을 위임합니다. 자세한 내용은 GRANT 또는 REVOKE을 참조하세요.

    다음 예에서는 salessharedbuser에 권한을 부여합니다.

    GRANT ALTER, SHARE ON DATASHARE salesshare TO dbuser;

    클러스터 슈퍼 사용자와 datashare 소유자는 datashare에 대한 수정 권한을 추가 사용자에게 부여하거나 취소할 수 있습니다.

  3. datashare에 객체를 추가하거나 제거합니다. datashare에 객체를 추가하려면 객체를 추가하기 전에 스키마를 추가합니다. 스키마를 추가할 때 Amazon Redshift는 스키마 아래에 모든 객체를 추가하지 않습니다. 이러한 항목을 명시적으로 추가해야 합니다. 자세한 내용은 ALTER DATASHARE 단원을 참조하십시오.

    ALTER DATASHARE salesshare ADD SCHEMA PUBLIC; ALTER DATASHARE salesshare ADD TABLE public.tickit_sales_redshift; ALTER DATASHARE salesshare ADD ALL TABLES IN SCHEMA PUBLIC;

    datashare에 뷰를 추가할 수도 있습니다.

    CREATE VIEW public.sales_data_summary_view AS SELECT * FROM public.tickit_sales_redshift; ALTER DATASHARE salesshare ADD TABLE public.sales_data_summary_view;

    ALTER DATASHARE를 사용하여 지정된 스키마에서 스키마, 테이블, 뷰 및 함수를 공유합니다. 슈퍼 사용자, datashare 소유자 또는 datashare에 대한 ALTER 또는 ALL 권한이 있는 사용자는 datashare를 변경하여 객체를 추가하거나 제거할 수 있습니다. 사용자는 datashare에서 객체를 추가하거나 제거할 수 있는 권한이 있어야 합니다. 사용자는 객체 소유자이거나 객체에 대한 SELECT, USAGE 또는 ALL 권한도 있어야 합니다.

    GRANT를 사용하여 데이터 공유에 객체를 추가할 수도 있습니다. 방법은 아래 예시와 같습니다.

    GRANT SELECT ON TABLE public.tickit_sales_redshift TO DATASHARE salesshare;

    이 구문은 기능면에서 ALTER DATASHARE salesshare ADD TABLE public.tickit_sales_redshift;와 동일합니다.

    INCLUDENEW 절을 사용하여 지정된 스키마에서 생성된 새 테이블, 뷰 또는 SQL 사용자 정의 함수(UDF)를 datashare에 추가합니다. 슈퍼 사용자만 각 datashare-스키마 페어에 대해 이 속성을 변경할 수 있습니다.

    ALTER DATASHARE salesshare ADD SCHEMA PUBLIC; ALTER DATASHARE salesshare SET INCLUDENEW = TRUE FOR SCHEMA PUBLIC;

    Amazon Redshift 콘솔을 사용하여 datashare에서 객체를 추가하거나 제거할 수도 있습니다. 자세한 내용은 datashare에 datashare 객체 추가, datashare에서 datashare 객체 제거, 계정에 생성된 datashare 편집 섹션을 참조하세요.

  4. datashare에서 소비자를 추가하거나 제거합니다. 다음 예에서는 소비자 클러스터 네임스페이스를 salesshare에 추가합니다. 네임스페이스는 계정에 있는 소비자 클러스터의 네임스페이스 전역 고유 식별자(GUID)입니다. 자세한 내용은 GRANT 또는 REVOKE을 참조하세요.

    GRANT USAGE ON DATASHARE salesshare TO NAMESPACE '13b8833d-17c6-4f16-8fe4-1a018f5ed00d';

    GRANT 문에서 한 명의 datashare 소비자에게만 권한을 부여할 수 있습니다.

    클러스터 슈퍼 사용자와 데이터 공유 객체의 소유자 또는 데이터 공유에 대한 SHARE 권한이 있는 사용자는 데이터 공유에서 소비자를 추가하거나 제거할 수 있습니다. 이를 위해 GRANT USAGE 또는 REVOKE USAGE를 사용합니다.

    현재 보고 있는 클러스터의 네임스페이스를 찾으려면 SELECT CURRENT_NAMESPACE 명령을 사용합니다. 동일한 AWS 계정 내에서 다른 클러스터의 네임스페이스를 찾으려면 Amazon Redshift 콘솔 클러스터 세부 정보 페이지로 이동합니다. 해당 페이지에서 새로 추가된 네임스페이스 필드를 찾습니다.

    Amazon Redshift 콘솔을 사용하여 datashare에 대한 데이터 소비자를 추가하거나 제거할 수도 있습니다. 자세한 내용은 datashare에 데이터 소비자 추가datashare에서 데이터 소비자 제거 섹션을 참조하세요.

  5. (옵션) datashare에 보안 제한을 추가합니다. 다음 예에서는 퍼블릭 IP 액세스 권한이 있는 소비자 클러스터가 datashare를 읽을 수 있음을 보여줍니다. 자세한 내용은 ALTER DATASHARE 단원을 참조하십시오.

    ALTER DATASHARE salesshare SET PUBLICACCESSIBLE = TRUE;

    datashare 생성 후 소비자 유형에 대한 속성을 수정할 수 있습니다. 예를 들어 지정된 datashare의 데이터를 소비하려는 클러스터에 공개적으로 액세스할 수 없도록 정의할 수 있습니다. datashare에 지정된 보안 제한을 충족하지 않는 소비자 클러스터의 쿼리는 쿼리 런타임에 거부됩니다.

    Amazon Redshift 콘솔을 사용하여 datashare를 편집할 수도 있습니다. 자세한 내용은 계정에 생성된 datashare 편집 단원을 참조하십시오.

  6. 클러스터에서 생성된 datashare를 나열하고 datashare의 내용을 살펴봅니다.

    다음 예에서는 salesshare라는 datashare의 정보를 보여줍니다. 자세한 내용은 DESC DATASHARESHOW DATASHARES 섹션을 참조하세요.

    DESC DATASHARE salesshare; producer_account | producer_namespace | share_type | share_name | object_type | object_name | include_new -------------------+--------------------------------------+------------+------------+-------------+--------------------------------+------------------- 123456789012 | 13b8833d-17c6-4f16-8fe4-1a018f5ed00d | OUTBOUND | salesshare | table | public.tickit_users_redshift | 123456789012 | 13b8833d-17c6-4f16-8fe4-1a018f5ed00d | OUTBOUND | salesshare | table | public.tickit_venue_redshift | 123456789012 | 13b8833d-17c6-4f16-8fe4-1a018f5ed00d | OUTBOUND | salesshare | table | public.tickit_category_redshift| 123456789012 | 13b8833d-17c6-4f16-8fe4-1a018f5ed00d | OUTBOUND | salesshare | table | public.tickit_date_redshift | 123456789012 | 13b8833d-17c6-4f16-8fe4-1a018f5ed00d | OUTBOUND | salesshare | table | public.tickit_event_redshift | 123456789012 | 13b8833d-17c6-4f16-8fe4-1a018f5ed00d | OUTBOUND | salesshare | table | public.tickit_listing_redshift | 123456789012 | 13b8833d-17c6-4f16-8fe4-1a018f5ed00d | OUTBOUND | salesshare | table | public.tickit_sales_redshift | 123456789012 | 13b8833d-17c6-4f16-8fe4-1a018f5ed00d | OUTBOUND | salesshare | schema | public | t 123456789012 | 13b8833d-17c6-4f16-8fe4-1a018f5ed00d | OUTBOUND | salesshare | view | public.sales_data_summary_view |

    다음 예에서는 생산자 클러스터의 아웃바운드 datashare를 보여줍니다.

    SHOW DATASHARES LIKE 'sales%';

    출력 결과는 다음과 비슷합니다.

    share_name | share_owner | source_database | consumer_database | share_type | createdate | is_publicaccessible | share_acl | producer_account | producer_namespace -----------+--------------+-----------------+-------------------+------------+---------------------+----------------------+-----------+------------------+--------------------------------------- salesshare | 100 | dev | | OUTBOUND | 2020-12-09 02:27:08 | True | | 123456789012 | 13b8833d-17c6-4f16-8fe4-1a018f5ed00d

    자세한 내용은 DESC DATASHARESHOW DATASHARES 섹션을 참조하세요.

    SVV_DATASHARES, SVV_DATASHARE_CONSUMERS, 및 SVV_DATASHARE_OBJECTS를 사용하여 datashare, datashare 내의 객체 및 datashare 소비자를 볼 수도 있습니다.

  7. datashare를 삭제합니다. 자세한 내용은 DROP DATASHARE 단원을 참조하십시오.

    DROP DATASHARE를 사용하여 언제든지 datashare 객체를 삭제할 수 있습니다. 클러스터 슈퍼 사용자와 datashare 소유자는 datashare를 삭제할 수 있습니다.

    다음 예에서는 salesshare라는 datashare를 삭제합니다.

    DROP DATASHARE salesshare;

    Amazon Redshift 콘솔을 사용하여 datashare를 삭제할 수도 있습니다. 자세한 내용은 계정에 생성된 datashare 삭제 단원을 참조하십시오.

  8. ALTER DATASHARE를 사용하여 datashare에서 언제든지 객체를 제거합니다. REVOKE USAGE ON을 사용하여 특정 소비자에 대한 datashare 권한을 취소합니다. datashare 내의 객체에 대한 USAGE 권한을 취소하고 모든 소비자 클러스터에 대한 액세스를 즉시 중지합니다. 데이터베이스 및 테이블 나열 등의 datashare 나열과 메타데이터 쿼리는 액세스가 취소된 후 공유 객체를 반환하지 않습니다.

    ALTER DATASHARE salesshare REMOVE TABLE public.tickit_sales_redshift;

    Amazon Redshift 콘솔을 사용하여 datashare를 편집할 수도 있습니다. 자세한 내용은 계정에 생성된 datashare 편집 단원을 참조하십시오.

  9. 더 이상 소비자와 데이터를 공유하지 않으려면 네임스페이스에서 datashare에 대한 액세스를 취소합니다.

    REVOKE USAGE ON DATASHARE salesshare FROM NAMESPACE '13b8833d-17c6-4f16-8fe4-1a018f5ed00d';

    Amazon Redshift 콘솔을 사용하여 datashare를 편집할 수도 있습니다. 자세한 내용은 계정에 생성된 datashare 편집 단원을 참조하십시오.

소비자 클러스터 관리자로서 읽기용으로 데이터를 공유하려면
  1. 사용할 수 있는 datashare를 나열하고 datashare의 내용을 봅니다. 자세한 내용은 DESC DATASHARESHOW DATASHARES 섹션을 참조하세요.

    다음 예에서는 지정된 생산자 네임스페이스의 인바운드 datashare 정보를 보여줍니다. 소비자 클러스터 관리자로 DESC DATASHARE를 실행할 때 인바운드 datashare를 보려면 NAMESPACE 옵션을 지정해야 합니다.

    DESC DATASHARE salesshare OF NAMESPACE '13b8833d-17c6-4f16-8fe4-1a018f5ed00d'; producer_account | producer_namespace | share_type | share_name | object_type | object_name | include_new -------------------+--------------------------------------+------------+------------+-------------+---------------------------------+------------------ 123456789012 | 13b8833d-17c6-4f16-8fe4-1a018f5ed00d | INBOUND | salesshare | table | public.tickit_users_redshift | 123456789012 | 13b8833d-17c6-4f16-8fe4-1a018f5ed00d | INBOUND | salesshare | table | public.tickit_venue_redshift | 123456789012 | 13b8833d-17c6-4f16-8fe4-1a018f5ed00d | INBOUND | salesshare | table | public.tickit_category_redshift | 123456789012 | 13b8833d-17c6-4f16-8fe4-1a018f5ed00d | INBOUND | salesshare | table | public.tickit_date_redshift | 123456789012 | 13b8833d-17c6-4f16-8fe4-1a018f5ed00d | INBOUND | salesshare | table | public.tickit_event_redshift | 123456789012 | 13b8833d-17c6-4f16-8fe4-1a018f5ed00d | INBOUND | salesshare | table | public.tickit_listing_redshift | 123456789012 | 13b8833d-17c6-4f16-8fe4-1a018f5ed00d | INBOUND | salesshare | table | public.tickit_sales_redshift | 123456789012 | 13b8833d-17c6-4f16-8fe4-1a018f5ed00d | INBOUND | salesshare | schema | public | 123456789012 | 13b8833d-17c6-4f16-8fe4-1a018f5ed00d | INBOUND | salesshare | view | public.sales_data_summary_view |

    클러스터 슈퍼 사용자만 이 작업을 수행할 수 있습니다. SVV_DATASHARES를 사용하여 datashare를 보고 SVV_DATASHARE_OBJECTS를 사용하여 datashare 내의 객체를 볼 수도 있습니다.

    다음 예에서는 소비자 클러스터의 인바운드 datashare를 보여줍니다.

    SHOW DATASHARES LIKE 'sales%'; share_name | share_owner | source_database | consumer_database | share_type | createdate | is_publicaccessible | share_acl | producer_account | producer_namespace ------------+-------------+-----------------+-------------------+------------+------------+---------------------+-----------+------------------+-------------------------------------- salesshare | | | | INBOUND | | t | | 123456789012 | 13b8833d-17c6-4f16-8fe4-1a018f5ed00d
  2. Datashare 슈퍼 사용자는 datashare를 참조하는 로컬 데이터베이스를 생성할 수 있습니다. 자세한 내용은 데이터베이스 생성 단원을 참조하십시오.

    CREATE DATABASE sales_db FROM DATASHARE salesshare OF NAMESPACE '13b8833d-17c6-4f16-8fe4-1a018f5ed00d';

    로컬 데이터베이스의 객체에 대한 액세스를 보다 세밀하게 제어하려면 데이터베이스를 만들 때 WITH PERMISSIONS 절을 사용하세요. 이렇게 하면 4단계에서 데이터베이스의 객체에 객체 수준 권한을 부여할 수 있습니다.

    CREATE DATABASE sales_db WITH PERMISSIONS FROM DATASHARE salesshare OF NAMESPACE '13b8833d-17c6-4f16-8fe4-1a018f5ed00d';

    SVV_REDSHIFT_DATABASES 뷰를 쿼리하여 datashare에서 생성한 데이터베이스를 볼 수 있습니다. datashare에서 생성된 이러한 데이터베이스는 연결할 수 없으며 읽기 전용입니다. 그러나 소비자 클러스터의 로컬 데이터베이스에 연결하고 데이터베이스 간 쿼리를 수행하여 datashare에서 생성된 데이터베이스의 데이터를 쿼리할 수 있습니다. 기존 datashare에서 생성된 데이터베이스 객체 위에 datashare를 생성할 수 없습니다. 그러나 데이터를 소비자 클러스터의 별도 테이블에 복사하고 필요한 처리를 수행한 다음 생성된 새 객체를 공유할 수 있습니다.

    Amazon Redshift 콘솔을 사용하여 datashare에서 데이터베이스를 생성할 수도 있습니다. 자세한 내용은 datashare에서 데이터베이스 생성 단원을 참조하십시오.

  3. (옵션) 소비자 클러스터에서 가져온 소비자 데이터베이스의 특정 스키마를 참조하고 세분화된 권한을 할당할 외부 스키마를 생성합니다. 자세한 내용은 CREATE EXTERNAL SCHEMA 단원을 참조하십시오.

    CREATE EXTERNAL SCHEMA sales_schema FROM REDSHIFT DATABASE 'sales_db' SCHEMA 'public';
  4. 필요에 따라 소비자 클러스터의 사용자 및 역할에 데이터 공유에서 생성된 데이터베이스 및 스키마 참조에 대한 권한을 부여합니다. 자세한 내용은 GRANT 또는 REVOKE을 참조하세요.

    GRANT USAGE ON DATABASE sales_db TO Bob;
    GRANT USAGE ON SCHEMA sales_schema TO ROLE Analyst_role;

    WITH PERMISSIONS를 사용하지 않고 데이터베이스를 생성한 경우 데이터 공유에서 생성된 전체 데이터베이스에 대한 권한만 사용자와 역할에 할당할 수 있습니다. 경우에 따라 datashare에서 생성된 데이터베이스 객체의 하위 집합에 대한 세분화된 제어가 필요합니다. 이러한 경우 이전 단계에서 설명한 대로 datashare의 특정 스키마를 가리키는 외부 스키마 참조를 생성하고 스키마 수준에서 세분화된 권한을 제공할 수 있습니다.

    또한 공유 객체 위에 후기 바인딩 뷰를 생성하고 이를 사용하여 세분화된 권한을 할당할 수 있습니다. 생산자 클러스터가 필요한 세분성으로 추가 datashare를 생성하도록 할 수도 있습니다.

    2단계에서 WITH PERMISSIONS를 사용하여 데이터베이스를 만든 경우 공유 데이터베이스의 객체에 객체 수준 권한을 할당해야 합니다. USAGE 권한만 있는 사용자는 추가 객체 수준 권한을 부여받을 때까지 WITH PERMISSION을 사용하여 만든 데이터베이스의 객체에 액세스할 수 없습니다.

    GRANT SELECT ON sales_db.public.tickit_sales_redshift to Bob;
  5. datashare의 공유 객체에서 데이터를 쿼리합니다.

    소비자 데이터베이스 및 소비자 클러스터의 스키마에 대한 권한이 있는 사용자와 역할은 모든 공유 객체의 메타데이터를 탐색할 수 있습니다. 또한 소비자 클러스터에서 로컬 객체를 탐색할 수 있습니다. 이를 위해 JDBC 또는 ODBC 드라이버 또는 SVV_ALL 및 SVV_REDSHIFT 뷰를 사용합니다.

    생산자 클러스터의 경우 각 스키마 내의 데이터베이스, 테이블 및 뷰에 많은 스키마가 있을 수 있습니다. 소비자 측의 사용자는 datashare를 통해 사용할 수 있는 객체의 하위 집합만 볼 수 있습니다. 이러한 사용자는 생산자 클러스터에서 전체 메타데이터를 볼 수 없습니다. 이 접근 방식은 datashare로 세분화된 메타데이터 보안 제어를 제공하는 데 도움이 됩니다.

    로컬 클러스터 데이터베이스에 계속 연결합니다. 그러나 이제 세 부분으로 구성된 database.schema.table 표기법을 사용하여 datashare에서 생성된 데이터베이스와 스키마에서도 읽을 수도 있습니다. 사용자에게 표시되는 모든 데이터베이스에 걸쳐 쿼리를 수행할 수 있습니다. 이러한 데이터베이스는 클러스터의 로컬 데이터베이스이거나 datashare에서 생성된 데이터베이스일 수 있습니다. 소비자 클러스터는 datashare에서 생성된 데이터베이스에 연결할 수 없습니다.

    전체 자격을 사용하여 데이터에 액세스할 수 있습니다. 자세한 내용은 데이터베이스 간 쿼리 사용 예 단원을 참조하십시오.

    SELECT * FROM sales_db.public.tickit_sales_redshift ORDER BY 1,2 LIMIT 5; salesid | listid | sellerid | buyerid | eventid | dateid | qtysold | pricepaid | commission | saletime ---------+--------+----------+---------+---------+--------+---------+-----------+------------+--------------------- 1 | 1 | 36861 | 21191 | 7872 | 1875 | 4 | 728.00 | 109.20 | 2008-02-18 02:36:48 2 | 4 | 8117 | 11498 | 4337 | 1983 | 2 | 76.00 | 11.40 | 2008-06-06 05:00:16 3 | 5 | 1616 | 17433 | 8647 | 1983 | 2 | 350.00 | 52.50 | 2008-06-06 08:26:17 4 | 5 | 1616 | 19715 | 8647 | 1986 | 1 | 175.00 | 26.25 | 2008-06-09 08:38:52 5 | 6 | 47402 | 14115 | 8240 | 2069 | 2 | 154.00 | 23.10 | 2008-08-31 09:17:02

    공유 객체에는 SELECT 문만 사용할 수 있습니다. 그러나 다른 로컬 데이터베이스에 있는 공유 객체의 데이터를 쿼리하여 소비자 클러스터에 테이블을 생성할 수 있습니다.

    쿼리 외에도 소비자는 공유 객체에 대한 뷰를 생성할 수 있습니다. 후기 바인딩 뷰나 구체화된 뷰만 지원됩니다. Amazon Redshift는 공유 데이터에 대한 일반 뷰를 지원하지 않습니다. 소비자가 생성하는 뷰는 여러 로컬 데이터베이스 또는 datashare에서 생성된 데이터베이스에 걸쳐 있을 수 있습니다. 자세한 내용은 CREATE VIEW 단원을 참조하십시오.

    // Connect to a local cluster database // Create a view on shared objects and access it. CREATE VIEW sales_data AS SELECT * FROM sales_db.public.tickit_sales_redshift WITH NO SCHEMA BINDING; SELECT * FROM sales_data;