简述oracle安全加固从哪几个方面入手加固
发布时间:2025-05-22 02:14:49 发布人:远客网络
一、简述oracle安全加固从哪几个方面入手加固
1.1.sysdba用户远程登录限制(查看Oracle登录认证方式)
show parameter remote_login_passwordfile
alter system set remote_login_passwordfile= NONE scope=spfile;
alter system set resource_limit= true;
select* from dba_profiles order by 1;
关注FAILED_LOGIN_ATTEMPTS的设定值
select username,profile from dba_users where account_status='OPEN';
锁定用户:alter user<用户名> lock;
删除用户:drop user<用户名> cascade;
是否存在默认的范例数据库账号scott等,可以考虑删除scott账号
select username,profile from dba_users where account_status='OPEN';
11g数据里面的账户口令本来就是加密存储的。
select limit from dba_profiles where profile='DEFAULT' and resource_name='PASSWORD_VERIFY_FUNCTION';
只需在服务器上的文件$ORACLE_HOME/network/admin/sqlnet.ora中设置以下行:
1.10.超时的空闲远程连接是否自动断开
在$ORACLE_HOME/network/admin/sqlnet.ora中设置下面参数:
#function:to create a safe check report.
#usage: oracle用户登录,执行 sh safeCheck.sh>/tmp/safeCheck.log
sqlplus-S/ as sysdba<<EOF
prompt============================
prompt============================
prompt============================
prompt== 1.sysdba用户远程登录限制
prompt============================
show parameter remote_login_passwordfile
prompt===========================
prompt== 3.登录失败的帐号锁定策略
prompt===========================
select* from dba_profiles order by 1;
prompt关注FAILED_LOGIN_ATTEMPTS参数
prompt===========================
prompt===========================
select username,profile from dba_users where account_status='OPEN';
prompt==========================
prompt==========================
select* from all_users order by created;
prompt===========================
prompt===========================
prompt===========================
prompt== 7.数据库账户口令加密存储
prompt===========================
prompt=============================
prompt== 8.数据库密码安全性校验函数
prompt=============================
select limit from dba_profiles where profile='DEFAULT' and resource_name='PASSWORD_VERIFY_FUNCTION';
more$ORACLE_HOME/network/admin/sqlnet.ora
#tcp.invited_nodes=(ip1,ip2…)
echo===================================
echo== 10.超时的空闲远程连接是否自动断开
echo===================================
more$ORACLE_HOME/network/admin/sqlnet.ora
#function:to execute the script for safe.
#usage: oracle用户登录,执行 sh safeExec.sh>/tmp/safeExec.log
sqlplus-S/ as sysdba<<EOF
prompt============================
prompt============================
prompt============================
prompt== 1.sysdba用户远程登录限制
prompt============================
alter system set remote_login_passwordfile=none scope=spfile;
alter system set resource_limit=true;
prompt===========================
prompt== 3.登录失败的帐号锁定策略
prompt===========================
alter profile default limit FAILED_LOGIN_ATTEMPTS 10;
prompt===========================
prompt===========================
--select username,profile from dba_users where account_status='OPEN';
prompt I think I have nothing to do in this step.
prompt===========================
prompt===========================
prompt===========================
prompt===========================
prompt I think I have nothing to do in this step.
prompt===========================
prompt== 7.数据库账户口令加密存储
prompt===========================
prompt 11g版本,数据库层面就是加密的嘛~
prompt=============================
prompt== 8.数据库密码安全性校验函数
prompt=============================
prompt执行创建安全性校验函数的脚本
more$ORACLE_HOME/network/admin/sqlnet.ora
#tcp.invited_nodes=(ip1,ip2…)
echo===================================
echo== 10.超时的空闲远程连接是否自动断开
echo===================================
more$ORACLE_HOME/network/admin/sqlnet.ora
针对第9和第10步骤中的sqlnet.ora配置文件示例:
注意如果是ASM实例,sqlnet.ora配置文件是grid用户下$ORACLE_HOME/network/admin/sqlnet.ora的。
tcp.invited_nodes=(192.168.99.*)
二、怎样保持Oracle数据库SQL性能的稳定性
1、有客户遇到SQL性能不稳定突然变差导致系统性能出现严重问题的情况对于大型的系统来说 SQL性能不稳定有时突然变差这是常常遇到的问题这也是一些DBA的挑战
2、对于使用Oracle数据库的应用系统有时会出现运行得好好的SQL性能突然变差特别是对于OLTP类型系统执行频繁的核心SQL如果出现性能问题通常会影响整个数据库的性能进而影响整个系统的正常运行对于个别的SQL比如较少使用的查询报表之类的SQL如果出现问题通常只影响少部分功能模块而不会影响整个系统
3、那么应该怎么样保持SQL性能的稳定性?
4、 SQL的性能变差通常是在SQL语句重新进行了解析解析时使用了错误的执行计划出现的下列情况是SQL会重新解析的原因
5、 SQL语句没有使用绑定变量这样SQL每次执行都要解析
6、 SQL长时间没有执行被刷出SHARED POOL再次执行时需要重新解析
7、在SQL引用的对象(表视图等)上执行了DDL操作甚至是结构发生了变化比如建了一个索引
8、重新分析(收集统计信息)了SQL引用的表和索引或者表和索引统计信息被删除
9、当然重启数据库也会使所有SQL全部重新解析
10、 SQL重新解析后跟以前相比性能突然变差通常是下列原因
11、表和索引的优化统计信息被删除或者重新收集后统计信息不准确重新收集统计信息通常是由于收集策略(方法)不正确引起比如对分区表使用*** yze命令而不是用dbms_stats包收集统计信息时采样比例过小等等 Oracle优化器严重依赖于统计信息如果统计信息有问题则很容易导致SQL不能使用正确的执行计划
12、 SQL绑定变量窥探(bind peeking)同时绑定变量对应的列上有直方图或者绑定变量的值变化范围过大分区数据分布极不均匀
13、假如表orders存储所有的订单 state列有种不同的值表示未处理表示处理成功完成表示处理失败 State列上有一个索引表中绝大部分数据的state列为和占少数有下面的SQL
14、 select* from orders where state=:b
15、这里:b是变量在大多数情况下这个值为则应该使用索引但是如果SQL被重新解析而第一次执行时应用传给变量b值为则不会使用索引采用全表扫描的方式来访问表对于绑定变量的SQL只在第一次执行时才会进行绑定变量窥探并以此确定执行计划该SQL后续执行时全部按这个执行计划这样在后续执行时 b变量传入的值为的时候仍然是第一次执行时产生的执行计划即使用的是全表扫描这样会导致性能很差
16、同样假如orders表有一列created_date表示一笔订单的下单时间 orders表里面存储了最近年的数据有如下的SQL
17、 Select* from orders where created_date>=:b;
18、假如大多数情况下应用传入的b变量值为最近几天内的日期值那么SQL使用的是created_date列上的索引而如果b变量值为个月之前的一个值那么就会使用全表扫描与上面描述的直方图引起的问题一样如果SQL第次执行时传入的变量值引起的是全表扫描那么将该SQL后续执行时都使用了全表扫描从而影响了性能
19、对于范围和列表分区可能存在各个分区之间数据量极不均匀的情况下比如分区表orders按地区area进行了分区 P分区只有几千行而P分区有万行数据同时假如有一列product_id其上有一个本地分区索引有如下的SQL
20、 select* from orders where area=:b and product_id=:b
21、这条SQL由于有area条件因此会使用分区排除如果第次执行时应用传给b变量的值正好落在P分区上很可能导致SQL采用全表扫描访问如前面所描述的导致SQL后续执行时全部使用了全表扫描
22、其他原因比如表做了类似于MOVE操作之后索引不可用对索引进行了更改当然这种情况是属于维护不当引起的问题不在本文讨论的范围
23、综上所述 SQL语句性能突然变差主要是因为绑定变量和统计信息的原因注意这里只讨论了突然变差的情况而对于由于数据量和业务量的增加性能逐步变差的情况不讨论
24、为保持SQL性能或者说是执行计划的稳定性需要从以下几个方面着手
25、规划好优化统计信息的收集策略对于Oracle g来说默认的策略能够满足大部分需求但是默认的收集策略会过多地收集列上的直方图由于绑定变量与直方图固有的矛盾为保持性能稳定对使用绑定变量的列不收集列上的直方图对的确需要收集直方图的列在SQL中该列上的条件就不要用绑定变量统计信息收集策略可以考虑对大部分表使用系统默认的收集策略而对于有问题的可以用DBMS_STATS LOCK_STATS锁定表的统计信息避免系统自动收集该表的统计信息然后编写脚本来定制地收集表的统计信息脚本中类似如下
26、 exec dbms_stats unlock_table_stats…
27、 exec dbms_stats gather_table_stats…
28、 exec dbms_stats lock_table_stats…
29、修改SQL语句使用HINT使SQL语句按HINT指定的执行计划进行执行这需要修改应用同时需要逐条SQL语句进行加上测试和发布时间较长成本较高风险也较大
30、修改隐含参数 _optim_peek_user_binds为FALSE修改这个参数可能会引起性能问题(这里讨论的是稳定性问题)
31、使用OUTLINE对于曾经出现过执行计划突然变差的SQL语句可以使用OUTLINE来加固其执行计划在 g中DBMS_OUTLN CREATE_OUTLINE可以根据已有的执行正常的SQL游标来创建OUTLINE如果事先对所有频繁执行的核心SQL使用OUTLINE加固执行计划将最大可能地避免SQL语句性能突然变差
32、注 DBMS_OUTLN可以通过$ORACLE_HOME/rdbms/admin/dbmsol sql脚本来安装
33、使用SQL Profile SQL Profile是Oracle g之后的新功能此处不再介绍请参考相应的文档
34、除此之外可以调整一些参数避免潜在的问题比如将 _btree_bitmap_plans参数设置为FALSE(这个参数请参考互联网上的文章或Oracle文档)
三、数据库安全加固的产品
1、我国已有的安全建设重要围绕着网络防护、主机访问和应用层安全防护以及服务器层安全防护进行,但对真正核心的数据存储管理的核心数据库并没有采取有效的防护措施。网络层安全防护的主要产品有:防火墙、网路隔离设备、入侵检测、防病毒等;应用层安全防护的主要产品有:安全认证、统一授权等;服务器层安全防护的主要产品有:服务器防护、防病毒、入侵检测、主机审计等;数据层安全防护的主要产品有:数据库安全增强、数据库审计、文档防护等,数据层安全防护是存放于服务器内的数据本身的最后一道安全防护屏障,如果网络层、应用层和服务器层的安全防护被攻破,只要数据层安全防护有效,就不致予泄露敏感数据。可见数据层安全防护的重要性。
2、世界最大职业中介网站Monster遭到黑客大规模攻击,黑客窃取在网站注册的数百万求职者个人信息,并进行勒索;程序员程稚瀚四次侵入北京移动充值中心数据库,盗取充值卡密码,获利300多万元。2003年广东联通7名人员,利用内部工号和密码,对欠费停机手机进行充值,使联通损失260万元。2005年12月25日,美国银行披露,2004年12月下旬,丢失了包括1200万信用卡信息的磁带备份.---Gartner Research;CSI/FBI 2005年计算机犯罪和和安全会的相关报告中提到70%的信息系统数据丢失和遭受攻击,都来自于内部。
3、当前主流Oracle安全增强方案包括前置代理、应用加密和Oracle自带加密选件DTE等。前置代理需要应用大幅改造、大量Oracle核心特性无法使用;应用加密必须由应用实现数据加密,加密数据无法检索,已有系统无法透明移植;DTE不能集成国产加密算法,不符合国家密码政策。因此这几种方案一直未能得到有效推广。