Oracle数据库系统安全配置手册0603.docx
- 文档编号:12213125
- 上传时间:2023-04-17
- 格式:DOCX
- 页数:20
- 大小:23.17KB
Oracle数据库系统安全配置手册0603.docx
《Oracle数据库系统安全配置手册0603.docx》由会员分享,可在线阅读,更多相关《Oracle数据库系统安全配置手册0603.docx(20页珍藏版)》请在冰豆网上搜索。
Oracle数据库系统安全配置手册0603
Oracle数据库系统安全配置
本标准适用于Unix/Linux操作系统下的Oracle数据库系统,版本为8i、9i、10g。
1将Oracle用户设置为DBA组的成员
查看dba组下的成员是否有Oracle用户:
cat/etc/group|grepdba
若Oracle用户不在dba组,则将其加入:
usermod-Gdba用户名
2最小权限使用规则
加固目的
1.应该只提供最小权限给用户(包括SYSTEM和OBJECT权限)
2.从PUBLIC组中撤回不必要的权限或角色。
(如:
UTL_SMTP、UTL_TCP、UTL_HTTP、UTL_FILE、DBMS_RANDOM、DBMS_SQL、DBMS_SYS_SQL、DBMS_BACKUP_RESTORE)
加固方法
撤销不需要的权限和角色,使用SQL语句
REVOKEEXECUTEONSYS.UTL_HTTPFROMPUBLIC;
REVOKEEXECUTEONSYS.UTL_FILEFROMPUBLIC;
REVOKEEXECUTEONSYS.UTL_SMTPFROMPUBLIC;
REVOKESELECTONALL_USERSFROMPUBLIC;
验证:
OEM管理器中,安全性->用户->PUBLIC->已授予的对象权限
colppformata35
SELECTs.privilege||'ON'||s.owner||'.'||NVL(l.longname,s.table_name)pp,s.grantableFROM
sys.dba_tab_privss,javasnmlWHEREs.table_name=l.short(+)ANDs.grantee='PUBLIC'
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
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:
口令复杂度审计函数
加固方法
解释:
PASSWORD_LIFE_TIME:
口令有效时间
口令使用期限(按照国网要求,三个月修改一次密码,即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');
ENDIF;
--Checkifthepasswordistoosimple.Adictionaryofwordsmaybe
--maintainedandacheckmaybemadesoasnottoallowthewords
--thataretoosimpleforthepassword.
IFNLS_LOWER(password)IN('welcome','database','account','user','password','oracle','computer','abcd')THEN
raise_application_error(-20002,'Passwordtoosimple');
ENDIF;
--Checkifthepasswordcontainsatleastoneletter,onedigitandone
--punctuationmark.
--1.Checkforthedigit
isdigit:
=FALSE;
m:
=length(password);
FORiIN1..10LOOP
FORjIN1..mLOOP
IFsubstr(password,j,1)=substr(digitarray,i,1)THEN
isdigit:
=TRUE;
GOTOfindchar;
ENDIF;
ENDLOOP;
ENDLOOP;
IFisdigit=FALSETHEN
raise_application_error(-20003,'Passwordshouldcontainatleastonedigit,onecharacterandonepunctuation');
ENDIF;
--2.Checkforthecharacter
<
ischar:
=FALSE;
FORiIN1..length(chararray)LOOP
FORjIN1..mLOOP
IFsubstr(password,j,1)=substr(chararray,i,1)THEN
ischar:
=TRUE;
GOTOfindpunct;
ENDIF;
ENDLOOP;
ENDLOOP;
IFischar=FALSETHEN
raise_application_error(-20003,'Passwordshouldcontainatleastone\
digit,onecharacterandonepunctuation');
ENDIF;
--3.Checkforthepunctuation
<
ispunct:
=FALSE;
FORiIN1..length(punctarray)LOOP
FORjIN1..mLOOP
IFsubstr(password,j,1)=substr(punctarray,i,1)THEN
ispunct:
=TRUE;
GOTOendsearch;
ENDIF;
ENDLOOP;
ENDLOOP;
IFispunct=FALSETHEN
raise_application_error(-20003,'Passwordshouldcontainatleastone\
digit,onecharacterandonepunctuation');
ENDIF;
<
--Checkifthepassworddiffersfromthepreviouspasswordbyatleast
--3letters
IFold_passwordISNOTNULLTHEN
differ:
=length(old_password)-length(password);
IFabs(differ)<3THEN
IFlength(password) m: =length(password); ELSE m: =length(old_password); ENDIF; differ: =abs(differ); FORiIN1..mLOOP IFsubstr(password,i,1)! =substr(old_password,i,1)THEN differ: =differ+1; ENDIF; ENDLOOP; IFdiffer<3THEN raise_application_error(-20004,'Passwordshoulddifferbyat\ least3characters'); ENDIF; ENDIF; ENDIF; --Everythingisfine;returnTRUE; RETURN(TRUE); END; / 11数据库操作审计 加固目的 ORACLE数据库具有对其内部所有发生的活动的审计能力,审计日志一般放在sys.aud$表中,也可以写入操作系统的审计跟踪文件中。 可审计的活动有三种类型: 登录尝试、数据库活动和对象存取,缺省情况下,数据库不启动审计,要求管理员配置数据库后才能启动审计。 加固方法 使用文本方式,打开数据库配置文件init init $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身份登录的用户)的操作都会被记录 验证: SQL>showparameteraudit NAMETYPEVALUE ---------------------------------------------------------------------------- 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’权限。 加固方法 使用文本方式,打开数据库配置文件init 1.Oracle9i、10g: 缺省值是False 2.Oracle8i: 缺省值是True,需要改成False 3.如果用户必须需要该权限,赋予其权限SELECTANYDICTIONARY 验证: SQL>showparameterO7_DICTIONARY_ACCESSIBILITY NAMETYPEVALUE ---------------------------------------------------------------------------- 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) #) #(ADDRESS=(PROTOCOL=IPC)(KEY=EXTPROC0)) 15DBSNMP用户的保护 加固目的 Oracle数据库系统如果采用典型安装后,自动创建一个叫做DBSNMP的用户,该用户允许Oracle系统的智能代理(intelligentAgent),该用户的缺省密码也是“DBSNMP”。 如果忘记修改该用户的口令,任何人都可以通过该用户存取数据库系统。 其他有威胁的帐号还有: CTXSYS,MDSYS,ORDPLUGINS,ORDSYS,OUTLN等。 加固方法 锁定该账号,或者更换密码 16SYS用户 加固目的 Oracle数据库系统安装后,自动创建一个叫做SYS的数据库管理员用户,当该用户sysdba方式连接数据库时,便具有全部系统权限,因而对它的保护尤为重要。 加固方法 更换SYS用户密码,符合密码复杂度要求; 新建一个DBA用户,作为日常管理使用。 17本地缓存区溢出防护 加固目的 'oracle'程序存在本地缓冲区溢出。 在传递命令行参数给'oracle'程序时缺少充分的边界缓冲区检查,可导致以'oracle'进程权限在系统上执行任意代码,需要进行有效加固。 加固方法 以系统管理员权限登录操作系统,进入Oracle安装目录 运行: chmodo-xoracle加强对Oracle文件的可执
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- Oracle 数据库 系统安全 配置 手册 0603