

 Amazon Redshift는 패치 198부터 새 Python UDF 생성을 더 이상 지원하지 않습니다. 기존 Python UDF는 2026년 6월 30일까지 계속 작동합니다. 자세한 내용은 [블로그 게시물](https://aws.amazon.com/blogs/big-data/amazon-redshift-python-user-defined-functions-will-reach-end-of-support-after-june-30-2026/)을 참조하세요.

# AWS 계정에서 데이터 공유
<a name="across-account"></a>

AWS 계정 간에 읽기용으로 데이터를 공유할 수 있습니다. AWS 계정 간 데이터 공유는 한 계정 내 데이터 공유와 유사합니다. 차이점은 AWS 계정 간 데이터 공유에는 양방향 핸드셰이크가 필요하다는 것입니다. 생산자 계정 관리자는 소비자 계정에 datashare 액세스 권한을 부여하거나 어떠한 액세스 권한도 부여하지 않도록 선택할 수 있습니다. 권한이 부여된 datashare를 사용하기 위해 소비자 계정 관리자는 datashare를 연결할 수 있습니다. 관리자는 데이터 공ㅇ를 전체 AWS 계정 계정 또는 소비자 계정의 특정 클러스터와 연결하거나 데이터 공유를 거부할 수 있습니다. 계정 내 datashare에 대한 자세한 내용은 [AWS 계정 내 데이터에 대한 읽기 액세스 공유](within-account.md) 섹션을 참조하세요.

데이터 공유에는 동일한 계정 또는 다른 AWS 계정의 네임스페이스인 데이터 소비자가 있을 수 있습니다. 계정 내 공유와 계정 간 공유를 위해 별도의 datashare를 생성할 필요가 없습니다.

계정 간 datashare의 경우 생산자 및 소비자 클러스터를 모두 암호화해야 합니다.

AWS 계정과 데이터를 공유할 때 생산자 관리자는 AWS 계정과 엔터티로 공유합니다. 소비자 관리자는 소비자 계정의 어떤 네임스페이스가 데이터 공유에 액세스할 수 있는지 결정할 수 있습니다.

**Topics**
+ [생산자 관리자 작업](producer-cluster-admin.md)
+ [소비자 계정 관리자 작업](consumer-account-admin.md)
+ [소비자 관리자 작업](consumer-cluster-admin.md)

# 생산자 관리자 작업
<a name="producer-cluster-admin"></a>

Amazon Redshift로 생산자 클러스터에서 관리 작업을 수행하여 데이터 수집 및 로드 처리를 관리합니다.

**생산자 관리자 또는 데이터베이스 소유자인 경우** - 다음 단계를 따릅니다.

1. 클러스터에 datashare를 생성하고 datashare에 datashare 객체를 추가합니다. datashare를 생성하고 datashare 객체를 datashare에 추가하는 방법에 대한 자세한 단계는 [AWS 계정 내 데이터에 대한 읽기 액세스 공유](within-account.md) 섹션을 참조하세요. CREATE DATASHARE 및 ALTER DATASHARE에 대한 자세한 내용은 [CREATE DATASHARE](r_CREATE_DATASHARE.md) 및 [ALTER DATASHARE](r_ALTER_DATASHARE.md) 섹션을 참조하세요.

   다음 예에서는 datashare `salesshare`에 다른 datashare 객체를 추가합니다.

   ```
   -- Add schema to datashare
   ALTER DATASHARE salesshare ADD SCHEMA PUBLIC;
   
   -- Add table under schema to datashare
   ALTER DATASHARE salesshare ADD TABLE public.tickit_sales_redshift;
   
   -- Add view to datashare 
   ALTER DATASHARE salesshare ADD TABLE public.sales_data_summary_view;
   
   -- Add all existing tables and views under schema to datashare (does not include future table)
   ALTER DATASHARE salesshare ADD ALL TABLES in schema public;
   ```

   Amazon Redshift 콘솔을 사용하여 datashare를 생성하거나 편집할 수도 있습니다. 자세한 내용은 [데이터 공유 만들기](datashare-creation.md#create-datashare-console) 및 [계정에 생성된 datashare 편집](manage-datashare-existing-console.md#edit-datashare-console) 섹션을 참조하세요.

1. datashare에 대한 작업 권한을 위임합니다. 자세한 내용은 [GRANT](r_GRANT.md) 또는 [REVOKE](r_REVOKE.md) 섹션을 참조하세요.

   다음 예에서는 `salesshare`의 `dbuser`에 권한을 부여합니다.

   ```
   GRANT ALTER, SHARE ON DATASHARE salesshare TO dbuser;
   ```

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

1. datashare에서 소비자를 추가하거나 제거합니다. 다음 예에서는 `salesshare`에 AWS 계정 ID를 추가합니다. 자세한 내용은 [GRANT](r_GRANT.md) 또는 [REVOKE](r_REVOKE.md) 섹션을 참조하세요.

   ```
   GRANT USAGE ON DATASHARE salesshare TO ACCOUNT '123456789012';
   ```

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

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

   Amazon Redshift 콘솔을 사용하여 datashare에 대한 데이터 소비자를 추가하거나 제거할 수도 있습니다. 자세한 내용은 [데이터 공유에 데이터 소비자 추가](datashare-creation.md#add-data-consumer-console) 및 [datashare에서 데이터 소비자 제거](manage-datashare-existing-console.md#remove-data-consumer-console) 섹션을 참조하세요.

1. (옵션) 더 이상 소비자와 데이터를 공유하지 않으려면 AWS 계정에서 datashare에 대한 액세스를 취소합니다.

   ```
   REVOKE USAGE ON DATASHARE salesshare FROM ACCOUNT '123456789012';
   ```

**생산자 계정 관리자인 경우** 다음 절차를 따릅니다.

AWS 계정에 사용 권한을 부여한 후 datashare 상태는 `pending_authorization`입니다. 생산자 계정 관리자는 Amazon Redshift 콘솔을 사용하여 datashare 권한을 부여하고 데이터 소비자를 선택해야 합니다.

[https://console.aws.amazon.com/redshiftv2/](https://console.aws.amazon.com/redshiftv2/)에 로그인합니다. 그런 다음 datashare에 대한 액세스 권한을 부여하거나 제거할 데이터 소비자를 선택합니다. 권한이 부여된 데이터 소비자는 datashare에 대한 작업을 수행하라는 알림을 받습니다. 네임스페이스를 데이터 소비자로 추가하는 경우 권한 부여를 수행할 필요가 없습니다. 권한을 부여 받은 데이터 소비자는 datashare 객체에 액세스하고 소비자 데이터베이스를 생성하여 데이터를 쿼리할 수 있습니다. 자세한 내용은 [datashare에서 권한 부여 또는 제거](authorize-datashare-console.md) 섹션을 참조하세요.

## 데이터에 대한 계정 간 쓰기 권한 공유
<a name="within-account-multi-warehouse-consumer-associate"></a>

Amazon Redshift를 사용하면 AWS 계정 전반에서 데이터를 공유하고 쓰기 권한을 부여하여 팀 또는 조직 간의 협업 및 데이터 공유를 지원할 수 있습니다. 계정 간 데이터 공유를 통해 데이터베이스, 스키마 및 테이블을 만들고 관리하는 데이터 공급자 계정을 설정할 수 있으며, 이 계정에서는 데이터 소비자 계정과 안전하게 공유할 수 있습니다. 다음 섹션에서는 계정 간 데이터 공유를 구성하고 Amazon Redshift에서 쓰기 액세스 권한을 부여하는 프로세스를 보여 줍니다.

# 소비자 계정 관리자 작업
<a name="consumer-account-admin"></a>

Amazon Redshift로 소비자 계정을 관리하고 데이터 웨어하우징 리소스에 대한 액세스를 제어합니다.

**소비자 계정 관리자인 경우** 다음 절차를 따릅니다.

다른 계정에서 공유되는 하나 이상의 데이터 공유를 전체 AWS 계정 또는 계정의 특정 네임스페이스와 연결하려면 Amazon Redshift 콘솔을 사용합니다.

[https://console.aws.amazon.com/redshiftv2/](https://console.aws.amazon.com/redshiftv2/)에 로그인합니다. 그런 다음 다른 계정에서 공유되는 하나 이상의 데이터 공유를 전체 AWS 계정 계정 또는 계정별 네임스페이스와 연결합니다. 자세한 내용은 [Amazon Redshift에서 다른 AWS 계정의 데이터 공유 연결](writes-associating.md) 섹션을 참조하세요.

AWS 계정 또는 특정 네임스페이스가 연결된 후 데이터 공유를 사용할 수 있게 됩니다. datashare 연결을 언제든지 변경할 수도 있습니다. 개별 네임스페이스에서 AWS 계정으로 연결을 변경하면 Amazon Redshift가 네임스페이스를 AWS 계정 정보로 덮어씁니다. AWS 계정에서 특정 네임스페이스로 연결을 변경할 때 Amazon Redshift는 AWS 계정 정보를 네임스페이스 정보로 덮어씁니다. 계정의 모든 네임스페이스는 데이터에 액세스할 수 있습니다.

# 소비자 관리자 작업
<a name="consumer-cluster-admin"></a>

Amazon Redshift로 소비자 클러스터에서 관리 작업을 수행하여 데이터 수집 및 로드 처리를 관리합니다.

**소비자 관리자인 경우** - 다음 단계를 따릅니다.

1. 사용할 수 있는 datashare를 나열하고 datashare의 내용을 봅니다. 데이터 공유의 내용은 생산자 관리자가 데이터 공유 권한을 부여받고 소비자 관리자가 데이터 공유를 수락하고 연결한 경우에만 사용할 수 있습니다. 자세한 내용은 [DESC DATASHARE](r_DESC_DATASHARE.md) 및 [SHOW DATASHARES](r_SHOW_DATASHARES.md) 섹션을 참조하세요.

   다음 예에서는 지정된 생산자 네임스페이스의 인바운드 datashare 정보를 보여줍니다. 소비자 관리자로 DESC DATAHSARE를 실행할 때 인바운드 데이터 공유를 보려면 NAMESPACE와 계정 ID를 지정해야 합니다. 아웃바운드 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    | 'dd8772e1-d792-4fa4-996b-1870577efc0d'
   ```

   ```
   DESC DATASHARE salesshare OF ACCOUNT '123456789012' NAMESPACE 'dd8772e1-d792-4fa4-996b-1870577efc0d';
   
   
    producer_account |          producer_namespace          | share_type | share_name | object_type |           object_name
   ------------------+--------------------------------------+------------+------------+-------------+---------------------------------
    123456789012     | dd8772e1-d792-4fa4-996b-1870577efc0d | INBOUND    | salesshare | table       | public.tickit_users_redshift
    123456789012     | dd8772e1-d792-4fa4-996b-1870577efc0d | INBOUND    | salesshare | table       | public.tickit_venue_redshift
    123456789012     | dd8772e1-d792-4fa4-996b-1870577efc0d | INBOUND    | salesshare | table       | public.tickit_category_redshift
    123456789012     | dd8772e1-d792-4fa4-996b-1870577efc0d | INBOUND    | salesshare | table       | public.tickit_date_redshift
    123456789012     | dd8772e1-d792-4fa4-996b-1870577efc0d | INBOUND    | salesshare | table       | public.tickit_event_redshift
    123456789012     | dd8772e1-d792-4fa4-996b-1870577efc0d | INBOUND    | salesshare | table       | public.tickit_listing_redshift
    123456789012     | dd8772e1-d792-4fa4-996b-1870577efc0d | INBOUND    | salesshare | table       | public.tickit_sales_redshift
    123456789012     | dd8772e1-d792-4fa4-996b-1870577efc0d | INBOUND    | salesshare | schema      | public
   (8 rows)
   ```

   클러스터 슈퍼 사용자만 이 작업을 수행할 수 있습니다. SVV\$1DATASHARES를 사용하여 datashare를 보고 SVV\$1DATASHARE\$1OBJECTS를 사용하여 datashare 내의 객체를 볼 수도 있습니다.

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

   ```
   SELECT * FROM SVV_DATASHARES WHERE share_name 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      | 'dd8772e1-d792-4fa4-996b-1870577efc0d'
   ```

   ```
   SELECT * FROM SVV_DATASHARE_OBJECTS WHERE share_name LIKE 'sales%';
    share_type | share_name | object_type |           object_name           | producer_account |          producer_namespace
   ------------+------------+-------------+---------------------------------+------------------+--------------------------------------
    INBOUND    | salesshare | table       | public.tickit_users_redshift    | 123456789012     | dd8772e1-d792-4fa4-996b-1870577efc0d
    INBOUND    | salesshare | table       | public.tickit_venue_redshift    | 123456789012     | dd8772e1-d792-4fa4-996b-1870577efc0d
    INBOUND    | salesshare | table       | public.tickit_category_redshift | 123456789012     | dd8772e1-d792-4fa4-996b-1870577efc0d
    INBOUND    | salesshare | table       | public.tickit_date_redshift     | 123456789012     | dd8772e1-d792-4fa4-996b-1870577efc0d
    INBOUND    | salesshare | table       | public.tickit_event_redshift    | 123456789012     | dd8772e1-d792-4fa4-996b-1870577efc0d
    INBOUND    | salesshare | table       | public.tickit_listing_redshift  | 123456789012     | dd8772e1-d792-4fa4-996b-1870577efc0d
    INBOUND    | salesshare | table       | public.tickit_sales_redshift    | 123456789012     | dd8772e1-d792-4fa4-996b-1870577efc0d
    INBOUND    | salesshare | schema      | public                          | 123456789012     | dd8772e1-d792-4fa4-996b-1870577efc0d
   (8 rows)
   ```

1. datashare를 참조하는 로컬 데이터베이스를 생성합니다. datashare에서 데이터베이스를 생성할 때 NAMESPACE와 계정 ID를 지정합니다. 자세한 내용은 [데이터베이스 생성](r_CREATE_DATABASE.md) 섹션을 참조하세요.

   ```
   CREATE DATABASE sales_db FROM DATASHARE salesshare OF ACCOUNT '123456789012' NAMESPACE 'dd8772e1-d792-4fa4-996b-1870577efc0d';
   ```

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

   ```
   CREATE DATABASE sales_db WITH PERMISSIONS FROM DATASHARE salesshare OF ACCOUNT '123456789012' NAMESPACE 'dd8772e1-d792-4fa4-996b-1870577efc0d';
   ```

   [SVV\$1REDSHIFT\$1DATABASES](r_SVV_REDSHIFT_DATABASES.md) 뷰를 쿼리하여 datashare에서 생성한 데이터베이스를 볼 수 있습니다. 그러나 소비자 클러스터의 로컬 데이터베이스에 연결하고 데이터베이스 간 쿼리를 수행하여 데이터 공유에서 만들어진 데이터베이스의 데이터를 쿼리할 수 있습니다. 기존 datashare에서 생성된 데이터베이스 객체 위에 datashare를 생성할 수 없습니다. 그러나 데이터를 소비자 클러스터의 별도 테이블에 복사하고 필요한 처리를 수행한 다음 생성된 새 객체를 공유할 수 있습니다.

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

   ```
   CREATE EXTERNAL SCHEMA sales_schema FROM REDSHIFT DATABASE 'sales_db' SCHEMA 'public';
   ```

1. 필요에 따라 소비자 클러스터의 사용자 또는 역할에 데이터 공유에서 생성된 데이터베이스 및 스키마 참조에 대한 권한을 부여합니다. 자세한 내용은 [GRANT](r_GRANT.md) 또는 [REVOKE](r_REVOKE.md) 섹션을 참조하세요.

   ```
   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;
   ```

1. datashare의 공유 객체에서 데이터를 쿼리합니다.

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

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

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

   전체 자격을 사용하여 데이터에 액세스할 수 있습니다. 자세한 내용은 [데이터베이스 간 쿼리 예제](cross-database_example.md) 섹션을 참조하세요.

   ```
   SELECT * FROM sales_db.public.tickit_sales_redshift;
   ```

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

   쿼리를 수행하는 것 외에도 소비자는 공유 객체에 대한 보기를 생성할 수 있습니다. 후기 바인딩 보기와 구체화된 보기만 지원됩니다. Amazon Redshift는 공유 데이터에 대한 일반 뷰를 지원하지 않습니다. 소비자가 생성하는 뷰는 여러 로컬 데이터베이스 또는 datashare에서 생성된 데이터베이스에 걸쳐 있을 수 있습니다. 자세한 내용은 [CREATE VIEW](r_CREATE_VIEW.md) 섹션을 참조하세요.

   ```
   // 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;
   ```