2022 Zabbix中国峰会
2022 Zabbix中国峰会

3. Oracle

概述

本节包含以安全方式设置 Oracle 数据库的最佳实践。

对于典型设置,建议遵循默认的 Oracle 创建数据库说明, 其中包括创建对 Zabbix 数据库具有完全权限的“zabbix“用户。此用户是数据库所有者, 在升级Zabbix 时还具有修改数据库结构所需的权限。

为了提高安全性,建议创建具有最小权限的其他数据库用户。 这些用户应根据最小权限原则进行配置,即他们应仅具有执行预期功能所必需的权限。

自 Zabbix 7.0 起,对 Oracle DB 的支持已弃用。

创建用户

假设数据库 (PDB) 所有者是usr_owner,建议创建两个具有相应权限的额外用户(用于日常操作):

  • usr_srv - 运行 Zabbix 服务器的用户;
  • usr_web - 运行 Zabbix 前端和 API 的用户。

usr_owner 这些用户必须由 PDB 所有者 ( ) 使用以下命令创建:

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;

表的恢复和升级应由数据库所有者执行。

创建用户后,继续创建同义词。

生成同义词

下面的脚本创建同义词,以便USR_SRVUSR_WEB可以访问USR_OWNER模式中的表,而无需明确指定模式。

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;
       /

每次创建或更改 Zabbix 数据库结构后都应运行此脚本(例如,在 Zabbix 升级后创建或重命名某些表)。