ベクトルデータへのアクセスの制限は、ベクトルデータが格納されるテーブルに対するアクセス制御により実現します。アクセス制限の設定は、Fujitsu Enterprise Postgresの機密管理支援機能を使用して行います。
以下は機密管理支援機能を使用し、テキストデータを含むテーブルsampleと、本機能によって生成されるベクトルデータを含むテーブルsample_embedding_storeの参照権を付与する例です。
“セキュリティ運用ガイド”の“機密管理支援機能”を参照して、機密管理ロール、機密マトリクス、機密レベル、機密グループを定義します。
テーブルに対する機密権限を機密グループに付与します。
SELECT pgx_grant_confidential_privilege('rag_matrix', 'level1', 'group1', '{"schema": ["ALL"], "table": ["SELECT"]}');
機密レベルに機密オブジェクトとしてテキストデータを含むテーブルと埋込みテーブルを追加します。
SELECT pgx_add_object_to_confidential_level ('rag_matrix', 'level1', '[{ "type":"table", "object":[ { "schema":"public", "table":["sample"] }, { "schema":"public", "table":["sample_embedding_store"] }, ] }]');
機密グループにロールを追加します。
SELECT pgx_add_role_to_confidential_group('rag_matrix', 'group1', '["rag_user"]');
参考
ベクトルテーブルには、外部キー、ベクトルデータおよびチャンクが含まれますが、列単位でアクセス権を設定する必要はなく、テーブル単位のアクセス権の設定で十分です。
以下は、テキストデータを含むテーブルsampleと、本機能によって生成されるベクトルデータを含むテーブルsample_embedding_storeに対して行レベルセキュリティを設定する例です。この例ではsampleとsample_embedding_storeには、usernameというカラムにユーザー名が入っており、sample_embedding_storeはsampleの主キー(id)を外部キー(id)として持っています。行レベルセキュリティを使用する場合、VECTORIZE_USERに設定したユーザーにBYPASSRLS属性を付与してください。
“セキュリティ運用ガイド”の“機密管理支援機能”を参照して、機密管理ロール、機密マトリクス、機密レベル、機密グループを定義します。
rowsetに対する機密権限を機密グループに付与します。
SELECT pgx_grant_confidential_privilege('rag_matrix', 'level1', 'group1', '{"table": ["SELECT"], "schema": ["ALL"],"rowset":["SELECT"]}');
対象のテーブルに対して行レベルセキュリティを有効にします。
ALTER TABLE sample ENABLE ROW LEVEL SECURITY; ALTER TABLE sample_embeddings_store ENABLE ROW LEVEL SECURITY;
対象のビューの基となるテーブルがビューのユーザーの権限に対してチェックされるようにします。
ALTER VIEW sample_embeddings SET (security_invoker = true);
機密レベルに機密オブジェクトとしてaiスキーマ、テキストデータを含むテーブルと埋込みテーブル、埋込みビューを追加します。
SELECT pgx_add_object_to_confidential_level ('rag_matrix', 'level1', '[{ "type":"schema", "object":[ {"schema":"ai"}, {"schema":"pgx_vectorizer"} ] }, { "type":"table", "object":[ { "schema":"public", "table": ["sample", "sample_embeddings_store", "sample_embeddings"] }, { "schema":"ai", "table": ["vectorizer"] } ] }]');
機密レベルに機密オブジェクトとしてテキストデータを含むテーブルと埋込みテーブルのrowsetを追加します。
SELECT pgx_add_object_to_confidential_level ('rag_matrix', 'level1', '[{ "type":"rowset", "object":[ { "schema":"public", "table": "sample", "rowset_name": "rowset1", "rowset_expression":[ { "as": "permissive", "using": "username = current_user" }] }, { "schema":"public", "table": "sample_embeddings_store", "rowset_name": "rowset1", "rowset_expression":[ { "as": "permissive", "using": "EXISTS (SELECT 1 FROM public.sample WHERE public.sample.id = public.sample_embeddings_store.id AND public.sample.\"username\" = current_user)" }] } ] }]');
機密グループにロールを追加します。
SELECT pgx_add_role_to_confidential_group('rag_matrix', 'group1', '["rag_user"]');