내보내기에 포함된 액세스 규칙

Postgres 내보내기에는 사용자별로 읽을 수 있는 행을 재현하는 행 수준 보안 정책이 들어 있습니다. 정책은 직접 적용해야 하며 읽기만 다룹니다.

정책이 재현하는 것

해당 내보내기 번들에는 policies.sql이 들어 있으며, 내보낸 테이블에 행 수준 보안을 설정합니다. 사용자는 행을 소유하거나, 행이 공개이거나, 명시적으로 부여받았거나, 이미 볼 수 있는 대상에 딸려 있을 때 그 행을 봅니다. 마지막 경우는 읽기 액세스를 지닌 참조를 통해 한 단계까지만 이어집니다. 명시적 부여는 정책이 참조하되 사용자는 직접 읽을 수 없는 별도 테이블에 담겨 전달됩니다.

Fóir 안에서 규칙은 데이터베이스에서 강제 적용되며, 이 규칙을 Demesne이 단일 레코드 테이블을 기준으로 컴파일합니다. 내보내기에는 모델마다 테이블이 있으므로 같은 규칙을 그 형태에 맞게 다시 씁니다.

적용하기

데이터를 불러온 뒤 psql로 파일을 실행합니다. 내보내기 명령으로 번들을 적용해도 이 파일은 실행되지 않습니다. 그 이후의 계약은 세션 설정 하나로, request.jwt.claims에 사용자의 id를 담습니다. claims가 설정되지 않으면 호출자는 익명이며 정확히 공개 행만 봅니다. 테스트는 authenticated 역할로 하세요: 테이블을 복원한 역할이 그 테이블을 소유하며, 테이블 소유자는 행 수준 보안을 우회하기 때문입니다.

이전되지 않는 것

필드 수준 권한, API 스코프, 쓰기 규칙은 이전되지 않고 남습니다. 복원된 데이터베이스에서 행을 볼 수 있는 사용자는 그 행의 모든 열을 보므로, 필드를 숨기는 일은 애플리케이션, 열 권한 또는 뷰의 몫이 됩니다. 정책은 익명 호출자와 로그인한 호출자에게 읽기 액세스만 부여하며, 팀의 콘솔 액세스는 내보내지 않습니다.

테스트 대상

테스트 스위트는 시드된 프로젝트를 내보내 두 번째 데이터베이스에 복원하고, 정책을 적용한 뒤 같은 사용자에 대해 양쪽의 행 id가 같을 것을 요구합니다. 이는 변환을 검증하는 것이며, 복원한 여러분의 데이터베이스에서 정책을 검사하는 테스트는 없습니다. 복원된 규칙이 조직을 사용하는 프로젝트에서 일치한다고 보장하지는 않습니다.

자세히 보기

내보내기 가이드의 액세스 규칙 섹션은 정책을 적용하는 방법, 사용자의 클레임을 설정하는 방법, 올바른 역할로 테스트하는 방법을 보여 줍니다.