DWHサーバ管理者ユーザーは、利用者がPostgreSQLへ接続した際に実行するログインプロシージャを作成します。
ログインプロシージャ内部でCURRENT_USERの値をもとに、pgxa_register_variableシステム関数を使用して、“6.4.3 ビューの作成”で作成するビューで利用する情報を変数として登録します。
ログインプロシージャの作成手順
実行例は、ログインしたユーザー名をもとにemployee外部テーブルより部署IDを取得し、その情報を、pgxa_register_variableシステム関数を使用して登録する場合について説明しています。
データベースクライアント機能を利用し、データベースに接続します。
サーバのIPアドレスが“192.0.2.0”、ポート番号が“27500”に接続します。
psql (x.y.z) Type "help" for help.
x.y.z:PostgreSQLのバージョンが表示されます。
PL/pgSQL(Procedural Language/PostgreSQL Structured Query Language)を使用して、引数なし、戻り値をvoid型とした関数を、ログインプロシージャとして作成します。
このとき、“6.4.3 ビューの作成”で利用するための情報を、pgxa_register_variableシステム関数を使用して登録します。
また、fluentd起動時に利用されるユーザー“symfoasadmuser”が上記のルートを通らないように、ユーザー名が“symfoasadmuser”のときにreturn文を実行するよう設定します。本処理を実施しない場合、fluentd起動時に利用されるユーザーの部署IDを取得するタイミングでエラーが発生し、fluentdの起動に失敗します。
注意
CURRENT_USER関数は、ログインプロシージャ内であらかじめ別の変数に値を格納し、その変数を利用してください。
参照
pgxa_register_variableシステム関数の詳細は“リファレンス”の“pgxa_register_variable”を参照してください。
ログインしたユーザー名をもとに、部署IDを取得/登録するログインプロシージャlogin_proc()関数を定義します。
postgres=# CREATE OR REPLACE FUNCTION login_proc() RETURNS void AS $$ postgres$# DECLARE postgres$# _busho_id int; postgres$# _ret bool; postgres$# _user_name text; postgres$# BEGIN postgres$# IF (current_user = 'symfoasadmuser') THEN postgres$# return; postgres$# END IF; postgres$# select current_user into _user_name; postgres$# postgres$# select busho_id into strict _busho_id from employee where name = _user_name; postgres$# postgres$# select pgxa_register_variable('_busho_id', 'int', _busho_id) into _ret; postgres$# postgres$# END; postgres$# $$ LANGUAGE plpgsql; CREATE FUNCTION
注意
ログインプロシージャ内で、カラムナテーブルに対してSELECT INTO文を利用する場合は、必ずSTRICT句を付与してください。