

 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/)을 참조하세요.

# RLS 정책 사용 고려 사항 및 제한 사항
<a name="t_rls_usage"></a>

## 고려 사항
<a name="t_rls_considerations"></a>

다음은 RLS 정책 작업에 대한 고려 사항입니다.
+ Amazon Redshift는 SELECT, UPDATE 또는 DELETE 문에 RLS 정책을 적용합니다.
+ Amazon Redshift는 INSERT, COPY, ALTER TABLE APPEND 문에 RLS 정책을 적용하지 않습니다.
+ RLS 정책은 테이블, 뷰, 지연 바인딩 뷰(LBV) 및 구체화된 뷰(MV)에 연결될 수 있습니다.
+ 행 수준 보안은 열 수준 보안과 함께 작동하며 데이터를 보호합니다.
+ 소스 관계에 대해 RLS가 활성화되면 Amazon Redshift는 수퍼유저, 시스템 권한 IGNORE RLS 또는 sys:secadmin 역할이 명시적으로 부여된 사용자에 대해 ALTER TABLE APPEND 문을 지원합니다. 이 경우 ALTER TABLE APPEND 문을 실행하여 기존 소스 테이블에서 데이터를 이동하는 방법으로 대상 테이블에 행을 추가할 수 있습니다. Amazon Redshift는 소스 관계의 모든 튜플을 대상 관계로 이동합니다. 대상 관계의 RLS 상태는 ALTER TABLE APPEND 문에는 영향을 미치지 않습니다.
+ 다른 데이터 웨어하우스 시스템에서 손쉽게 마이그레이션하려면, 변수 이름 및 값을 지정하여 연결에 대한 사용자 지정 세션 컨텍스트 변수를 설정하고 검색하면 됩니다.

  다음 예는 행 수준 보안(RLS) 정책에 대한 세션 컨텍스트 변수를 설정합니다.

  ```
  -- Set a customized context variable.
  SELECT set_config(‘app.category’, ‘Concerts’, FALSE);
  
  -- Create a RLS policy using current_setting() to get the value of a customized context variable.
  CREATE RLS POLICY policy_categories
  WITH (catgroup VARCHAR(10)) 
  USING (catgroup = current_setting('app.category', FALSE));
  
  -- Set correct roles and attach the policy on the target table to one or more roles.
  ATTACH RLS POLICY policy_categories ON tickit_category_redshift TO ROLE analyst, ROLE dbadmin;
  ```

  사용자 지정 세션 컨텍스트 변수를 설정 및 검색하는 방법을 자세히 알아보려면 [SET](r_SET.md), [SET\$1CONFIG](r_SET_CONFIG.md), [SHOW](r_SHOW.md), [CURRENT\$1SETTING](r_CURRENT_SETTING.md), [reset](r_RESET.md) 섹션으로 이동하세요. 일반적인 서버 구성 수정 방법을 자세히 알아보려면 [서버 구성 수정](cm_chap_ConfigurationRef.md#t_Modifying_the_default_settings) 섹션으로 이동하세요.
**중요**  
 RLS 정책 내에서 세션 컨텍스트 변수를 사용하는 경우 보안 정책은 정책을 간접 호출하는 사용자 또는 역할에 따라 달라집니다. RLS 정책에서 세션 컨텍스트 변수를 사용할 때는 보안 취약성이 발생하지 않도록 주의하세요.
+ DECLARE와 FETCH 사이 또는 후속 FETCH 문 사이에서 SET SESSION AUTHORIZATION을 사용하여 세션 사용자를 변경하면 DECLARE 시간에 사용자 정책을 기반으로 이미 준비된 계획이 새로 고쳐지지 않습니다. 커서가 RLS 보호 테이블과 함께 사용되는 경우 세션 사용자를 변경하지 마세요.
+ 뷰 객체 내의 기본 객체가 RLS로 보호되는 경우 쿼리를 실행하는 사용자에게 연결된 정책이 각 기본 객체에 적용됩니다. 이는 뷰 기본 객체에 대해 뷰 소유자의 권한을 확인하는 객체 수준 권한 확인과 다릅니다. EXPLAIN 계획 출력에서 쿼리의 RLS 보호 관계를 볼 수 있습니다.
+ 사용자에게 연결된 관계의 RLS 정책에서 사용자 정의 함수 (UDF) 를 참조하는 경우 사용자는 UDF에 대한 EXECUTE 권한이 있어야 관계를 쿼리할 수 있습니다.
+  행 수준 보안은 쿼리 최적화를 제한할 수 있습니다. 대규모 데이터 세트에 RLS로 보호되는 뷰를 배포하기 전에 쿼리 성능을 신중하게 평가하는 것이 좋습니다.
+  지연 바인딩 뷰에 적용된 행 수준 보안 정책은 페더레이션된 테이블로 푸시될 수 있습니다. 이러한 RLS 정책은 외부 처리 엔진 로그에서 볼 수 있습니다.

## 제한 사항
<a name="t_rls_limitations"></a>

RLS 정책과 관련한 작업을 할 때의 제한 사항은 다음과 같습니다.
+ RLS 정책은 외부 테이블 및 다른 여러 관계 유형에 연결할 수 없습니다. 자세한 내용은 [ATTACH RLS POLICY](r_ATTACH_RLS_POLICY.md) 섹션을 참조하세요.
+ Amazon Redshift는 복잡한 조인이 있는 조회를 사용하는 특정 RLS 정책에 대해 SELECT 문을 지원하지만 UPDATE 또는 DELETE 문은 지원하지 않습니다. UPDATE 또는 DELETE 문의 경우 Amazon Redshift는 다음 오류를 반환합니다.

  ```
  ERROR: One of the RLS policies on target relation is not supported in UPDATE/DELETE.
  ```
+ 사용자에게 연결된 관계의 RLS 정책에서 사용자 정의 함수(UDF)를 참조할 때마다, 사용자는 UDF에 대한 EXECUTE 권한이 있어야 관계를 쿼리할 수 있습니다.
+ 연관된 하위 쿼리는 지원되지 않습니다. Amazon Redshift는 다음 오류를 반환합니다.

  ```
  ERROR: RLS policy could not be rewritten.
  ```
+ Amazon Redshift Redshift는 RLS와의 데이터 공유를 지원하지 않습니다. 관계에서 데이터 공유에 대한 RLS를 끄지 않은 경우, 다음 오류가 표시되면서 소비자 클러스터에서 쿼리가 실패하게 됩니다.

  ```
  RLS-protected relation "rls_protected_table" cannot be accessed via datasharing query.
  ```

  ROW LEVEL SECURITY OFF FOR DATASHARES 파라미터와 함께 ALTER TABLE 명령을 사용하여 데이터 공유에 대한 RLS를 해제할 수 있습니다. 테이블 변경을 사용하여 RLS를 활성화 또는 비활성화하는 방법에 대한 자세한 내용은 [ALTER TABLE](r_ALTER_TABLE.md) 섹션을 참조하세요.
+ 데이터베이스 간 쿼리에서 Amazon Redshift는 RLS 보호 관계에 대한 읽기를 차단합니다. IGNORE RLS 권한이 있는 사용자는 데이터베이스 간 쿼리를 사용하여 보호된 관계에 액세스할 수 있습니다. IGNORE RLS 권한이 없는 사용자가 데이터베이스 간 쿼리를 통해 RLS 보호 관계에 액세스하면 다음 오류가 나타납니다.

  ```
  RLS-protected relation "rls_protected_table" cannot be accessed via cross-database query.
  ```
+ ALTER RLS POLICY는 USING(using\$1predicate\$1exp) 절을 사용하여 RLS 정책을 수정하는 것만 지원합니다. ALTER RLS POLICY를 실행할 때는 WITH 절을 사용하여 RLS 정책을 수정할 수 없습니다.
+ 다음 구성 옵션의 값이 세션의 기본값과 일치하지 않는 경우 행 수준 보안이 설정된 관계를 쿼리할 수 없습니다.
  +  `enable_case_sensitive_super_attribute` 
  +  `enable_case_sensitive_identifier` 
  +  `downcase_delimited_identifier` 

  행 수준 보안이 설정된 상태에서 관계를 쿼리하려고 할 때 "대/소문자 구분이 기본값과 다른 경우 RLS 보호 관계가 세션 수준 구성을 지원하지 않습니다."라는 메시지가 표시되는 경우 세션의 구성 옵션을 재설정해 보세요.
+  프로비저닝된 클러스터 또는 서버리스 네임스페이스에 행 수준 보안 정책이 있는 경우 일반 사용자에게는 다음 명령이 차단됩니다.

  ```
  ALTER <current_user> SET enable_case_sensitive_super_attribute/enable_case_sensitive_identifier/downcase_delimited_identifier
  ```

  RLS 정책을 만들 때 일반 사용자의 기본 구성 옵션 설정을 정책을 만들 당시의 세션의 구성 옵션 설정과 일치하도록 변경하는 것이 좋습니다. 슈퍼유저 및 ALTER USER 권한이 있는 사용자는 파라미터 그룹 설정 또는 ALTER USER 명령을 사용하여 이 작업을 수행할 수 있습니다. 파라미터 그룹에 대한 자세한 내용은 **Amazon Redshift 관리 안내서의 [Amazon Redshift 파라미터 그룹](https://docs.aws.amazon.com/redshift/latest/mgmt/working-with-parameter-groups.html)을 참조하세요. ALTER USER 명령에 대한 자세한 내용은 [ALTER USER](r_ALTER_USER.md) 섹션을 참조하세요.
+  행 수준 보안 정책이 적용된 뷰와 지연 바인딩 뷰는 일반 사용자가 [CREATE VIEW](r_CREATE_VIEW.md) 명령을 사용하여 교체할 수 없습니다. RLS 정책이 적용된 뷰 또는 LBV를 바꾸려면 먼저 연결된 RLS 정책을 분리하고 뷰 또는 LBV를 교체한 다음, 정책을 다시 연결합니다. 슈퍼 사용자 및 `sys:secadmin permission`이 있는 사용자는 정책을 분리하지 않고도 RLS 정책이 적용된 뷰 또는 LBV에 CREATE VIEW를 사용할 수 있습니다.
+  행 수준 보안 정책이 적용된 뷰는 시스템 테이블과 시스템 뷰를 참조할 수 없습니다.
+  일반 뷰에서 참조하는 지연 바인딩 뷰는 RLS로 보호될 수 없습니다.
+  RLS로 보호되는 관계와 데이터 레이크의 중첩 데이터는 동일한 쿼리에서 액세스할 수 없습니다.