Oracle数据库安全及参数配置
2024-04-09魏万琼王亦然
魏万琼?王亦然
摘要:Oracle数据库在部署和使用之前决定是否部署安全措施很重要,用户在实施与维护的过程中都需要提前考虑好是否采取安全措施和实施安全策略。基于安全部署的数据库,可以为后期使用和等保测评避免很多麻烦。除了在网络硬件设备和防火墙设备上采用安全措施以外,还可以在系统的防火墙上实施数据库的访问IP及端口的限制策略。其次在数据库安装完成后也需要考虑数据库的补丁升级和是否对数据库的用户和资源做限制策略。
关键词:Oracle;防火墙策略;数据库安全
一、前言
所有存储在数据库中的数据都是有价值的,为了防止数据被篡改和窃取,可以采用很多措施限制数据库的访问来保护数据的安全。比如在物理防火墙上做网络访问控制,或者使用堡垒机进行身份验证及授权,以此来确保访问的用户及IP地址是否在可访问的范围内。本篇主要讲述了从系统层面上做防火墙策略,以及数据库用户上做一些配置来限制数据的访问,通过审计来保存访问记录,以此来做一些数据库安全上的防护措施。
二、网络安全配置
在安装Oracle数据库的时候,为避免出现网络连通性的问题而导致数据库安装失败,会选择关闭系统防火墙。避免因为网络无法联通的问题而无法安装RAC集群[1]。从安全的角度考虑,关闭系统防火墙是不可取的。安装Oracle数据库集群之前,就需要进行防火墙的配置,除了开放主机IP地址、私网IP地址、虚拟IP地址和SCAN IP地址的访问权限,还需要节点之间的169.254.*网段的IP访问权限。如图1所示,10.10.20.0代表主机IP地址、虚拟IP地址和SCAN IP地址的网段。192.168.10.1和192.168.10.2是私网IP地址。169.254.*IP网段就是RAC集群中ora.cluster_interconnect.haip所需要的网段地址,启动集群服务的也需要节点之间这个网段的IP地址互通,以此来实现集群的高可用和负载均衡。
如果需要具体到端口,RAC除了开放监听端口(默认1521),还需要开放8000-65500之间的端口。数据库安装完成后,可以通过配置sqlnet.ora文件,设置TCP.VALIDNODE_CHECKING、TCP.EXCLUDED_NODES和TCP.INVITED_NODES參数来客户端限制访问数据库。
三、用户资源限制
每一个Oracle数据库用户都有一个配置文件,存在于数据库中的一组可命名资源限制集,用于限制用户对数据库的连接访问和资源使用。在创建用户的时候,Oracle数据库会自动为用户分配一个名为DEFAULT的配置文件[2-3]。也可以通过SQL查看DEFAULT命名的配置文件在密码和资源上的配置策略,如图2所示。
根据图2的信息,对RESOURCE_NAME列的各项参数进行简单讲述,在数据库实际使用中可以根据具体需求,进行参数修改来实现数据库用户限制。
(一)COMPOSITE_LIMIT
针对指定会话的总资源消耗成本进行资源限制,需要综合CPU_PER_SESSION、LOGICAL_READS_PER_SESSION 和 PRIVATE_SGA 来取值。
(二)SESSIONS_PER_USER
用于限制该用户访问数据库的并发会话数,当数据库用户的SESSION值超过这个参数值就会报错ORA-02391。
(三)CPU_PER_SESSION
指定会话的CPU时间限制,以1%秒为单位,推荐它的LIMIT值为unlimited。
(四)CPU_PER_CALL
指定调用的CPU时间限制,以1%秒为单位。
(五)LOGICAL_READS_PER_SESSION
指定会话中允许从存储器和磁盘读取的数据块数。
(六)LOGICAL_READS_PER_CALL
指定允许调用处理SQL语句读取的数据块数。
(七)IDLE_TIME
指定会话期间允许的连续不活动时间限制,以分钟为单位,超过这个时间限制,会话就会断开,主要针对不活动的会话进程,长时间运行的会话不受此限制。
(八)CONNECT_TIME
指定所有状态的会话连接时间限制,以分钟为单位。
(九)PRIVATE_SGA
指定会话可以在系统全局区域的共享池中分配的私有空间大小,以字节表示。
1到9的参数都属于资源限制,需要设置数据库参数RESOURCE_LIMIT = TRUE 并重新启动数据库,参数设置才能生效。
(十)FAILED_LOGIN_ATTEMPTS
设置用户在锁定账户之前尝试登录的失败次数,超过失败次数,用户将被锁定。
(十一)PASSWORD_LIFE_TIME
设置用户使用当前密码的天数,超过这个天数,密码则过期。用户在下次登录时,系统会提示用户修改密码。
(十二)PASSWORD_REUSE_TIME
指定一个天数,在这个天数范围内,设置密码不能重复,通过设置此参数来控制密码的重复使用天数。
(十三)PASSWORD_REUSE_MAX
设置密码在多少次之内都不能重复,通过设置此参数来控制密码的重复使用次数,可以和PASSWORD_REUSE_TIME结合使用。
(十四)PASSWORD_LOCK_TIME
设置在指定的连续登录尝试失败次数后锁定账户的天数。锁定时间过去后,该账户将被解锁。这个配置参数有助于防止用户密码被暴力攻击。
(十五)PASSWORD_GRACE_TIME
设置用户在密码过期之前必须更改密码的天数,数据库会在这个天数内提醒用户密码将过期。
(十六)PASSWORD_VERIFY_FUNCTION
设置一个PL/SQL密码验证脚本为参数传递到配置文件中,主要用于检查数据库用户的密码复杂度。Oracle提供了一个默认密码验证脚本utlpwdmg.sql,存放在$ORACLE_HOME/rdbms/admin/目录下。
配置verify_function_11G函数的方法,需要执行者拥有dba权限的用户登录数据库,执行以下步骤:
第一步:创建系统默认的口令复杂度函数
SQL>@?rdbms/admin/utlpwdmg.sql
第二步:创建一个自定义profile,设置密码复杂度。
如创建MY_PROFILE引用verify_function_11G函数:
SQL> create profile MY_PROFILE limit PASSWORD_VERIFY_FUNCTION verify_function_11G;
第三步:將MY_PROFILE应用于用户USTEST
SQL> alter user USTEST profile MY_PROFILE;
十到十六的参数属于密码配置实时生效,不需要重启数据库。
四、审计
(一)标准审计
审计是对数据库内部控制强有力的有效管理办法,监视和记录用户在数据库的操作,严格控制用户和应用程序对数据库的访问。
Oracle会将审计跟踪的内容写入数据字典表或操作系统日志文件中。
通过设置参数audit_trail=DB或者OS来打开数据库审计,每次修改参数之后需要重新启动数据库才能生效。
参数值是指定审计记录指定审计记录写入的目的地和写入的数据类型,NONE指的是不启动审计功能。
通过使用AUDIT和NOAUDIT语句来配置和删除配置进行审计相关操作。
以下从语句审计、权限审计、对象审计和网络审计四个方面讲述。
1.语句审计
Oracle数据库可以选择审计语句执行成功的记录,也可以选择审计没有执行成功的记录,或者是执行成功和执行不成功的语句都记录。监控未执行的SQL可能会暴露正在窥探或有恶意行为的用户。
数据库分别记录SQL语句的每次执行、权限的使用以及审计对象的访问,根据记录的返回信息可以了解执行次数。审计记录中有单独的LOGON和LOGOFF条目。举例,审计执行没有成功的语句:
SQL> AUDIT INSERT TABLE, DELETE TABLE BY ACCESS WHENEVER NOT SUCCESSFUL;
2.权限审计
权限审计选项与其对应的系统权限相同。举例,审核DELETE ANY TABLE权限:
SQL> AUDIT DELETE ANY TABLE BY ACCESS;
3.对象审计
对象审计可以审计引用表、视图、序列、独立存储过程或函数以及包的语句,在集群模式下,通过审计操作来间接审计对象的访问。举例,配置HR用户下的EMPLOYEES表相关操作:
SQL> AUDIT INSERT, DELETE ON HR.EMPLOYEES BY ACCESS WHENEVER SUCCESSFUL;
4.审计网络活动
可以使用AUDIT审计网络协议和网络层中的错误语句,这些错误以SQL*Net驱动程序抛出;网络审计在审计记录的字段中列出了客户端的身份验证类型和可用的 SQL*Net 地址。例如,配置网络审计:
SQL> AUDIT NETWORK BY ACCESS;
(二)细粒度审计
细粒度审计能够创建策略对特定类型的SQL语句进行审计,根据内容监控数据访问,提供提供DML操作的细粒度审计操作的细粒度审计。可以通过查询视图DBA_FGA_AUDIT_TRAIL查找审计策略生成的记录。
使用DBMS_FGA.ADD_POLICY创建细粒度审计策略,如果需要修改策略,则将其删除重建。当暂时不需要审计策略的时候,可以使用DBMS_FGA.DISABLE_POLICY禁用审计策略,禁用后也可以使用DBMS_FGA.ENABLE_POLICY重新启用审计策略,如果不再需要审计策略,可以使用DBMS_FGA.DROP_POLICY删除审计策略。
五、结语
从网络安全要求出发,做好网络安全是应尽职责。在数据库创建之前就应该做好安全上的规划,无论是在数据库的系统以及配置文件做安全访问控制,还是配置数据库用户的访问资源限制,包括配置用户审计等一切安全措施,都是为了保护生产业务的数据库安全,防止数据被窃取或篡改的一种手段。
参考文献
[1]周文琼,王乐球,郑述招.Oracle网络的配置与管理[J].计算机与数字工程,2014,42(12):2350-2353+2368.
[2]韦壹刚.Oracle数据库日常维护与优化建议[J].信息与电脑(理论版),2018(08):142-143.
[3]陈飞.Oracle数据库日常维护与优化[J].电子技术与软件工程,2017(21):174.
责任编辑:王颖振、周航