oracle设置public角色执行权限
参考配置操作:
以DBA身份登录sqlplus,执行:
select table_name from dba_tab_privs where grantee='PUBLIC' and privilege='EXECUTE' and table_name in ('UTL_FILE','UTL_TCP','UTL_HTTP','UTL_SMTP','DBMS_LOB','DBMS_SYS_SQL','DBMS_JOB');
如撤销不必要的public角色包执行权限,执行:
revoke execute on 程序包名称 from public;
oracle禁止具有数据库超级管理员(SYSDBA)权限的用户从远程登陆
在spfile中设置REMOTE_LOGIN_PASSWORDFILE=NONE来禁止SYSDBA用户从远程登陆:
SQL>alter system set remote_login_passwordfile=NONE scope=spfile;
SQL>shutdown immediate;
SQL>startup;
oracle数据库监听器(LISTENER)设置启动密码
切换到oracle的管理员,执行下列命令:
[oracle@./localhost ~]$ $ORACLE_HOME/bin/lsnrctl
LSNRCTL> start
LSNRCTL> change_password
Old password:***
New password:***
Reenter new password:***
LSNRCTL> save_config
oracle检查是否启用数据字典保护
通过设置下面初始化参数来限制只有SYSDBA权限的用户才能访问数据字典:
SQL>alter system set O7_DICTIONARY_ACCESSIBILITY=FALSE scope=spfile;
SQL>shutdown immediate;
SQL>startup;
禁止除默认用户(sys、system、sysman)外其他用户有DBA角色权限
参考配置操作:
SQL>revoke dba from A;收回用户A的DBA权限
说明:
除了默认用户(sys、system和sysman),其他用户都不应赋予dba角色权限。
查看除默认用户(sys、system和sysman)外有DBA权限的用户:
SQL>select a.username from dba_users a left join dba_role_privs b on a.username = b.grantee where granted_role = ‘DBA’ and a.username not in (‘SYS’,‘SYSMAN’,‘SYSTEM’);
oracle检查是否进行SQL92安全设置
参考配置操作:
1.执行SQL命令
>SQL: alter system set sql92_security =true scope=spfile;
2.关闭,重新启动数据库
>SQL:shutdown;
>SQL:startup;
oracle用静态口令进行认证的数据库,设置所有开启用户的口令长度至少6位,并包括数字、小写字母、大写字母和特殊符号4类中至少2类
以dba权限登录sqlplus,执行
第一步:查看当前开启用户及其profile
SQL>select username,profile from dba_users where account_status='OPEN';
第二步:创建系统默认的口令复杂度函数
SQL>@?/rdbms/admin/utlpwdmg.sql
第三步:采用如下方法之一设置开启用户的密码复杂度
方法一:将所有开启用户的profile中的PASSWORD_VERIFY_FUNCTION设置为verify_function(oracle11g为verify_function_11G);
SQL>alter profile[第一步中的profile] limit PASSWORD_VERIFY_FUNCTION verify_function(oracle11g为verify_function_11G);
方法二:创建一个自定义profile,设置密码复杂度,并应用于开启用户
SQL>create profile [new_profile] limit 属性信息;
SQL>alter user 用户名 profile [new_profile];
注:可在ORACLE_HOME/RDBMS/ADMIN/utlpwdmg.sql文件中修改函数verify_function(oracle11g为verify_function_11G),原有的代码默认是数字+大小写+符号,长度要大于等于4(verify_function)长度大于等于8(verify_function_11G)。
Oracle为系统开启账户创建profile
针对系统每个账户创建profile,如账户已有profile,可通过修改profile来控制用户属性。
1.新建profile:
SQL>create profile Profile_Name limit
PASSWORD_LIFE_TIME 60 //账号生命周期60天
PASSWORD_REUSE_TIME 60 //口令历史记录保留时间60天
PASSWORD_REUSE_MAX 5 //用户不能重复使用最近5次
PASSWORD_VERIFY_FUNCTION verify_function //用户密码复杂度
PASSWORD_GRACE_TIME 90; //账号修改宽限天数
ALTER USER UserName PROFILE Profile_Name; //将Profile_Name分配给用户UserName
2.修改profile:
alter profile Profile_name limit
PASSWORD_LIFE_TIME 60 //账号生命周期60天
PASSWORD_REUSE_TIME 60 //口令历史记录保留时间60天
PASSWORD_REUSE_MAX 5 //用户不能重复使用最近5次
PASSWORD_VERIFY_FUNCTION verify_function //用户密码复杂度
PASSWORD_GRACE_TIME 90; //账号修改宽限天数
Oracle打开监听器日志
切换到oracle的管理员,执行下列命令:
$ORACLE_HOME/bin/lsnrctl
LSNRCTL>set log_directory /network/admin
LSNRCTL>set log_file .log
LSNRCTL>set log_status on
LSNRCTL>save_config
Oracle设置监听器日志文件
切换到oracle的管理员,执行下列命令:
$ORACLE_HOME/bin/lsnrctl
LSNRCTL>set log_directory /network/admin
LSNRCTL>set log_file .log
LSNRCTL>set log_status on
LSNRCTL>save_config
Oracle11g应设置最大会话数
参考配置操作:
1.以管理员身份登录数据库,修改会话数:
>SQL:alter system set sessions=标准值 scope=spfile;
2.重启数据库,启用参数:
>SQL:shutdown immediate;
>SQL:startup;
(可能需要同时修改UNIX系统参数:/etc/proc/kernel 中semmns)
oracle 应设置最大进程连接数
参考配置操作:
1.以管理员身份登录数据库,修改进程连接数:
>SQL:alter system set processes=225 scope=spfile;
2.重启数据库,启用参数:
>SQL:shutdown immediate;
>SQL:startup;
(可能需要同时修改UNIX系统参数:/etc/proc/kernel 中semmns)
oracle应设置最大会话数
参考配置操作:
1.以管理员身份登录数据库,修改会话数:
>SQL:alter system set sessions=标准值 scope=spfile;
2.重启数据库,启用参数:
>SQL:shutdown immediate;
>SQL:startup;
(可能需要同时修改UNIX系统参数:/etc/proc/kernel 中semmns)
Oracle设置监听器日志目录
切换到oracle的管理员,执行下列命令:
$ORACLE_HOME/bin/lsnrctl
LSNRCTL>set log_directory /network/admin
LSNRCTL>set log_file .log
LSNRCTL>set log_status on
LSNRCTL>save_config
oracle开启数据库审计功能
登录数据库后执行以下语句:
SQL>alter system set audit_trail='DB或者OS' scope=spfile;
SQL>shutdown immediate;
SQL>startup;
通过设置参数audit_trail = db或os来打开数据库审计,然后可使用Audit命令对相应的对象进行审计设置。audit_trail是static参数,每次修改后需要重新启动数据库才能生效。
oracle创建触发器对用户登录进行日志记录
Step1、建表LOGIN_LOG
create table LOGIN_LOG(
SESSION_ID NUMBER(8,0) NOT NULL,
LOGIN_ON_TIME DATE,
USER_IN_DB VARCHAR(50),
IP_ADDRESS VARCHAR(20)
);
Step2、建触发器LOGIN_INFO
create trigger LOGIN_INFO
after logon on database
begin
insert into LOGIN_LOG(SESSION_ID,LOGIN_ON_TIME,USER_IN_DB,IP_ADDRESS) select AUDSID,sysdate,sys.login_user,SYS_CONTEXT('USERENV','IP_ADDRESS') from v$session where AUDSID=USERENV('SESSIONID');
end;
/
注意:end后的/不能少,可重新登录数据库,查看LOGIN_LOG表的内容来检验是否创建成功。(select * from LOGIN_LOG; )