セッションIDを生成する準備
mod_plsqlを利用したWebアプリケーションではセッション管理について支援が無い。Cookieとデータベースを使用してセッション管理機能を自作しなければならない。(セッション管理機能はいろいろセキュリティ上の問題を作り込むポイントらしいので、PL/SQLでWebアプリを作るという超ローカルな環境での使用のみを前提にしている。)
準備
乱数や暗号化を扱うパッケージは「DBMS_CRYPTO」で、SYS以外は通常使用できないようになっている。
SYSユーザで実行許可を与える。
--SYSユーザで実施 GRANT EXECUTE ON DBMS_CRYPTO TO MANAGEMENTUSER;
使用するパッケージ
セッションIDの生成ロジック
DECLARE rand1 RAW(18); rand2 RAW(18); hmac RAW(20); lpart_b64 VARCHAR2(24); rpart_b64 VARCHAR2(28); BEGIN --左のパートは乱数の base64 表現。 rand1 := DBMS_CRYPTO.RANDOMBYTES(18); --UTL_RAWではなくUTL_I18Nを使用する。 lpart_b64 := UTL_I18N.RAW_TO_CHAR(UTL_ENCODE.BASE64_ENCODE(rand1),'US7ASCII'); --HMAC計算。 rand2 := DBMS_CRYPTO.RANDOMBYTES(18); hmac := DBMS_CRYPTO.MAC(rand1,DBMS_CRYPTO.HMAC_SH1,rand2); rpart_b64 := UTL_I18N.RAW_TO_CHAR(UTL_ENCODE.BASE64_ENCODE(hmac),'US7ASCII'); --クッキーには lpart_b64.rpart_b64 を設定する。長さは 53 (24 + 1 + 28) になる。 DBMS_OUTPUT.PUT_LINE(lpart_b64||'.'||rpart_b64); END; /