다음을 통해 공유


OneLake의 행 수준 보안(미리 보기)

RLS(행 수준 보안)는 OneLake 보안(미리 보기)의 한 기능으로, OneLake에 저장된 표 형식 데이터에 대한 행 수준 데이터 제한을 정의할 수 있습니다. 사용자는 OneLake에서 해당 역할 멤버의 데이터 행을 필터링하기 위한 규칙이 포함된 역할을 정의할 수 있습니다. RLS 역할의 멤버가 해당 데이터를 쿼리하면 RLS 규칙이 평가되고 허용된 행만 반환됩니다.

필수 조건

행 수준 보안 적용

OneLake 보안 RLS는 다음 두 가지 방법 중 하나로 적용됩니다.

  • Fabric 엔진의 필터링된 테이블: Spark Notebook과 같은 지원되는 Fabric 엔진 목록에 대한 쿼리를 실행하면 사용자는 RLS 규칙에 따라 허용된 행만 볼 수 있습니다.
  • 테이블에 대한 액세스 차단됨: RLS 규칙이 적용된 테이블은 지원되는 Fabric 엔진 외부에서 읽을 수 없습니다.

필터링된 표의 경우 다음과 같은 동작이 적용됩니다.

  • RLS 규칙은 관리자, 멤버 및 기여자 역할의 사용자의 액세스를 제한하지 않습니다.
  • RLS 규칙이 정의된 테이블과 일치하지 않으면 쿼리가 실패하고 행이 반환되지 않습니다. 예를 들어, RLS 규칙이 테이블에 속하지 않은 열을 참조하는 경우입니다.
  • 사용자가 두 개의 다른 역할에 속해 있고 그 역할 중 하나에 CLS(열 수준 보안)가 있는 경우, RLS 테이블 쿼리는 오류와 함께 실패합니다.
  • RLS 규칙은 Delta Parquet 테이블인 개체에만 적용할 수 있습니다.
    • 델타가 아닌 테이블 개체에 적용되는 RLS 규칙은 대신 역할 멤버의 전체 테이블에 대한 액세스를 차단합니다.
  • RLS 문에 구문 오류가 포함되어 있어 평가할 수 없는 경우 테이블에 대한 액세스가 차단될 수 있습니다.

행 수준 보안 규칙 정의

델타 Parquet 형식의 테이블 데이터에 대한 액세스 권한을 부여하는 OneLake 보안 역할의 일부로 행 수준 보안 규칙을 정의할 수 있습니다. 행은 표 형식 데이터에만 관련된 개념이므로, 테이블 형식이 아닌 폴더나 구조화되지 않은 데이터에는 RLS 정의가 허용되지 않습니다.

RLS 규칙은 SQL 구문을 사용하여 사용자가 볼 수 있는 행을 지정합니다. 이 구문은 SELECT 절에 정의된 RLS 규칙을 포함하는 SQL WHERE 문의 형식을 취합니다. RLS 규칙은 구문 ​​규칙에 정의된 SQL 언어의 하위 집합만 지원합니다. 잘못된 RLS 구문을 사용하거나 기본 테이블과 일치하지 않는 RLS 구문을 사용하는 쿼리의 경우 사용자에게 행이 표시되지 않거나 SQL 분석 엔드포인트에서 쿼리 오류가 발생합니다.

가장 좋은 방법은 모호하거나 지나치게 복잡한 RLS 식을 사용하지 않는 것입니다. 정수 또는 문자열 조회가 "="인 강력한 형식의 식은 가장 안전하고 이해하기 쉽습니다.

RLS 규칙을 정의하려면 다음 단계를 따릅니다.

  1. Lakehouse로 이동하여 OneLake 보안 관리(미리 보기)를 선택합니다.

  2. 테이블이나 폴더 보안을 정의하려는 기존 역할을 선택하거나 새로 만들기를 선택하여 새 역할을 만듭니다.

  3. 역할 세부 정보 페이지에서 RLS를 정의하려는 테이블 옆에 있는 추가 옵션(...)을 선택한 다음 행 보안(미리 보기)을 선택합니다.

    테이블의 권한을 편집하기 위해 '행 보안'을 선택하는 것을 보여 주는 스크린샷.

  4. 코드 편집기에서 사용자에게 표시할 행을 정의하는 SQL 문을 입력합니다. 지침은 구문 ​​규칙 섹션을 참조합니다.

  5. 저장을 선택하여 행 보안 규칙을 확인합니다.

SQL 분석 엔드포인트에 OneLake 보안 사용

SQL 분석 엔드포인트에서 OneLake 보안을 사용하려면 먼저 사용자의 ID 모드를 사용하도록 설정해야 합니다. 새로 만든 SQL 분석 엔드포인트는 기본적으로 사용자의 ID 모드로 설정되므로 기존 SQL 분석 엔드포인트에 대해서는 이러한 단계를 따라야 합니다.

비고

사용자의 ID 모드로 전환하려면 SQL 분석 엔드포인트당 한 번만 수행해야 합니다. 사용자의 ID 모드로 전환되지 않은 엔드포인트는 계속해서 위임된 ID를 사용하여 권한을 평가합니다.

  1. SQL 분석 엔드포인트로 이동합니다.

  2. SQL 분석 엔드포인트 환경의 위쪽 리본에서 보안 탭을 선택합니다.

  3. OneLake 액세스 모드에서 사용자의 ID를 선택합니다.

    SQL 분석 엔드포인트에 OneLake 보안을 사용하도록 설정하는 '사용자 ID'를 선택하는 스크린샷.

  4. 프롬프트에서 예를 선택하고 사용자의 ID를 사용합니다.

    테이블 읽기 액세스에 OneLake 보안을 사용하도록 설정하려면 수락해야 하는 사용자 프롬프트를 보여 주는 스크린샷.

이제 SQL 분석 엔드포인트가 OneLake 보안과 함께 사용할 준비가 되었습니다.

구문 규칙

모든 행 수준 보안 규칙은 다음과 같은 형식을 따릅니다.

SELECT * FROM {schema_name}.{table_name} WHERE {column_level_boolean_1}{column_level_boolean_2}...{column_level_boolean_N}

다음은 그 예입니다.

SELECT * FROM Sales WHERE Amount>'50000' AND State='CA'

행 수준 보안 규칙의 최대 문자 수는 1000입니다.

플레이스홀더 설명
{schema_name} {table_name}이 위치한 스키마의 이름입니다. 아티팩트가 스키마를 지원하는 경우 {schema_name}이 필요합니다.
{table_name} RLS 조건자가 적용되는 테이블의 이름입니다. 이 값은 테이블 이름과 정확하게 일치해야 합니다. 그렇지 않으면 RLS에서 행이 표시되지 않습니다.
{열_레벨_불리언} 다음 구성 요소를 포함하는 부울 표현식:

* 열 이름: 델타 로그 스키마에 지정된 {table_name}의 열 이름입니다. 열 이름은 {column_name} 또는 {table_name}.{column_name} 형식으로 지정할 수 있습니다.
* 연산자: 열 이름과 값을 부울 값으로 평가하는 지원되는 연산자 중 하나입니다.
* 값: 평가 대상인 정적 값 또는 값의 집합입니다.

하나 이상의 불리언 문을 AND 또는 OR로 조합할 수 있습니다.

지원되는 연산자

행 수준 보안 규칙은 다음 연산자 및 키워드 목록을 지원합니다.

오퍼레이터 설명
=(같음) 두 값이 동일한 데이터 형식이고 정확하게 일치하면 true로 평가됩니다.
<>(같지 않음) 두 값이 동일한 데이터 형식이 아니고 정확하게 일치하지 않을 경우 true로 평가됩니다.
>(보다 크다) 열 값이 평가 값보다 큰 경우 true로 평가됩니다. 문자열 값의 경우 이 연산자는 비트 비교를 사용하여 한 문자열이 다른 문자열보다 큰지 여부를 판별합니다.
>=(보다 크거나 같음) 열 값이 평가 값보다 크거나 같은 경우 true로 평가됩니다. 문자열 값의 경우 이 연산자는 비트 비교를 사용하여 한 문자열이 다른 문자열보다 크거나 같은지 판별합니다.
<(보다 작음) 열 값이 평가 값보다 작은 경우 true로 평가됩니다. 문자열 값의 경우 이 연산자는 비트 비교를 사용하여 한 문자열이 다른 문자열보다 작은지 여부를 판별합니다.
<=(보다 작거나 같음) 열 값이 평가 값보다 작거나 같은 경우 true로 평가됩니다. 문자열 값의 경우 이 연산자는 비트 비교를 사용하여 한 문자열이 다른 문자열보다 작거나 같은지 판별합니다.
인도 평가 값 중 하나라도 동일한 데이터 형식이고 열 값과 정확히 일치하는 경우 true로 평가됩니다.
아님 평가 값 중 하나라도 동일한 데이터 형식이 아니거나 열 값과 정확하게 일치하지 않으면 true로 평가됩니다.
그리고 이전 문장과 이후 문장을 부울 AND 연산을 사용하여 결합합니다. 전체 조건문이 true가 되려면 두 문장 모두 true여야 합니다.
또는 이전 문장과 이후 문장을 부울 OR 연산을 사용하여 결합합니다. 전체 조건이 true가 되려면 명제 중 하나가 true여야 합니다.
진실 true를 나타내는 부울 식입니다.
거짓 false에 대한 불리언 식입니다.
공백 IS 연산자와 함께 사용할 수 있는 빈 데이터 형식입니다. 예: row IS BLANK.
없음 IS 연산자와 함께 사용할 수 있는 null 데이터 형식입니다. 예: row IS NULL.

행 수준 및 열 수준 보안을 결합합니다.

행 수준 및 열 수준 보안을 함께 사용하여 테이블에 대한 사용자 액세스를 제한할 수 있습니다. 그러나 두 정책은 단일 OneLake 보안 역할을 사용하여 적용해야 합니다. 이 시나리오에서는 한 역할에 설정된 규칙에 따라 데이터 액세스가 제한됩니다.

OneLake 보안은 RLS 규칙을 포함하는 하나와 CLS 규칙을 포함하는 두 개 이상의 역할의 조합을 지원하지 않습니다. 지원되지 않는 역할 조합에 속하는 테이블에 액세스하려는 사용자는 쿼리 오류를 받습니다.