ページの先頭行へ戻る
Symfoware Analytics ServerV12.3.x 利用ガイド
FUJITSU Software

6.4.1 ログインプロシージャの作成

DWHサーバ管理者ユーザーは、利用者がPostgreSQLへ接続した際に実行するログインプロシージャを作成します。

ログインプロシージャ内部でCURRENT_USERの値をもとに、pgxa_register_variableシステム関数を使用して、“6.4.3 ビューの作成”で作成するビューで利用する情報を変数として登録します。

ログインプロシージャの作成手順

実行例は、ログインしたユーザー名をもとにemployee外部テーブルより部署IDを取得し、その情報を、pgxa_register_variableシステム関数を使用して登録する場合について説明しています。

  1. データベースクライアント機能を利用し、データベースに接続します。

    実行例

    サーバのIPアドレスが“192.0.2.0”、ポート番号が“27500”に接続します。

    psql (x.y.z)
    Type "help" for help.

    x.y.z:PostgreSQLのバージョンが表示されます。

  2. 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句を付与してください。