내용으로 건너뛰기

Amazon Redshift에서 외부 스키마에 액세스 권한을 부여하려면 어떻게 해야 합니까?

4분 분량
0

사용자가 Amazon Redshift 클러스터의 외부 스키마에 있는 객체에 액세스할 수 없습니다.

간략한 설명

Amazon Redshift에서 외부 스키마를 사용하는 경우 다음과 같은 오류 메시지가 표시될 수 있습니다.

  • "Permission denied"
  • "Operation is not supported"
  • "External tables are not supported in views"

잘못된 AWS Lake Formation 권한 구성으로 인해 Amazon Redshift Spectrum에서 오류가 발생할 수도 있습니다. 이 문제를 해결하려면 테이블 수준이 아닌 외부 스키마에 권한을 부여해야 합니다.

해결 방법

외부 스키마의 객체에 액세스할 수 있는 권한 부여

Amazon Redshift 사용자에게 외부 스키마의 객체에 액세스할 권한이 없는 경우 다음 오류가 발생할 수 있습니다.

"ERROR: permission denied for schema external_schema_name"

사용자에게 권한을 부여하려면 다음 단계를 완료하십시오.

  1. Amazon Redshift 콘솔을 엽니다.

  2. 슈퍼 사용자로 로그인합니다.

  3. 다음 명령을 실행하여 액세스하려는 외부 스키마에 대한 사용자 권한을 확인합니다.

    SELECT *
    FROM SVV_SCHEMA_PRIVILEGES
    WHERE identity_name = 'name_of_the_user/role/group' AND namespace_name = 'external_schema_name';

    참고: name_of_the_user/role/group을 액세스 권한을 부여하려는 사용자의 이름, 역할 또는 그룹으로 바꾸십시오. external_schema_name을 외부 스키마의 이름으로 바꾸십시오.

    위 명령이 USAGE 권한 유형을 반환하지 않는 경우 사용자, 역할 또는 그룹에 외부 스키마를 쿼리할 권한이 없는 것입니다.

  4. 다음 GRANT 명령 중 하나를 실행하여 외부 스키마를 사용할 권한을 부여합니다.

    GRANT USAGE ON SCHEMA external_schema_name TO user_name;
    GRANT USAGE ON SCHEMA external_schema_name TO role role_name;
    GRANT USAGE ON SCHEMA external_schema_name TO group group_name;

    참고: external_schema_name을 외부 스키마의 이름으로 바꾸십시오. user_name, role_name 또는 group_name을 액세스 권한을 부여하려는 사용자, 역할 또는 그룹으로 바꾸십시오.

데이터 공유 권한 문제 해결

외부 스키마의 객체에 권한을 부여하려고 하면 다음과 같은 오류 메시지가 표시될 수 있습니다.

"ERROR: Operation is not supported through datashares".

이 오류는 다음과 같은 상황에서 발생합니다.

  • 외부 스키마는 데이터 공유에서 생성한 데이터베이스에서 가져온 것입니다.
  • 원래 데이터 공유에 WITH PERMISSIONS 절이 포함되지 않았습니다.

이 문제를 해결하려면 WITH PERMISSION 절을 사용하여 데이터 공유에서 데이터베이스를 다시 생성하십시오.

다음 단계를 완료하십시오.

  1. 다음 명령을 실행하여 기존 데이터 공유 데이터베이스를 삭제합니다.

    DROP database database_created_from_datashare_name;

    참고: database_created_from_datashare_name을 데이터베이스 이름으로 바꾸십시오.

  2. 다음 명령을 실행하여 데이터베이스를 다시 생성합니다.

    CREATE DATABASE database_created_from_datashare_name
    WITH PERMISSIONS
    FROM DATASHARE 'datashare_name'
    OF ACCOUNT 'account_number'
    NAMESPACE 'namespace_uuid';

    참고: database_created_from_datashare_name을 데이터베이스 이름으로 바꾸고 datashare_name을 데이터 공유 이름으로 바꾸십시오. account number를 AWS 계정 번호로, namespace_uuid를 네임스페이스의 UUID(범용 고유 식별자)로 바꾸십시오.

  3. 다음 명령을 실행하여 외부 스키마를 생성합니다.

    CREATE EXTERNAL SCHEMA external_schema_name
    FROM REDSHIFT DATABASE database_created_from_datashare_name
    SCHEMA schema_in_database_created_from_datashare;

    참고: external_schema_name을 외부 스키마의 이름으로 바꾸고 database_created_from_datashare_name을 데이터베이스 이름으로 바꾸십시오. schema_in_database_created_from_datashare를 데이터 공유에서 생성한 스키마의 이름으로 바꾸십시오.

  4. 다음 명령을 실행하여 사용 권한을 부여합니다.

    GRANT USAGE on SCHEMA external_schema_name to user_name;
    GRANT USAGE ON SCHEMA database_created_from_datashare_name.schema_in_datashare_name TO user_name;

    참고: external_schema_name을 외부 스키마 이름으로 바꾸십시오. user_name을 사용 권한을 부여하려는 사용자의 이름으로 바꾸십시오. database_created_from_datashare_name을 데이터 공유에서 생성한 데이터베이스 이름으로 바꾸고 schema_in_datashare_name을 스키마 이름으로 바꾸십시오.

  5. 다음 SELECT 명령을 실행하여 특정 테이블에 액세스할 수 있는 권한을 부여합니다.

    GRANT SELECT ON
    TABLE database_created_from_datashare_name.schema_in_datashare_name.table_name
    TO user_name;

    참고: database_created_from_datashare_name을 데이터 공유에서 생성한 데이터베이스 이름으로 바꾸고 schema_in_datashare_name을 스키마 이름으로 바꾸십시오. table_name을 테이블 이름으로 바꾸고 user_name을 사용자 이름으로 바꾸십시오.

    스키마의 모든 테이블에 대한 액세스 권한을 부여하려면 다음 명령을 실행합니다.

    GRANT SELECT ON
    ALL TABLES IN SCHEMA database_created_from_datashare_name.schema_in_datashare_name
    TO user_name;

    참고: database_created_from_datashare_name을 데이터 공유에서 생성한 데이터베이스 이름으로 바꾸고 schema_in_datashare_name을 스키마 이름으로 바꾸십시오. user_name을 사용자 이름으로 바꾸십시오.

Lake Formation 권한 문제가 있는 외부 스키마 해결

AWS Glue Data Catalog에 대해 Lake Formation을 활성화했는지, Amazon Redshift 클러스터의 AWS Identity and Access Management(IAM) 역할에 필요한 AWS Glue Data Catalog 권한이 있는지 확인하십시오.

자세한 내용은 Redshift Spectrum 및 AWS Lake FormationLake Formation 권한 관리를 참조하십시오.

외부 스키마를 사용하여 세분화된 액세스 제어 부여

Lake Formation 또는 역할 체인을 사용하여 Amazon Redshift Spectrum에서 세분화된 액세스 제어를 부여하십시오. 스키마, 테이블 또는 열 수준에서 권한을 부여할 수 있습니다.

자세한 내용은 역할 체인을 사용하여 Amazon Redshift IAM 사용자 및 그룹에 대한 Amazon Redshift Spectrum 외부 테이블 액세스 제한Data Catalog 리소스에 대한 권한 부여를 참조하십시오.

외부 테이블이 있는 뷰를 생성할 때 WITH NO SCHEMA BINDING 절 사용

외부 테이블을 참조하는 뷰를 생성할 때 다음과 같은 오류 메시지가 표시될 수 있습니다.

"ERROR: External tables are not supported in views".

이 문제를 해결하려면 다음 명령을 실행하여 WITH NO SCHEMA BINDING 절을 사용해 뷰를 생성하십시오.

CREATE OR REPLACE VIEW view_name AS
SELECT * FROM external_schema_name.external_table_name
WITH NO SCHEMA BINDING ;

참고: external_schema_name을 외부 스키마 이름으로 바꾸고 external_table_name을 외부 테이블 이름으로 바꾸십시오.

관련 정보

SVV_EXTERNAL_SCHEMAS

데이터 공유와 함께 CREATE DATABASE를 사용하기 위한 파라미터

파라미터

AWS 공식업데이트됨 일 년 전