SQL의 세션 컨텍스트 기능을 사용하여 데이터 API 작성기에서 행 수준 보안을 구현합니다.
필수 조건
- 기존 SQL 서버 및 데이터베이스.
- 데이터 API 작성기 CLI. CLI 설치
SQL 테이블 및 데이터 만들기
이 예제 시나리오에서 사용할 가상 데이터가 있는 테이블을 만듭니다.
기본 설정 클라이언트 또는 도구를 사용하여 SQL 데이터베이스에 연결합니다.
Revenues이라는 이름의 테이블을id,category,revenue,username열로 생성합니다.DROP TABLE IF EXISTS dbo.Revenues; CREATE TABLE dbo.Revenues( id int PRIMARY KEY, category varchar(max) NOT NULL, revenue int, username varchar(max) NOT NULL ); GORevenues테이블에 샘플 책의 행 4개를 삽입합니다.INSERT INTO dbo.Revenues VALUES (1, 'Book', 5000, 'Oscar'), (2, 'Comics', 10000, 'Oscar'), (3, 'Journals', 20000, 'Hannah'), (4, 'Series', 40000, 'Hannah') GO간단한
SELECT *쿼리로 데이터를 테스트합니다.SELECT * FROM dbo.RevenuesRevenuesPredicate함수를 만듭니다. 이 함수는 현재 세션 컨텍스트에 따라 결과를 필터링합니다.CREATE FUNCTION dbo.RevenuesPredicate(@username varchar(max)) RETURNS TABLE WITH SCHEMABINDING AS RETURN SELECT 1 AS fn_securitypredicate_result WHERE @username = CAST(SESSION_CONTEXT(N'name') AS varchar(max));함수를 사용하여 명명된 보안 정책을 만듭니다
RevenuesSecurityPolicy.CREATE SECURITY POLICY dbo.RevenuesSecurityPolicy ADD FILTER PREDICATE dbo.RevenuesPredicate(username) ON dbo.Revenues;
도구 실행
DAB(Data API Builder) 도구를 실행하여 구성 파일 및 단일 엔터티를 생성합니다.
새 구성을 만들 때
--set-session-context을 true로 설정하십시오.dab init \ --database-type mssql \ --connection-string "<sql-connection-string>" \ --set-session-context true테이블에 이름이 지정된
revenue새 엔터티를 추가합니다dbo.Revenues.dab add revenue \ --source "dbo.Revenues" \ --permissions "anonymous:read"데이터 API 작성기 도구를 시작합니다.
dab starthttp://localhost:5000/api/revenue엔드포인트로 이동하세요. 데이터가 반환되지 않는지 확인합니다. 이 동작은 세션 컨텍스트가 설정되지 않고 필터 조건자와 일치하는 레코드가 없기 때문에 발생합니다.
SQL에서 테스트
필터를 테스트하고 SQL에서 조건자를 직접 테스트하여 작동하는지 확인합니다.
원하는 클라이언트 또는 도구를 사용하여 SQL Server에 다시 연결합니다.
sp_set_session_context를 실행하여 세션 컨텍스트의name클레임을 정적 값Oscar로 수동 설정하세요.EXEC sp_set_session_context 'name', 'Oscar';일반적인
SELECT *쿼리를 실행합니다. 결과가 조건자를 사용하여 자동으로 필터링되는지 확인합니다.SELECT * FROM dbo.Revenues;