[comment]: # ({31139eac-9c6ef8ce})
# 3 Oracleのセキュリティ保護

[comment]: # ({/31139eac-9c6ef8ce})

[comment]: # ({02a97e07-63c3fcd8})
#### 概要

このセクションでは、Oracleデータベースを安全に保護するためのベストプラクティスを説明します。

::: noteclassic
基本的なセットアップについては、デフォルトの[Oracleデータベース作成](/manual/appendix/install/oracle)手順を参照してください。これには、Zabbixデータベースに対するすべての権限を持つ「zabbix」ユーザーの作成が含まれます。
このユーザーはデータベース所有者であり、Zabbixの[アップグレード](/manual/installation/upgrade)時にデータベース構造を変更するために必要な権限も持っています。
:::

セキュリティを向上させるため、最小限の権限を持つ追加のデータベースユーザーを作成することを推奨します。
これらのユーザーは、[最小権限の原則](/manual/best_practices/security/access_control#principle-of-least-privilege)に基づいて設定する必要があります。
つまり、意図された機能を実行するために不可欠な権限のみを付与する必要があります。

::: noteimportant
Oracle DBのサポートは、Zabbix 7.0以降で非推奨です。
:::

[comment]: # ({/02a97e07-63c3fcd8})

[comment]: # ({2b087e5a-4e42615b})
#### ユーザーの作成

プラガブルデータベース（PDB）の所有者が `usr_owner` であると仮定すると、対応する権限を持つ追加のユーザーを2つ作成することを推奨します（通常運用向け）:

-   **usr_srv** - Zabbixサーバーを実行するためのユーザー
-   **usr_web** - Zabbix WebインターフェースおよびAPIを実行するためのユーザー

これらのユーザーは、以下のコマンドを使用してPDB所有者（`usr_owner`）が作成する必要があります:

```sql
CREATE USER usr_srv IDENTIFIED BY "usr_srv" DEFAULT TABLESPACE "usr_owner" TEMPORARY TABLESPACE temp;
CREATE USER usr_web IDENTIFIED BY "usr_web" DEFAULT TABLESPACE "usr_owner" TEMPORARY TABLESPACE temp;

GRANT CREATE SESSION, DELETE ANY TABLE, INSERT ANY TABLE, SELECT ANY TABLE, UPDATE ANY TABLE, SELECT ANY SEQUENCE TO usr_srv;
GRANT CREATE SESSION, DELETE ANY TABLE, INSERT ANY TABLE, SELECT ANY TABLE, UPDATE ANY TABLE, SELECT ANY SEQUENCE TO usr_web;
```

::: noteclassic
テーブルの復元およびアップグレードは、データベース所有者が実行する必要があります。
:::

ユーザーを作成した後、シノニムの作成に進んでください。

[comment]: # ({/2b087e5a-4e42615b})

[comment]: # ({2f210836-e9496d48})
#### シノニムの生成

以下のスクリプトは[シノニムを作成](https://docs.oracle.com/en/database/oracle/oracle-database/23/sqlrf/CREATE-SYNONYM.html#GUID-A806C82F-1171-478E-A910-F9C6C42739B2)し、`usr_srv` と `usr_web` がスキーマを明示的に指定しなくても `usr_owner` スキーマ内のテーブルにアクセスできるようにします。

```sql
BEGIN
FOR x IN (SELECT owner,table_name FROM all_tables WHERE owner ='usr_owner')
LOOP
  EXECUTE IMMEDIATE 'CREATE OR REPLACE SYNONYM usr_srv.'|| x.table_name ||' FOR '||x.owner||'.'|| x.table_name;
  EXECUTE IMMEDIATE 'CREATE OR REPLACE SYNONYM usr_web.'|| x.table_name ||' FOR '||x.owner||'.'|| x.table_name;
END LOOP;
END;
/
```

::: noteimportant
このスクリプトは、Zabbixデータベース構造の作成後または変更後に毎回実行する必要があります（たとえば、Zabbixのアップグレード後に一部のテーブルが作成または名前変更された場合）。
:::

[comment]: # ({/2f210836-e9496d48})
