Access Control¶
AkasicDB는 PostgreSQL의 스키마 및 테이블 권한을 사용해 그래프 수준의 접근 제어를 제공합니다.
그래프 수준 접근 제어¶
각 그래프는 그래프와 같은 이름의 PostgreSQL 스키마를 사용합니다. 그래프에 대한 접근 권한을 부여하려면 그래프 스키마와 그 안의 모든 테이블에 필요한 권한을 각각 부여해야 합니다. 스키마 권한을 부여해도 스키마 내 테이블 권한까지 자동으로 부여되지는 않습니다.
기본 권한¶
akasicdb.create_graph로 그래프를 생성하면 다음 권한이 부여됩니다.
PUBLIC에는 그래프 스키마에 대한USAGE권한과 모든 그래프 테이블에 대한SELECT권한이 부여됩니다. 모든 데이터베이스 역할은PUBLIC의 구성원이므로 기본적으로 그래프를 읽을 수 있습니다.akasicdb.create_graph를 호출한session_user에는 그래프 스키마에 대한CREATE권한이 부여되며, 이 사용자가 모든 그래프 테이블의 소유자가 됩니다. 테이블 소유자는 그래프 테이블을 읽고 쓰고 관리할 수 있습니다.
akasicdb.create_graph는 PUBLIC에 테이블 쓰기 권한을 부여하지 않습니다. 그래프 생성자가 아닌 역할이 그래프 데이터를 수정하려면 INSERT, UPDATE, DELETE 권한을 명시적으로 부여받아야 합니다. 단, 역할 구성원 자격이나 다른 권한 부여를 통해 해당 권한을 받을 수도 있습니다. 슈퍼유저는 자체 권한으로 접근할 수 있습니다.
Note
기본 권한 및 권한 관련 동작은 향후 AkasicDB 버전에서 변경될 수 있습니다. 기본 권한을 고정된 접근 제어 정책으로 간주하지 마십시오. 각 그래프에 필요한 권한 부여와 회수를 명시적으로 적용하고, AkasicDB 업그레이드 후에는 권한 설정을 다시 확인하십시오.
역할별 접근 권한 부여¶
명시적으로 허용된 역할만 그래프를 읽을 수 있게 하려면 먼저 PUBLIC에 기본으로 부여된 SELECT 권한을 철회해야 합니다.
PUBLIC에는 그래프 스키마에 대한 USAGE 권한이 유지되지만, 스키마의 USAGE 권한만으로는 해당 스키마의 테이블을 읽거나 수정할 수 없습니다.
다음 명령문은 graph_reader 역할에 community_graph 그래프의 읽기 전용 접근 권한을 부여합니다.
CREATE ROLE graph_reader;
GRANT USAGE ON SCHEMA community_graph TO graph_reader;
GRANT SELECT ON ALL TABLES IN SCHEMA community_graph TO graph_reader;
다음 명령문은 graph_writer 역할에 그래프 스키마의 객체 생성 권한을 부여하지 않고 그래프 데이터를 읽고 수정할 수 있는 권한을 부여합니다.
CREATE ROLE graph_writer;
GRANT USAGE ON SCHEMA community_graph TO graph_writer;
GRANT SELECT, INSERT, UPDATE, DELETE
ON ALL TABLES IN SCHEMA community_graph
TO graph_writer;
명시적으로 부여한 접근 권한을 철회하려면 다음 명령문을 실행합니다.
REVOKE ALL PRIVILEGES
ON ALL TABLES IN SCHEMA community_graph
FROM graph_reader, graph_writer;
REVOKE ALL PRIVILEGES
ON SCHEMA community_graph
FROM graph_reader, graph_writer;
역할은 다른 역할의 구성원 자격이나 PUBLIC을 통해서도 접근 권한을 받을 수 있습니다. 역할에 명시적으로 부여된 권한을 철회하더라도 이러한 경로를 통해 받은 권한은 철회되지 않습니다.
Warning
akasicdb.create_graph(..., replace_if_exists => true)로 그래프를 다시 생성하면 PUBLIC의 SELECT 권한을 포함한 기본 권한이 다시 적용됩니다. 이전 그래프의 사용자 지정 권한 부여 및 철회 설정은 유지되지 않습니다. 그래프를 다시 생성한 후 접근 제한과 역할별 권한을 다시 적용해야 합니다.
제한 사항¶
Warning
접근을 제한하더라도 그래프나 레이블의 존재가 권한 없는 역할에 노출될 수 있습니다.
PostgreSQL 행 수준 보안(Row-Level Security, RLS)을 사용해 공유 그래프의 개별 정점이나 간선에 대한 접근을 제한하는 방식은 보안 경계로 사용할 수 없습니다.
사용자나 테넌트 간 데이터를 엄격하게 격리해야 한다면 그래프를 분리하고 각 그래프에 그래프 수준 권한을 적용해야 합니다.