3. SQLの許可リストを作成する

3. SQLの許可リストを作成する#

許可リストを作成する#

現在の許可リストに登録されているSQLを確認します。

SQL> select ALLOWED_SQL_ID, SQL_TEXT from DBA_SQL_FIREWALL_ALLOWED_SQL;

no rows selected

初期状態では、許可リストは空です。

キャプチャしたSQLログを使用して、SQL許可リストを作成します。

EXEC DBMS_SQL_FIREWALL.GENERATE_ALLOW_LIST ('SALES_APP');

再度許可リストを確認し、SQLが登録されたことを確認します。

SQL> select ALLOWED_SQL_ID, SQL_TEXT from DBA_SQL_FIREWALL_ALLOWED_SQL;
"ALLOWED_SQL_ID","SQL_TEXT"
1               ,"SELECT DECODE (USER,:""SYS_B_0"",XS_SYS_CONTEXT (:""SYS_B_1"",:""SYS_B_2""),USER) FROM SYS.DUAL"
5               ,"SELECT FIRST_NAME FROM HR.EMPLOYEES WHERE EMPLOYEE_ID IN (:""SYS_B_0"",:""SYS_B_1"")"
2               ,"SELECT * FROM HR.JOB_HISTORY"
6               ,"SELECT FIRST_NAME,EMAIL,JOB_ID FROM HR.EMPLOYEES WHERE JOB_ID LIKE :""SYS_B_0"""
3               ,"DESCRIBE HR.JOB_HISTORY"
4               ,"SELECT JOB_ID FROM HR.JOB_HISTORY"

6 rows selected.

許可リストを有効化する#

作成した許可リストを有効化し、SALES_APPユーザーのSQLの実行を許可リストに基づいて制御します。

BEGIN
    DBMS_SQL_FIREWALL.ENABLE_ALLOW_LIST(
        username => 'SALES_APP',
        enforce  => DBMS_SQL_FIREWALL.ENFORCE_ALL,
        block    => TRUE
        );
END;
/

なお、SQL Firewallでは、blockオプションの設定に関係なく、一致しないデータベース接続またはSQL文の違反ログは常に生成されます。

次の手順で、許可リストが動作しているかの確認を行います。