ホームページ >バックエンド開発 >PHPチュートリアル >PHP で Oracle データベースのロギングおよび監査機能を使用する方法

PHP で Oracle データベースのロギングおよび監査機能を使用する方法

PHPz
PHPzオリジナル
2023-07-12 14:58:591356ブラウズ

PHP で Oracle データベースのロギングおよび監査機能を使用する方法

Oracle データベースは、データベースのすべての操作を記録および追跡して、データベースのセキュリティとトレーサビリティを確保できる強力なロギングおよび監査機能を提供します。 . .この記事では、PHP で Oracle データベースのログ機能と監査機能を使用する方法と、対応するコード例を紹介します。

1. Oracle データベースのログ機能と監査機能を有効にする
Oracle データベースのログ機能と監査機能を使用するには、まず対応する設定がデータベースで有効になっていることを確認する必要があります。次の手順で有効にできます。

  1. Oracle データベースにシステム アカウントでログインし、次のコマンドを実行します:

    ALTER SYSTEM SET AUDIT_TRAIL=' DB,EXTENDED' SCOPE =SPFILE;

    このコマンドは、データベース レベルの監査機能を有効にし、データベース独自の監査テーブルに監査ログを書き込みます。

  2. データベースを再起動して、構成を有効にします。

2. PHP での Oracle データベースのログ機能と監査機能の使用
PHP で Oracle データベースのログ機能と監査機能を使用するには、Oracle 拡張機能パッケージを使用する必要があります。次の手順に従って PHP 環境を構成できます。

  1. php.ini ファイルで、次の行を見つけてコメントを解除します。

    ;extension=oci8_12c

    これを次のように変更します:

    extension=oci8_12c

    ファイルを保存し、Web サーバーを再起動して構成を有効にします。

  2. Oracle データベースのログ機能と監査機能を PHP コードで使用するには、まずデータベースに接続する必要があります。次のコード例を使用してデータベースに接続できます:

    $conn = oci_connect('username', 'password', 'hostname/service_name');
    if ( !$conn ) {

     $e = oci_error();
     trigger_error(htmlentities($e['message'], ENT_QUOTES), E_USER_ERROR);

    }
    ?>

    上記のコードでは、「username」はデータベースのユーザー名を表し、「password」はデータベースのパスワードを表します。 、「hostname/service_name」はデータベースの接続アドレスとサービス名を表します。

  3. データベースに正常に接続したら、データベースの操作を開始し、操作を監査ログに記録できます。簡単なコード例を次に示します。

    $sql = "INSERT INTO 従業員 (employee_id, first_name, last_name)

         VALUES (1, 'John', 'Doe')";
    

    $stmt = oci_parse($conn, $ sql);
    oci_execute($stmt);

    if ($stmt) {

     oci_commit($conn);
     oci_free_statement($stmt);
     oci_close($conn);
     
     // 记录审计日志
     $audit_sql = "AUDIT INSERT TABLE employees BY access WHENEVER SUCCESSFUL;";
     $audit_stmt = oci_parse($conn, $audit_sql);
     oci_execute($audit_stmt);
     
     oci_commit($conn);
     oci_free_statement($audit_stmt);
     oci_close($conn);

    }
    ?>

    上記のコードでは、まず、データの挿入操作が行われた後、監査ログの記録操作が行われますが、監査ログを記録する場合は、SQL文AUDITを使用して記録し、BY句に操作の種類と対象オブジェクトを指定する必要があります。

3. 監査ログのクエリと分析
PHP で対応する SQL ステートメントを使用して、Oracle データベースの監査ログのクエリと分析を行うことができます。次に例を示します。

php
$conn = oci_connect('ユーザー名', 'パスワード', 'ホスト名/サービス名');
if (!$conn) {

$e = oci_error();
trigger_error(htmlentities($e['message'], ENT_QUOTES), E_USER_ERROR);

}

$sql = "SELECT ユーザー名、os_username、userhost、ターミナル、タイムスタンプ、action_name、returncode

    FROM dba_audit_trail
    WHERE timestamp >= TO_DATE('2022-01-01', 'YYYY-MM-DD')
        AND timestamp < TO_DATE('2022-01-02', 'YYYY-MM-DD')
    ORDER BY timestamp";

$stmt = oci_parse($conn, $sql);
oci_execute($ stmt);

while (($row = oci_fetch_assoc($stmt)) != false) {

echo "用户名:" . $row['USERNAME'] . "<br>";
echo "操作系统用户名:" . $row['OS_USERNAME'] . "<br>";
echo "用户主机名:" . $row['USERHOST'] . "<br>";
echo "终端:" . $row['TERMINAL'] . "<br>";
echo "时间戳:" . $row['TIMESTAMP'] . "<br>";
echo "操作类型:" . $row['ACTION_NAME'] . "<br>";
echo "返回代码:" . $row['RETURNCODE'] . "<br>";
echo "<hr>";

}

oci_free_statement($stmt);
oci_close ($conn);
? >

上記のコードでは、SQL ステートメント SELECT を使用して、監査テーブルから指定された期間内の監査レコードをクエリし、タイムスタンプに従って並べ替えます。次に、 oci_fetch_assoc 関数を使用して結果セットを反復処理し、関連するフィールドの値を出力します。

実際のアプリケーションでは、実際の監査ニーズを満たすために、特定のニーズに応じてクエリ条件と分析方法をカスタマイズできます。

概要:
この記事では、PHP で Oracle データベースのログ機能と監査機能を使用する方法を紹介し、対応するコード例を示します。データベースの監査機能を有効にし、PHP コードで監査ログを記録およびクエリすることにより、データベース操作のセキュリティとトレーサビリティを向上させることができます。読者の皆様が、この記事で提供されている方法と例に基づいて、独自のログ機能と監査機能を実装できることを願っています。

以上がPHP で Oracle データベースのロギングおよび監査機能を使用する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。