oracle部分
账户权限加固
1.1.1 删除或锁定无效账号
必须以DBA身份登录才有修改权限
l 删除用户:
SQL>DROPUSER USERNAME CASCADE;
l 锁定用户:
SQL>ALTER USER USERNAME ACCOUNT LOCK;
锁定除SYS、SYSTEM、DBSNMP,SYSMAN,MGMT_VIEW和业务以及维护用的帐号以外所有其他的帐号。 如果不需要使用EM(Enterprise Manager)则还可以锁定DBSNMP,SYSMAN,MGMT_VIEW三个帐号。
1.1.2 权限最小化
限制应用用户在数据库中的权限,尽量保证最小化,避免授予DBA权限。
查看权限:
SQL>select *from user_sys_privs;
SQL>select *from user_role_privs;
SQL>select *from user_table_privs;
赋予用户权限
SQL>grant 权限 to username;
收回用户权限
SQL> revoke 权限 from username;
1.1.3 撤销public角色的程序包执行权限
A. 查看public 角色的程序包执行权限
SQL> SELECT TABLE_NAME FROM DBA_TAB_PRIVS WHEREGRANTEE=’PUBLIC’ AND PRIVILEGE=’EXECUTE’;
B. 撤销public 角色的程序包执行权限
例如:
SQL>REVOKE EXECUTE ON UTL_FILE FROMPUBLIC;
Oracle 官方建议撤销public角色对utl_file,utl_http,utl_tcp,utl_smtp,dbms_random程序包的执行权限。
用户组PUBLIC,表示数据库中的每一位用户,因此,对PUBLIC用户组授予权限其实也就是对数据库中的每一位用户都授予了相应的权限。这是在授予或撤销权限时非常有用的一条捷径。但也可能带来巨大的安全隐患,尤其是在试图确保以最少权限的方式运行数据库
时,更是如此。
撤销Public 组的一些不必要权限,严格限制以下程序包的权限:
UTL_FILE:该程序包允许oralce 用户读取服务器上的文件,如果设置错误的话,可能可以得到任何文件。
UTL_HTTP:该程序包允许oracle 用户通过HTTP 访问外部资源包括恶意的web 代码和文件。
UTL_TCP: 该程序包允许oracle 通过TCP 建立连接,从而从网络上得到可执行文件。
UTL_SMTP: 该程序包允许oracle 通过SMTP 方式进行通信,从而转发关键文件。
撤销以上包的执行权限:
Sql:
revoke EXECUTE on UTL_FILE from public;
revoke EXECUTE on UTL_TCP from public;
revoke EXECUTE on UTL_SMTP from public;
revoke EXECUTE on UTL_HTTP from public;
1.1.4 修改系统账户的默认口令
SQL>ALTER USER SYS IDENTIFIED BY<NEWPASSWORD>;
SQL>ALTER USER SYSTEM IDENTIFIED BY<NEWPASSWORD>;
1.1.5 密码策略设置
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 是重用密码前更换密码的最小次数。
安全设置:
根据公司密码策略修改$ORACLE_HOME /rdbms/admin/utlpwdmg.sql文件的192-197行:如下:
生效方法:
$cd $ORACLE_HOME /rdbms/admin/
$sqlplus /nolog
>conn /assysdba;
>@utlpwdmg.sql
>quit
设置后,密码复杂度必须包含字母,数字,标点(不区分大小写),最小长度为8;
1.2 数据库访问控制加固
1.2.1 限制数据库文件的访问权限
A.用操作系统命令查看库文件访问权限
#ls –l $ORACLE_BASE/oradata
B.用操作系统命令删除库文件组和其他用户的写权限
#chmod 640 $ORACLE_BASE/oradata/*
1.2.2 设置ORALCE可执行程序文件的最小访问权限
A.用操作系统命令查看$ORALCE_HOME/bin下可执行程序的访问权限
#ls –l $ORACLE_HOME/bin
B.用操作系统命令删除库文件组和其他用户的写权限
#chmod 640 $ORACLE_HOME/bin/*
1.3 服务加固
1.3.1 清理数据库中无用的表,视图
A.查看数据库中表或视图等对象
SQL>SELECT * FROMDBA_TABLES;
SQL>SELECT * FROMDBA_VIEWS;
B.删除数据库中存在的无用的,测试的表或视图
SQL>DROP TABLE <TABLENAME>;
SQL>DROP VIEW <VIEWNAME>;
1.4 网络访问控制加固
1.4.1 设置TNS登录IP限制
A.在目录$ORACLE_HOME/network/admin下修改sqlnet.ora 文件实现TNS登录IP限制,设置信息如下:
tcp.validnode_checking=yes
#允许访问的IP
tcp.invited_nodes=(ip1,ip2,…)
#不允许访问的IP
tcp.execluded_node=(ip1,ip2,…)
B.修改sqlnet.ora后,重新启动listener服务。
需要注意的问题:
1、需要设置参数为YES,这样才能激活。
2、建议设置允许访问的IP,因为IP地址有可能被随意修改,就不能起到自己的目的。
3、 TCP当参数TCP.INVITED_NODES和TCP.EXCLUDED_NODES设置的地址相同的时候将覆盖TCP.EXCLUDED_NODES设置。
4、需要重启监听器才能生效。
5、这个方式只是适合TCP协议。
6、这个配置适用于9i以上版本。在9i之前的版本使用文件protocol.ora。
7、在服务器上直接连接数据库不受影响。
8、这种限制方式事通过监听器来限制的。
9、这个限制只是针对IP检测,对于用户名检测事不支持的。
1.4.2 修改数据库默认端口
A. 停止监听
su – oracle
$lsntctl stop
B. 修改监听文件的端口号,在目录$ORACLE_HOME/network/admin下修改listener.ora文件
LISTENER =
(DESCRIPTION_LIST =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST=LOCALHOST)(PORT=11251))
)
)
C. 修改初始化参数local_listener
SQL> ALTER SYSTEM SETlocal_listener=’’(address=(protocol=tcp)(host=localhost)(port=11521))”;
SQL> quit
D. 重启监听
$lsnrctl start
E. 修改完毕,使用新端口登录测试
netstat –tunap|grep grep 11521
lsnrctl status
客户端连接测试。
1.4.3 关闭操作系统远程认证
操作系统认证方式登录数据库的含义是:只要是以oracle用户登录的用户都可以使用"sqlplus/ as sysdba"方式连接到数据库中。
出于安全的考虑,我们可能需要禁用这个特性。当然,如果以操作系统认证方式无法顺利登录,也可以通过在这个方法来排查故障问题。
1.以操作系统认证方式登录数据库的方法
1)最基本的方法就是使用"sqlplus/ as sysdba"登录数据库
[oracle@secdb admin]$ sqlplus / as sysdba