Oracle数据库系统安全配置手册0603Word文档下载推荐.docx
《Oracle数据库系统安全配置手册0603Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《Oracle数据库系统安全配置手册0603Word文档下载推荐.docx(20页珍藏版)》请在冰点文库上搜索。
![Oracle数据库系统安全配置手册0603Word文档下载推荐.docx](https://file1.bingdoc.com/fileroot1/2023-5/3/1c13106e-b93d-48c7-88d5-294c36ecae85/1c13106e-b93d-48c7-88d5-294c36ecae851.gif)
ands.privilege='
EXECUTE'
ands.table_namelike'
UTL%'
;
3修改所有系统账户默认口令,锁定不需要的账户
为了安全考虑,应用锁定Oracle当中不需要的用户;
或改变缺省用户的密码。
在sqlplus中查看所有账户及其状态:
selectusername,account_statusfromdba_users;
修改默认账户的口令:
ALTERUSERuser_nameIDENTIFIEDBYpassword;
锁定不需要的用户,使用SQL语句:
ALTERUSERuserPASSWORDEXPIRE;
注意锁定MGMT_VIEW、DBSNMP、SYSMAN帐号或修改密码。
(如果要使用DBConsole,MGMT_VIEW,DBSNMP、SYSMAN不能锁定,请修改密码)
DIP、EXFSYS、OUTLN、TSMSYS、WMSYS默认已锁定,请验证。
4删除多余自建账号
dropuseruser_namecascade;
5$ORACLE_HOME/bin目录权限保护
确保对$ORACLE_HOME/bin目录的访问权限尽可能少
运行命令:
chown-Roracle:
dba$ORACLE_HOME/bin(此命令在root用户下操作)
ls-l$ORACLE_HOME/bin确保该目录下的文件属主为oracle用户,且其他用户没有写权限。
6监听listener作ip访问限制
修改(需重启监听)
$ORACLE_HOME/network/admin/sqlnet.ora:
tcp.validnode_checking=yes
tcp.invited_nodes=(localhost,本机ip,应用服务器ip,管理机ip等)
重启监听:
lsnrctlstop;
lsnrctlstart。
7关闭远程操作系统认证
设置正确识别客户端用户,并限制操作系统用户数量(包括管理员权限、root权限、普通用户权限等)
1.使用文本方式,打开数据库配置文件init<
sid>
.ora;
设置参数REMOTE_OS_AUTHENT值为FALSE(SAP系统不可设置为False)
2.在数据库的账户管理中删除不必要的操作系统账号
设置(需重启数据库):
altersystemsetremote_os_authent=falsescope=spfile;
SQL>
showparameterremote_os_authent
NAMETYPEVALUE
----------------------------------------------------------------------------
remote_os_authentbooleanFALSE
8修改默认的监听端口
$ORACLE_HOME/network/admin/listener.ora:
(ADDRESS=(PROTOCOL=TCP)(HOST=127.0.0.1)(PORT=1521))
修改PORT的值为新的监听端口->
(ADDRESS=(PROTOCOL=TCP)(HOST=127.0.0.1)(PORT=3521))
确认:
lsnrctlstatus
9监听程序的管理
通过设置listener.ora文件中的参数ADMIN_RESTRICTIONS_listener_name来防止远程对监听程序的非授权管理。
在$ORACLE_HOME/network/admin/listener.ora文件中,设置ADMIN_RESTRICTIONS_(listener_name)=ON。
LISTENER加访问密码:
(only9i)
$ORACLE_HOME/network/admin/listener.ora
PASSWORDS_LISTENER=
10g:
(监听默认为本地操作系统帐号认证,即禁止远程管理)
Lsnrctlstatus,查看输出
SecurityON:
LocalOSAuthentication
10密码策略
在Oracle,我们可以通过修改用户概要文件来设置密码的安全策略,可以自定义密码的复杂度。
在概要文件中有以下参数是和密码安全有关心的:
FAILED_LOGIN_ATTEMPTS:
最大错误登录次数
PASSWORD_GRACE_TIME:
口令失效后锁定时间
PASSWORD_LIFE_TIME:
口令有效时间
PASSWORD_LOCK_TIME:
登录超过有效次数锁定时间
PASSWORD_REUSE_MAX:
口令历史记录保留次数
PASSWORD_REUSE_TIME:
口令历史记录保留时间
PASSWORD_VERIFY_FUNCTION:
口令复杂度审计函数
解释:
口令使用期限(按照国网要求,三个月修改一次密码,即90天)。
password_grace_time指的是在你的密码已经过期以后,第一次登录时间开始往后统计,使系统可以使用的日期限度.
PASSWORD_REUSE_TIME是重用密码的最小时间间隔,单位是天。
可以给出整数或分数,如1/1440表示1分钟(出于效率的考虑,oracle不会每分钟都去进行检查,一般来说,有5分钟左右的误差,因此如果这个数小于1/144则没有多大的意义)。
PASSWORD_REUSE_MAX是重用密码前更换密码的最小次数。
ALTERPROFILEdefaultLIMITFAILED_LOGIN_ATTEMPTS60;
(三级系统应设置在10次以内,二级系统在20次以内)
ALTERPROFILEdefaultLIMITPASSWORD_LOCK_TIME0.5;
修改Oracle提供的验证函数文件$ORACLE_HOME/rdbms/admin/utlpwdmg.sql
其中IFlength(password)<
4一行改为<
8,并将最后一段修改为
ALTERPROFILEDEFAULTLIMIT
PASSWORD_LIFE_TIME90
FAILED_LOGIN_ATTEMPTS20
PASSWORD_LOCK_TIME30/1440
PASSWORD_VERIFY_FUNCTIONverify_function;
在sqlplus中执行start$ORACLE_HOME/rdbms/admin/utlpwdmg.sql
设置后,密码复杂度必须包含字母、数字、标点(密码不区分大小写),最小长度为8。
最大错误登录次数为20次,账号锁定时间为30分钟
OEM-》安全性-》概要文件
select*fromdba_profiles;
创建验证函数:
(建议使用sys来创建该函数,否则可能出现问题)
CREATEORREPLACEFUNCTIONverify_function
(usernamevarchar2,
passwordvarchar2,
old_passwordvarchar2)
RETURNbooleanIS
nboolean;
minteger;
differinteger;
isdigitboolean;
ischarboolean;
ispunctboolean;
digitarrayvarchar2(20);
punctarrayvarchar2(25);
chararrayvarchar2(52);
BEGIN
digitarray:
='
0123456789'
chararray:
abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ'
punctarray:
='
!
"
#$%&
()``*+,-/:
<
=>
?
_'
--Checkifthepasswordissameastheusername
IFNLS_LOWER(password)=NLS_LOWER(username)THEN
raise_application_error(-20001,'
Passwordsameasorsimilartouser'
);
ENDIF;
--Checkfortheminimumlengthofthepassword
IFlength(password)<
8THEN
raise_application_error(-20002,'
Passwordlengthlessthan8'
--Checkifthepasswordistoosimple.Adictionaryofwordsmaybe
--maintainedandacheckmaybemadesoasnottoallowthewords
--thataretoosimpleforthepassword.
IFNLS_LOWER(password)IN('
welcome'
'
database'
account'
user'
password'
oracle'
computer'
abcd'
)THEN
Passwordtoosimple'
--Checkifthepasswordcontainsatleastoneletter,onedigitandone
--punctuationmark.
--1.Checkforthedigit
isdigit:
=FALSE;
m:
=length(password);
FORiIN1..10LOOP
FORjIN1..mLOOP
IFsubstr(password,j,1)=substr(digitarray,i,1)THEN
=TRUE;
GOTOfindchar;
ENDLOOP;
IFisdigit=FALSETHEN
raise_application_error(-20003,'
Passwordshouldcontainatleastonedigit,onecharacterandonepunctuation'
--2.Checkforthecharacter
<
findchar>
>
ischar:
FORiIN1..length(chararray)LOOP
IFsubstr(password,j,1)=substr(chararray,i,1)THEN
GOTOfindpunct;
IFischar=FALSETHEN
Passwordshouldcontainatleastone\
digit,onecharacterandonepunctuation'
--3.Checkforthepunctuation
findpunct>
ispunct:
FORiIN1..length(punctarray)LOOP
IFsubstr(password,j,1)=substr(punctarray,i,1)THEN
GOTOendsearch;
IFispunct=FALSETHEN
endsearch>
--Checkifthepassworddiffersfromthepreviouspasswordbyatleast
--3letters
IFold_passwordISNOTNULLTHEN
differ:
=length(old_password)-length(password);
IFabs(differ)<
3THEN
length(old_password)THEN
ELSE
=length(old_password);
=abs(differ);
FORiIN1..mLOOP
IFsubstr(password,i,1)!
=substr(old_password,i,1)THEN
=differ+1;
IFdiffer<
raise_application_error(-20004,'
Passwordshoulddifferbyat\
least3characters'
--Everythingisfine;
returnTRUE;
RETURN(TRUE);
END;
/
11数据库操作审计
ORACLE数据库具有对其内部所有发生的活动的审计能力,审计日志一般放在sys.aud$表中,也可以写入操作系统的审计跟踪文件中。
可审计的活动有三种类型:
登录尝试、数据库活动和对象存取,缺省情况下,数据库不启动审计,要求管理员配置数据库后才能启动审计。
使用文本方式,打开数据库配置文件init<
.ora,更改以下参数配置AUDIT_TRAIL=True。
init<
.ora所在路径:
$ORACLE_HOME/database/(windows)
$ORACLE_HOME/dbs/(Unix\Linux)
接下来在sqlplus中执行以下两条命令:
altersystemsetaudit_trail='
OS'
scope=spfile;
altersystemsetAudit_sys_operations=truescope=spfile;
默认为false,当设置为true时,所有sys用户(包括以sysdba,sysoper身份登录的用户)的操作都会被记录
showparameteraudit
audit_sys_operationsbooleanTRUE
audit_trailstringOS
TRANSACTION_AUDITING:
thetransactionlayergeneratesaspecialredorecordwhichcontainssessionanduserinformation.Theserecordsmightbeusefulifusingaredologanalysistool.
AUDIT_FILE_DEST指定了当审外部审记文件目标存储路径,其缺省值是$ORACLE_HOME/rdbms/audit
audit_file_deststring/opt/oracle/admin/cognos/adump
监听器日志错误登录
/opt/oracle/product/10.2.0/db_1/network/log/listener.log
12安全补丁的更新
及时更新数据库的安全补丁,减少数据库系统可能受到的攻击。
查看,下载并安装相关的安全补丁。
参考Oracle厂商建议,仅对已发现的特定漏洞或缺陷安装相应补丁。
13Oracle数据字典的保护
设置保护后,可防止其他用户(具有‘ANY’systemprivileges)使用数据字典时,具有相同的‘ANY’权限。
更改以下参数O7_DICTIONARY_ACCESSIBILITY=。
1.Oracle9i、10g:
缺省值是False
2.Oracle8i:
缺省值是True,需要改成False
3.如果用户必须需要该权限,赋予其权限SELECTANYDICTIONARY
showparameterO7_DICTIONARY_ACCESSIBILITY
O7_DICTIONARY_ACCESSIBILITYbooleanFALSE
14关闭Extproc功能
由于extproc存在安全问题允许用户不进行身份认证就可以调用系统函数,因此,如果不需要该功能必须关闭。
修改TNSNAMES.ORA和LISTENER.ORA文件,删除以下条目:
●icache_extproc
●PLSExtproc
●Extproc
tnsnames.ora:
#EXTPROC_CONNECTION_DATA=
#(DESCRIPTION=
#(ADDRESS_LIST=
#(ADDRESS=(PROTOCOL=IPC)(KEY=EXTPROC0))
#)
#(CONNECT_DATA=
#(SID=PLSExtProc)
#(PRESENTATION=RO)
listener.ora:
#(SID_DESC=
#(SID_NAME=PLSExtProc)
#(ORACLE_HOME=/opt/oracle/product/10.2.0/db_1)
#(PROGRAM=extproc)
15DBSNMP用户的保护
Oracle数据库系统如果采用典型安装后,自动创建一个叫做DBSNMP的用户,该用户允许Oracle系统的智能代理(intelligentAgent),该用户的缺省密码也是“DBSNMP”。
如果忘记修改该用户的口令,任何人都可以通过该用户存取数据库系统。
其他有威胁的帐号还有:
CTXSYS,MDSYS,ORDPLUGINS,ORDSYS,OUTLN等。
锁定该账号,或者更换密码
16SYS用户
Oracle数据库系统安装后,自动创建一个叫做SYS的数据库管理员用户,当该用户sysdba方式连接数据库时,便具有全部系统权限,因而对它的保护尤为重要。
更换SYS用户密码,符合密码复杂度要求;
新建一个DBA用户,作为日常管理使用。
17本地缓存区溢出防护
'
程序存在本地缓冲区溢出。
在传递命令行参数给'
程序时缺少充分的边界缓冲区检查,可导致以'
进程权限在系统上执行任意代码,需要进行有效加固。
以系统管理员权限登录操作系统,进入Oracle安装目录
运行:
chmodo-xoracle加强对Oracle文件的可执