- Oracle 11g 安全配置
- 口令策略
可以通过创建概要文件来设置和资源配制和密码的安全策略,也可以自定义密码的复杂度。在概要文件中有以下参数是和密码安全有关系的。创建新用户账号时配置参数选择对应的概要文件,之前创建的用户无效,可以通过修改配置使其生效。
创建GTMAP策略代码
CREATE PROFILE GTMAP LIMIT
SESSIONS_PER_USER Default
CPU_PER_SESSION Default
CPU_PER_CALL Default
CONNECT_TIME Default
IDLE_TIME Default
LOGICAL_READS_PER_SESSION Default
LOGICAL_READS_PER_CALL Default
COMPOSITE_LIMIT Default
PRIVATE_SGA Default
FAILED_LOGIN_ATTEMPTS 30 # 在账户被锁住之前可以尝试地登录失败的次数
PASSWORD_LIFE_TIME 90 # 口令的生命周期90天,在此之后口令作废
PASSWORD_REUSE_TIME 90 # 在一个口令作废30天之后才可以重用
PASSWORD_REUSE_MAX 90 #在一个口令可以重用之前的最大变化数
PASSWORD_LOCK_TIME 1 #登录指定的次数失败后,账户将被锁住的1天数
PASSWORD_GRACE_TIME 1 #口令过期之后第1次成功原口令登录后要改变口令的宽免天数
PASSWORD_VERIFY_FUNCTION VERIFY_FUNCTION_11G; #定义口令检验文件函数
PASSWORD_VERIFY_FUNCTION参数口令检验文件函数
SQL> @/database/oracle/product/11.2.0/dbhome_1/rdbms/admin/utlpwdmg.sql
-
- 角色与权限
- 数据库系统中的用户根据工作性质进行分组,之后为每一个组用户创建一个用户角色。
- 将系统的应用进行分类,然后为每一类应用创建一个应用角色
- 将权限首先授予用户角色。
- 最后再将用户角色授予真正的用户
创建角色参考样例:
CREATE ROLE BDCDJ_DEVELOPER IDENTIFIED BY GTMAP;
GRANT DROP ANY TABLE TO BDCDJ_DEVELOPER;
GRANT DROP ANY TRIGGER TO BDCDJ_DEVELOPER;
GRANT DROP ANY VIEW TO BDCDJ_DEVELOPER;
GRANT "CONNECT" TO BDCDJ_DEVELOPER;
GRANT SELECT ON "BDCD"."BDDCDJB" TO BDCDJ_DEVELOPER;
GRANT DELETE ON "BDCD"."BDDCDJB" TO BDCDJ_DEVELOPER;
GRANT INSERT ON "BDCD"."BDDCDJB" TO BDCDJ_DEVELOPER;
GRANT UPDATE ON "BDCD"."BDDCDJB" TO BDCDJ_DEVELOPER;
Oracle提供了一些预定义的角色,这些预定义的角色是在系统安装时自动生成的,可以减轻数据库管理员的工作负担。比较常用的预定义角色如下:
EXP_FULL_DATABASE 导出数据库的权限
IMP_FULL_DATABASE 导入数据库的权限
SELECT_CATALOG_ROLE 查询数据字典的权限
EXECUTE_CATALOG_ROLE 数据字典上的执行权限
DELETE_CATALOG_ROLE 数据字典上的删除权限
DBA、CONNECT、RESOUREC 这3个角色是为以兼容其它版本设置的,注意CONNECT、RESOUREC对应的相关系统权限。.
创建用户样例
CREATE USER BDCDJTEST
IDENTIFIED BY <password>
DEFAULT TABLESPACE BDCD30
TEMPORARY TABLESPACE TEMP
PROFILE GTMAP #对应口令概要文件
ACCOUNT UNLOCK;
GRANT BDCDJ_DEVELOPER TO BDCDJTEST; #对应创建的角色
-
- 数据库访问控制
未限制TNS的登陆IP,仅允许最少的,必要的IP地址可连接TNS监听器,由于ORACLE的TNS监听器有许多安全漏洞,其中的一些漏洞甚至能让入侵者得操作系统的超级用户权限或者修改数据库中的数据,对连接IP的限制也能做至防患于未然,在$ORACLE_HOME/network/admin目录下修改sqlnet.ora文件。
增加IP校验
tcp.validnode_checking=yes #开启IP校验
tcp.invited_nodes=(127.0.0.1,192.168.90.21) #允许通过IP
tcp.excluded_nodes=(10.3.3.4,123.12.2.4) #拒绝通过IP
如果有主机防火墙,建议使用主机防火墙策略控制IP接入限制。
Oracle 默认使用操作系统认证,只要进入系统可直接以sys进入ORACLE,存在较大安全隐患,
增加数据库认证方式
SQLNET.AUTHENTICATION_SERVICES= (NONE,NTS)
修改配置后需重新启动监听才能生效。
由于extproc存在安全问题允许用户不进行身份认证就可以调用系统函数,因此如果不需要该功能必须关闭。修改tnsnames.ora和listener.ora文件,删除含有extproc的条目,使用两个文件中只含用使用的有效连接信息。
样例:
SID_LIST_LISTENER =
(SID_LIST =
(SID_DESC =
(SID_NAME = CLRExtProc)
(ORACLE_HOME = d:\app\product\11.2.0\dbhome_1)
(PROGRAM = extproc)
(ENVS = "EXTPROC_DLLS=ONLY:d:\app\product\11.2.0\dbhome_1\bin\oraclr11.dll")
)
)
安装数据库时默认配置,建议清除。
监听端口配置(listener.ora)
ORALCE 监听默认的端口1521,在不影响业务使用的情况下,可以修改成其它端口减少网络攻击。
修改监听配置文件listener.ora
LISTENER =
(DESCRIPTION_LIST =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = chinamxlpc)(PORT = 1521))
) # 1521 端口修改
)
-
- 数据库审计
Oracle 审计用于用户所执行的数据库操作,默认状态DB模式,记录包含有审计的操作、用户执行的操作、操作的日期和时间等信息,记录存储在system表空间中的AUD$表中,操作系统审计记录存储位置通audit_file_dest参数查询。数据是否打开审计功能,操作系统会强制记录管理员连接实例,启动数据库和关闭数据库记录。Oralce 审计分类三种标准,语句审计、权限审计、对象审计。
审计参数代码
SQL> show parameter aud
NAME TYPE VALUE
-------------------------- ----------- ------------------------------
audit_file_dest string /database/oracle/admin/orcl/adump audit_sys_operations boolean TRUE
audit_syslog_level string
audit_trail string DB
开启审计功能
alter system set audit_sys_operations=TRUE scope=spfile;
alter system set audit_trail=db,extended scope=spfile;
关闭审计功能
alter system set audit_trail=none scope=spfile;
audit_sys_operations参数为true时,系统以os文件记录sysdba身份的登录、开关数据库的操作,以及其它辅助的操作
None:不做审计;
DB:默认值,除了SYSDBA、SYSOPER权限用户以外的其他用户特定操作。
DB,Extended:这样审计结果里面除了连接信息还包含了当时执行的具体语句。
对象审核代码示例
- audit delete,insert,update,select on bdcdj_ha.bdc_cf by access whenever successful;(审计所有用户对bdcdj_ha.bdc_cf表所有成功的 delete,insert,update,select操作,每次操作都会记录)
- audit delete,insert,update,select on bdcdj_ha.bdc_cf by access whenever not successful;(审计所有用户对bdcdj_ha.bdc_cf表所有不成功的 delete,insert,update,select操作,每次操作都会记录)
- audit delete,insert,update,select on bdcdj_ha.bdc_cf by user;(对user用户对bdcdj_ha.bdc_cf的update,delete进行审计)
-
- 漏洞补丁升级
由于Oracle的开放下载政策,Oracle的软件下载没有任何限制,且与付费版本没有任何区别,可以用来学习和测试,但是如果用于商业生产环境就需要主动向Oracle付费购买License,否则有严重的法律风险,尤其是对上市企业来说更是如此。
在这里有很重要的一点需要强调一下,那就是无论从什么渠道下载的软件包一定要验证安装文件的MD5或者SHA值,确保安装软件与官方提供的软件完全一致,否则可能会产生以下两个问题:
-
- 软件包被篡改植入勒索病毒
- 安装包不完整或者损坏
现在很多项目上使用的ORACLE都出现安全漏洞问题,在这里建议去购买官方补丁或者下载官方最新版本使用。如果没有预算费用,那只能做好主机安全,减少数据库服务暴露在外,做好IP限制访问策略,降低风险。
升级补丁情况查看./opatch lsinventory
[oracle@chinamxlpc]$ ./opatch lsinventory
Oracle 临时补丁程序安装程序版本 11.2.0.3.27
版权所有 (c) 2022, Oracle Corporation。保留所有权利。
Oracle 主目录 :/database/oracle/product/11.2.0/dbhome_1
主产品清单:/database/oraInventory
来自 :/database/oracle/product/11.2.0/dbhome_1/oraInst.loc
OPatch 版本 :11.2.0.3.27
OUI 版本 :11.2.0.4.0
日志文件位置:/database/oracle/product/11.2.0/dbhome_1/cfgtoollogs/opatch/opatch2022-10-12_17-24-49下午_1.log
Lsinventory Output file location : /database/oracle/product/11.2.0/dbhome_1/cfgtoollogs/opatch/lsinv/lsinventory2022-10-12_17-24-49下午.txt
--------------------------------------------------------------------------------
Local Machine Information::
Hostname: chinamxlpc
ARU platform id: 226
ARU platform description:: Linux x86-64
已安装的顶级产品 (1):
Oracle Database 11g 11.2.0.4.0
此 Oracle 主目录中已安装 1 个产品。
临时补丁程序 (3) :
Patch 31668908 : applied on Tue May 10 17:52:32 CST 2022
Unique Patch ID: 23800881
Patch description: "OJVM PATCH SET UPDATE 11.2.0.4.201020"
Created on 8 Sep 2020, 03:18:03 hrs PST8PDT
Bugs fixed:
23727132, 19554117, 19006757, 14774730, 18933818, 18458318, 18166577
19231857, 19153980, 19058059, 19007266, 17285560, 17201047, 17056813
19223010, 19852360, 19909862, 19895326, 19374518, 20408829, 21047766
21566944, 19176885, 17804361, 17528315, 21811517, 22253904, 19187988
21911849, 22118835, 22670385, 23265914, 22675136, 24448240, 25067795
24534298, 25076732, 25494379, 26023002, 19699946, 26637592, 27000663
25649873, 27461842, 27952577, 27642235, 28502128, 28915933, 29254615
29774367, 29992392, 29448234, 30160639, 30534664, 30855121, 31306274
30772207, 31476032, 30561292, 28394726, 26716835, 24817447, 23082876
31668867
Patch 29938455 : applied on Tue May 10 17:51:01 CST 2022
Unique Patch ID: 23206871
Patch description: "OCW Patch Set Update : 11.2.0.4.191015 (29938455)"
Created on 23 Aug 2019, 01:51:24 hrs PST8PDT
Bugs fixed:
18328800, 19270660, 18691572, 18508710, 20038451, 21251192, 22162062
20365005, 21232394, 17336871, 17387214, 17750548, 17617807, 14497275
20219458, 17733927, 18180541, 23757020, 18962892, 17292250, 17378618
通过patch 信息可以确认数据库是否更新漏洞补丁。
补丁包升级步骤
-
- 关闭监听 lsnrctl stop
- 关闭数据库 shutdown immediate;
- 拷贝补丁包至服务器
- 检验升级补丁包
[oracle@chinamxlpc]$ opatch prereq CheckConflictAgainstOHWithDetail -ph ./
Oracle Interim Patch Installer version 11.2.0.3.27
Copyright (c) 2021, Oracle Corporation. All rights reserved.
PREREQ session
Oracle 主目录 :/database/oracle/product/11.2.0/dbhome_1
主产品清单:/database/oraInventory
来自 :/database/oracle/product/11.2.0/dbhome_1/oraInst.loc
OPatch 版本 :11.2.0.3.27
OUI 版本 :11.2.0.4.0
日志文件位置:/database/oracle/product/11.2.0/dbhome_1/cfgtoollogs/opatch/opatch2022-10-12_17-24-49下午_1.log
Invoking prereq "checkconflictagainstohwithdetail"
Prereq "checkConflictAgainstOHWithDetail" passed.
OPatch succeeded.
-
- 升级补丁
[oracle@chinamxlpc]$ opatch apply
Oracle Interim Patch Installer version 11.2.0.3.27
Copyright (c) 2021, Oracle Corporation. All rights reserved.
Oracle 主目录 :/database/oracle/product/11.2.0/dbhome_1
Central Inventory : /database/oraInventory
from : /database/oracle/product/11.2.0/db_1/oraInst.loc
OPatch 版本 :11.2.0.3.27
OUI 版本 :11.2.0.4.0
Log file location : /database/oracle/product/11.2.0/db_1/cfgtoollogs/opatch/opatch2021-12-23_23-51-16PM_1.log
Verifying environment and performing prerequisite checks...
OPatch continues with these patches: 17478514 18031668 18522509 19121551 19769489 20299013 20760982 21352635 21948347 22502456 23054359 24006111 24732075 25869727 26609445 26392168 26925576 27338049 27734982 28204707 28729262 29141056 29497421 29913194 30298532 30670774 31103343 31537677 Do you want to proceed? [y|n]y
User Responded with: Y
All checks passed.
升级完后,重启数据库服务。
注:升级数据库漏洞补丁具有一定的风险,所以在再升级补丁之前一定要做好数据的备份和恢复性测试。
-
- 通信信息安全
未使用oracle advanced security在客户端,数据库和应用服务器之间网络通信是没有加密,数据都是以明文传输,在抓包分析中可以获得明文数据,如下图示例,
特别数据库使用云部署模式,访问数据时需经过多个网络设备,甚至经过公共网络,这时不仅要考虑未经过身份验证的用户绕过数据库访问明文数据的企图,还应考虑从丢失、被盗或不当弃用磁盘或备份中读取敏感数据的攻击可能性。
配置客户端、服务器端的加密和完整性参数
# 服务器端配置sqlnet.ora
SQLNET.ENCRYPTION_SERVER = REQUIRED #开启加密
SQLNET.ENCRYPTION_TYPES_SERVER = AES128 #采用AES对称加密算法
SQLNET.CRYPTO_CHECKSUM_SERVER = REQUIRED #需要对数据完整性进行验证
SQLNET.CRYPTO_CHECKSUM_TYPES_SERVER = MD5 #签名算法
#客户端配置sqlnet.ora
SQLNET.CRYPTO_CHECKSUM_CLIENT = accepted
SQLNET.CRYPTO_CHECKSUM_TYPES_CLIENT = MD5
对于应用程序,脚本等都不需要写出用户名密码即可连接数据库,可以参考Oracle钱包管理器(Wallet Manager),管理客户端或服务器上公共密钥(public key )的安全认证。降低了密码泄露的风险。