On this page
3 保护 Oracle
概述
本节包含用于保护 Oracle 数据库的最佳实践。
对于基本设置,请参阅默认的 Oracle 数据库创建 说明,其中包括创建对 Zabbix 数据库具有完全权限的 'zabbix' 用户。 该用户是数据库所有者,在 升级 Zabbix 时,也拥有修改数据库结构所需的必要权限。
为提高安全性,建议创建具有最小权限的额外数据库用户。 这些用户应根据 最小权限原则 进行配置, 也就是说,它们只应拥有执行预期功能所必需的权限。
自 Zabbix 7.0 起,已弃用对 Oracle DB 的支持。
创建用户
假设可插拔数据库(PDB)所有者为 usr_owner,建议再创建两个具有相应权限的附加用户(用于日常操作):
- usr_srv - 用于运行 Zabbix 服务器的用户;
- usr_web - 用于运行 Zabbix 前端和 API 的用户。
这些用户必须由 PDB 所有者(usr_owner)使用以下命令创建:
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_srv 和 usr_web 就可以在不显式指定 schema 的情况下访问 usr_owner schema 中的表。
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 后,如果创建或重命名了某些表)。