대만 타이베이 - 2023년 3월 9일
베타 버전을 발표하게 되어 기쁘게 생각합니다.pg_anonymize.
pg_anonymize는 간단하고 강력하며 데이터 익명화를 위한 투명한 인프라. 그 목표는 다음을 보장하는 것입니다. 익명화된 역할과 연결된 사람은 누구나 익명화된 역할만 볼 수 있습니다. 사용되는 클라이언트에 대한 제한 없이 데이터 버전(psql, pg_dump, 자신의 애플리케이션 또는 pg_sample과 같은 다른 도구...) 또는 스키마 및 관계의 수.
익명화는 보안 라벨에 의존하는 선언적 접근 방식을 사용하여 수행됩니다. 각 열에 대해 표현식을 선언하기만 하면 됩니다. 익명화를 동적으로 수행하는 익명화입니다. 유효한 올바른 유형을 산출하는 표현식을 사용할 수 있으므로 다음과 같이 작성할 수 있습니다. 일반 SQL, plpgsql 또는 원하는 다른 절차적 언어.
이 확장은 PostgreSQL 10 이상과 호환됩니다. 자세한 내용은 사용법을 살펴보세요.사용법아래 섹션 또는문서.
마음대로 하세요미해결 문제당신이 문제가 발생하거나 새로운 기능을 요청하고 싶습니다.
pg_anonymize는 다음 구성 옵션을 제공합니다:
pg_anonymize.enabled(bool): 전역적으로 활성화 또는 비활성화할 수 있습니다. pg_anonymize. 기본값은켜짐.
pg_anonymize.check_labels(bool): 온전성 검사 수행(표현식 유효성, 읽기 전용, 반환된 유형 및 SQL 주입 부족) 보안 레이블을 선언할 때의 표현입니다. 기본값은켜짐.
참고: 만약에라도pg_anonymize.check_labels비활성화되면 pg_anonymize는 정의된 표현식에 SQL 삽입이 포함되어 있지 않은지 확인하세요.
pg_anonymize를 사용하려면 먼저 로드해야 합니다. 여러 가지가 있습니다 그것을하는 방법. 일반적으로 소수의 역할에만 데이터 익명화가 필요하므로 권장되는 방법은 해당 역할에 대한 확장만 로드하는 것입니다. 에 대한 인스턴스, 역할 가정앨리스사용되어야 합니다:
역할 변경 alice SET session_preload_libraries = 'pg_anonymize';
참고: Alice가 연 세션만이후이 명령은 성공적으로 실행되면 pg_anonymize가 로드됩니다.
대안으로 명시적으로 로드할 수도 있습니다. 예를 들면 다음과 같습니다:
LOAD 'pg_anonymize';
참고: LOAD에는 수퍼유저 권한이 필요합니다.
그런 다음 원하는 역할에 익명화된 토토 핫가 필요하다고 선언해야 합니다. 이 보안 라벨 추가가 완료되었습니다.익명화대상 역할에 대해. 에 대한 인스턴스:
-- 보안 라벨을 선언하기 전에 pg_anonymize를 로드해야 합니다.
LOAD 'pg_anonymize';
alice 역할의 pg_anonymize에 대한 보안 라벨은 'anonymize'입니다.
참고: 역할에 보안 레이블을 선언하려면 CREATEROLE 권한이 필요합니다.
그런 다음 보안 라벨을 사용하여 각 열을 익명화하는 방법을 선언할 수 있습니다. 실제 콘텐츠를 대체하는 표현식을 정의합니다.
예를 들어, 단순한 고객 테이블을 가정하면:
``` CREATE TABLE public.customer(id 정수, 이름 텍스트, 성 텍스트, 생일 날짜, 전화번호 텍스트);
public.customer 값에 삽입(1, '좋은', '고객', '1970-03-04', '+886 1234 5678');
공공 고객 테이블에 대한 선택 권한을 앨리스에게 부여합니다. ````
성, 생일, 전화번호를 익명화합시다:
pg_anonymize ON 열 public.customer.last_name에 대한 보안 레이블
IS $$substr(last_name, 1, 1) || '*****'$$;
public.customer.birthday 열의 pg_anonymize에 대한 보안 레이블
IS $$date_trunc('연도', 생일)::date$$;
public.customer.phone_number 열의 pg_anonymize에 대한 보안 레이블
IS $$regexp_replace(phone_number, '\d', 'X', 'g')$$;
참고: 열에 보안 레이블을 선언하려면 해당 열의 소유자여야 합니다. 기본 관계.
그앨리스역할은 이제 자동으로 익명화된 데이터를 볼 수 있습니다. 예를 들어:
``` -- 현재 역할은 일반 토토 핫를 봅니다. =# SELECT * FROM public.customer; 아이디 | 이름 | 성 | 생일 | 전화_번호 ----+------------+------------+------------+--- 1 | 좋은 | 고객 | 1970-03-04 | +886 1234 5678 (1행)
--하지만 앨리스는 익명화된 데이터를 볼 수 있습니다 =# \c - 앨리스 이제 "alice" 사용자로 "rjuju" 데이터베이스에 연결되었습니다.
= SELECT * FROM public.customer; 아이디 | 이름 | 성 | 생일 | 전화_번호 ----+------------+------------+------------+--- 1 | 좋은 | ㄷ*| 1970-01-01 | +XXXXXXXXXXXXX (1행)
-- pg_dump는 익명화된 데이터도 볼 수 있습니다. $ pg_dump -U 앨리스 -t public.customer -a rjuju | grep "복사" -A2 stdin에서 public.customer(ID, 이름, 성, 생일, 전화번호)를 복사하세요. 1 좋은 C*1970-01-01 +XXX XXXX XXXX . ````