Greenplumにおけるロールと権限管理の実践

Greenplumにおける権限管理の概要

Greenplumでは、ロール(Role)に基づく権限管理システムが採用されており、ユーザー管理とグループ管理を統一的に扱うことができます。データベース、スキーマ、テーブル、関数など、各オブジェクトに対するアクセス権を細粒度で制御することが可能です。

基本概念と構造

  • データベース内に複数のスキーマが存在可能
  • 各テーブル、ビュー、関数などは必ず何らかのスキーマに属する
  • ロールはユーザーとグループの概念を包括的に扱う
  • オブジェクト所有者はデフォルトで全権限を持つ

権限の階層構造

  1. ロール属性に関する権限(スーパーユーザー、データベース作成権限など)
  2. データベースレベルの権限
  3. スキーマ作成権限
  4. スキーマ内オブジェクト操作権限
  5. テーブルに対するCRUD権限
  6. 特定カラムに対する権限

主なオブジェクトと権限一覧

オブジェクトタイプ利用可能な権限
テーブル、ビュー、シーケンスSELECT, INSERT, UPDATE, DELETE, RULE, ALL
外部テーブルSELECT, RULE, ALL
データベースCONNECT, CREATE, TEMPORARY, TEMP, ALL
関数EXECUTE
プロシージャ言語USAGE
スキーマCREATE, USAGE, ALL
カスタムプロトコルSELECT, INSERT, UPDATE, DELETE, RULE, ALL

権限操作の実践例

ロール作成と属性設定

CREATE ROLE app_user WITH LOGIN PASSWORD 'secure_password';
ALTER ROLE app_user CONNECTION LIMIT 10;

データベース権限の管理

-- データベース接続権限を付与
GRANT CONNECT ON DATABASE mydb TO app_user;

-- データベース作成権限を付与
GRANT CREATE ON DATABASE mydb TO app_user;

スキーマ権限の管理

-- スキーマ使用権限を付与
GRANT USAGE ON SCHEMA public TO app_user;

-- スキーマオブジェクト作成権限を付与
GRANT CREATE ON SCHEMA public TO app_user;

テーブル権限の管理

-- 特定テーブルへのSELECT権限を付与
GRANT SELECT ON TABLE employees TO app_user;

-- 特定カラムのみへのUPDATE権限を付与
GRANT UPDATE (salary) ON TABLE employees TO app_user;

関数権限の管理

-- 関数実行権限を付与
GRANT EXECUTE ON FUNCTION calculate_bonus(integer) TO app_user;

グループ管理による権限付与

-- グループロールの作成
CREATE ROLE developers;

-- グループに権限を付与
GRANT ALL ON SCHEMA dev_schema TO developers;

-- ユーザーをグループに追加
GRANT developers TO alice;
GRANT developers TO bob;

権限の削除

-- データベース権限を取り消し
REVOKE ALL ON DATABASE mydb FROM app_user;

-- スキーマ権限を取り消し
REVOKE USAGE ON SCHEMA public FROM app_user;

-- テーブル権限を取り消し
REVOKE SELECT ON TABLE employees FROM app_user;

自動権限付与の実装

CREATE OR REPLACE FUNCTION grant_table_permissions(schema_name TEXT, role_name TEXT)
RETURNS VOID AS $$
DECLARE
  table_record RECORD;
BEGIN
  FOR table_record IN
    SELECT table_name FROM information_schema.tables
    WHERE table_schema = schema_name
  LOOP
    EXECUTE format('GRANT SELECT, INSERT ON TABLE %I.%I TO %I',
                   schema_name, table_record.table_name, role_name);
  END LOOP;
END;
$$ LANGUAGE plpgsql;

-- 実行例
SELECT grant_table_permissions('sales', 'sales_team');

クライアント接続制御

# pg_hba.confの設定例
# IPv4接続制限
host  all  all  192.168.1.0/24  md5

# 特定ユーザの接続制限
host  mydb  dbadmin  10.0.0.1/32  ident

推奨される権限管理戦略

  • 最小権限原則を遵守
  • 業務ごとに役割ベースのグループを作成
  • 定期的な権限レビューを実施
  • 権限の自動化された管理プロセスを構築
  • 読み取り専用と読み書きユーザーを明確に分離

推奨構成例

-- 役割グループの作成
CREATE GROUP read_only;
CREATE GROUP read_write;

-- 特定テーブルへの権限付与
GRANT SELECT ON TABLE customer_data TO read_only;
GRANT SELECT, INSERT, UPDATE, DELETE ON TABLE transaction_log TO read_write;

-- ユーザーを適切なグループに追加
GRANT read_only TO analyst_user;
GRANT read_write TO application_user;

タグ: Greenplum PostgreSQL 権限管理 ロールベースアクセス制御 データベースセキュリティ

6月8日 18:49 投稿