Oracle Apex ログイン方法カスタマイズ方法
目標
APEX 標準のログイン認証(APEX アカウント)を、データベース内のユーザーデータに基づく認証方式に変更する。
1. カスタムユーザーデータベースの作成
- ステップ1: ユーザーテーブルの作成
以下の SQL を使用して、ユーザー情報を保存するテーブルを作成します。
CREATE TABLE CUSTOM_USERS (
USER_ID NUMBER GENERATED BY DEFAULT AS IDENTITY PRIMARY KEY,
USERNAME VARCHAR2(50) NOT NULL UNIQUE,
PASSWORD_HASH VARCHAR2(255) NOT NULL,
FULL_NAME VARCHAR2(100),
EMAIL VARCHAR2(100),
CREATED_AT DATE DEFAULT SYSDATE
);
- ステップ2: サンプルデータの追加
テスト用のデータを挿入します。
INSERT INTO CUSTOM_USERS (USERNAME, PASSWORD_HASH, FULL_NAME, EMAIL)
VALUES ('test_user', DBMS_CRYPTO.HASH(UTL_I18N.STRING_TO_RAW('password123', 'AL32UTF8'), 2), 'テストユーザー', 'test_user@example.com');
COMMIT;
注: DBMS_CRYPTO.HASH を使用して、パスワードをハッシュ化します。
2.PL/SQL 認証ロジックの作成
認証用関数の作成
以下の PL/SQL 関数を作成して、ユーザー名とパスワードを検証します。
コードをコピーする
CREATE OR REPLACE FUNCTION AUTHENTICATE_USER (
P_USERNAME IN VARCHAR2,
P_PASSWORD IN VARCHAR2
) RETURN BOOLEAN IS
L_PASSWORD_HASH VARCHAR2(255);
BEGIN
-- データベースからパスワードハッシュを取得
SELECT PASSWORD_HASH
INTO L_PASSWORD_HASH
FROM CUSTOM_USERS
WHERE USERNAME = P_USERNAME;
-- 入力されたパスワードのハッシュを比較
IF L_PASSWORD_HASH = DBMS_CRYPTO.HASH(UTL_I18N.STRING_TO_RAW(P_PASSWORD, 'AL32UTF8'), 2) THEN
RETURN TRUE;
ELSE
RETURN FALSE;
END IF;
EXCEPTION
WHEN NO_DATA_FOUND THEN
-- ユーザー名が存在しない場合
RETURN FALSE;
END AUTHENTICATE_USER;
3. APEXの認証方法の設定
-
ステップ1: APEX アプリケーションを開く
APEX にログインします。
認証を変更したいアプリケーションを選択します。 -
ステップ2: 認証方式の変更
Shared Components > Authentication Schemes を開きます。
Create をクリックして新しい認証方式を作成します。
Based on a PL/SQL Function を選択。
次の情報を入力:
Name: カスタム認証
Authentication Function Name: return AUTHENTICATE_USER(:P101_USERNAME, :P101_PASSWORD);
変更を保存。 -
ステップ3: ログインページのカスタマイズ
ログインページ(通常は Page 101)を編集。
P101_USERNAME と P101_PASSWORD をユーザー名とパスワードの入力項目として設定。
APEX 標準のロジックを削除。