1. 修改用户 sys/system/scott/sys_man(oem使用)的密码;
2. 进入dba studio看看系统有多少个用户,有没有可疑用户
3. 不用随便给普通用户赋予DBA角色,普通用户赋予CONNECT或RESOURCE角色或者根据需要赋予相关的权限。
4. 8i以上使用LogMiner工具,关于此工具的使用查阅精华区或faqs
5. 经常查看Alert .log文件,该文件路径: $ORACLE_HOME/admin/sid/bdump.
用LogMiner包看一下,可以看到他是用的那个用户修改的那些表修改了什么。
Example of Using LogMiner
Assume that the data dictionary extract was taken to a flat file named
'/usr/oracle/dbs/dict.txt'
The DBA first specifies five redo logs to be analyzed
execute dbms_logmnr.add_logfile (filename => '/usr/oracle/dbs/arch123.dbf',
options => dbms_logmnr.NEW);
-- identifying this file starts a new list of files to analyze
execute dbms_logmnr.add_logfile (filename => '/usr/oracle/dbs/arch124.dbf',
options => dbms_logmnr.ADDFILE);
execute dbms_logmnr.add_logfile (filename => '/usr/oracle/dbs/arch125.dbf',
options => dbms_logmnr.ADDFILE);
execute dbms_logmnr.add_logfile (filename => '/usr/oracle/dbs/arch126.dbf',
options => dbms_logmnr.ADDFILE);
execute dbms_logmnr.add_logfile (filename => '/usr/oracle/dbs/arch127.dbf',
options => dbms_logmnr.ADDFILE);
The DBA then specifies the location of the dictionary with,
execute dbms_logmnr.start_logmnr( dictfilename => '/usr/oracle/dbs/dict.txt' );
The DBA is now ready to issue a select against the v$logmnr_contents view
select operation, sql_redo, sql_undo
from v$logmnr_contents
where seg_owner = 'SCOTT' and seg_name = 'ORDERS' and
operation = 'DELETE' and username = 'RON';
Example of Using LogMiner
Assume that the data dictionary extract was taken to a flat file named
'/usr/oracle/dbs/dict.txt'
The DBA first specifies five redo logs to be analyzed
execute dbms_logmnr.add_logfile (filename => '/usr/oracle/dbs/arch123.dbf',
options => dbms_logmnr.NEW);
-- identifying this file starts a new list of files to analyze
execute dbms_logmnr.add_logfile (filename => '/usr/oracle/dbs/arch124.dbf',
options => dbms_logmnr.ADDFILE);
execute dbms_logmnr.add_logfile (filename => '/usr/oracle/dbs/arch125.dbf',
options => dbms_logmnr.ADDFILE);
execute dbms_logmnr.add_logfile (filename => '/usr/oracle/dbs/arch126.dbf',
options => dbms_logmnr.ADDFILE);
execute dbms_logmnr.add_logfile (filename => '/usr/oracle/dbs/arch127.dbf',
options => dbms_logmnr.ADDFILE);
The DBA then specifies the location of the dictionary with,
execute dbms_logmnr.start_logmnr( dictfilename => '/usr/oracle/dbs/dict.txt' );
The DBA is now ready to issue a select against the v$logmnr_contents view
select operation, sql_redo, sql_undo
from v$logmnr_contents
where seg_owner = 'SCOTT' and seg_name = 'ORDERS' and
operation = 'DELETE' and username = 'RON';
listner.log 里面会有你想要的证据
查listener.log只能查到从哪里登录,查不到输入什么sql语句。
保密有一点很关键但又很容易被忽略的,很多人都是直接输入
sqlplus username/password@connstring (一般服务器都安装在unix系统)
登录的,如此一来,别人只要用ps -ef|grep sqlplus就可以看到你的用户名和密码了。
应该用
sqlplus 然后再输入用户名和密码。
也可以先定义一个变量
$STRI=username/password;export $STRI
sqlplus $STRI@connstring
这样别人就看不到你的密码了。
保密有一点很关键但又很容易被忽略的,很多人都是直接输入
sqlplus username/password@connstring (一般服务器都安装在unix系统)
登录的,如此一来,别人只要用ps -ef|grep sqlplus就可以看到你的用户名和密码了。
应该用
sqlplus 然后再输入用户名和密码。
也可以先定义一个变量
$STRI=username/password;export $STRI
sqlplus $STRI@connstring
这样别人就看不到你的密码了。
注意查看system的视图v$sql,也许会有收获。
当然用审计功能 :
方法一:
用以下的方式可以监控登入注销的用户:
创建如下的两张表:
create table login_log -- 登入注销信息表
(
session_id int not null, -- sessionid
login_on_time date, -- 登入时间
login_off_time date, -- 注销时间
user_in_db varchar2(30), -- 登入的db user
machine varchar2(20), -- 机器名
ip_address varchar2(20), -- ip地址
run_program varchar2(20) -- 以何程序登入
);
方法一:
用以下的方式可以监控登入注销的用户:
创建如下的两张表:
create table login_log -- 登入注销信息表
(
session_id int not null, -- sessionid
login_on_time date, -- 登入时间
login_off_time date, -- 注销时间
user_in_db varchar2(30), -- 登入的db user
machine varchar2(20), -- 机器名
ip_address varchar2(20), -- ip地址
run_program varchar2(20) -- 以何程序登入
);
create table allow_user -- 网域用户表
(
ip_address varchar2(20), -- ip地址
login_user_name nvarchar2(20) -- 操作者姓名
);
(
ip_address varchar2(20), -- ip地址
login_user_name nvarchar2(20) -- 操作者姓名
);
创建如下的两个触发器:
create or replace trigger login_on_info -- 纪录登入信息的触发器
after logon on database
Begin
insert into login_log(session_id,login_on_time,login_off_time,user_in_db,machine,ip_address,run_program)
select AUDSID,sysdate,null,sys.login_user,machine,SYS_CONTEXT('USERENV','IP_ADDRESS'),program
from v$session where AUDSID = USERENV('SESSIONID'); --当前SESSION
END;
create or replace trigger login_on_info -- 纪录登入信息的触发器
after logon on database
Begin
insert into login_log(session_id,login_on_time,login_off_time,user_in_db,machine,ip_address,run_program)
select AUDSID,sysdate,null,sys.login_user,machine,SYS_CONTEXT('USERENV','IP_ADDRESS'),program
from v$session where AUDSID = USERENV('SESSIONID'); --当前SESSION
END;
create or replace trigger login_off_info -- 纪录注销信息的触发器
before logoff on database
Begin
update login_log set login_off_time = sysdate
where session_id = USERENV('SESSIONID'); --当前SESSION
exception
when others then
null;
END;
before logoff on database
Begin
update login_log set login_off_time = sysdate
where session_id = USERENV('SESSIONID'); --当前SESSION
exception
when others then
null;
END;
查询语句:
column a format a20
column b format a20
column IP_ADDRESS format a30
select to_char(login_on_time,'yyyy-mm-dd hh24:mi:ss') as login,to_char(login_off_time,'yyyy-mm-dd hh24:mi:ss') as logout,ip_address from login_log;
column a format a20
column b format a20
column IP_ADDRESS format a30
select to_char(login_on_time,'yyyy-mm-dd hh24:mi:ss') as login,to_char(login_off_time,'yyyy-mm-dd hh24:mi:ss') as logout,ip_address from login_log;
方法二:
用如下的方式可以审计执行drop动作的事件:
/**
* drop语句的审计日志表
*/
create table drop_log
(
session_id int not null, -- sessionid
drop_time date, -- drop的时间
ip_address varchar2(20), -- ip地址
object_owner varchar2(30), -- 对象的拥有者
object_name varchar2(30), -- 对象名称
object_type varchar2(20), -- 对象类型
drop_by_user varchar2(30) -- 执行drop语句的用户
);
用如下的方式可以审计执行drop动作的事件:
/**
* drop语句的审计日志表
*/
create table drop_log
(
session_id int not null, -- sessionid
drop_time date, -- drop的时间
ip_address varchar2(20), -- ip地址
object_owner varchar2(30), -- 对象的拥有者
object_name varchar2(30), -- 对象名称
object_type varchar2(20), -- 对象类型
drop_by_user varchar2(30) -- 执行drop语句的用户
);
create or replace trigger drop_info
after drop on mfg0513user.schema -- 在mfg0513user用户上创建审计drop的触发器
begin
insert into drop_log
(session_id,
drop_time,
ip_address,
object_owner,
object_name,
object_type,
drop_by_user)
values(USERENV('SESSIONID'),
sysdate,
SYS_CONTEXT('USERENV','IP_ADDRESS'),
sys.dictionary_obj_owner,
sys.dictionary_obj_name,
sys.dictionary_obj_type,
sys.login_user);
end;
after drop on mfg0513user.schema -- 在mfg0513user用户上创建审计drop的触发器
begin
insert into drop_log
(session_id,
drop_time,
ip_address,
object_owner,
object_name,
object_type,
drop_by_user)
values(USERENV('SESSIONID'),
sysdate,
SYS_CONTEXT('USERENV','IP_ADDRESS'),
sys.dictionary_obj_owner,
sys.dictionary_obj_name,
sys.dictionary_obj_type,
sys.login_user);
end;
To collect auditing results, you must set the initialization parameter AUDIT_TRAIL to DB.
To choose auditing for statements issued by the users aaa that query or update a table or view, issue the following statement:
AUDIT SELECT TABLE, UPDATE TABLE
BY aaa;
To obtaining information:
--DBA_AUDIT_TRAIL
--DBA_AUDIT_EXISTS
--DBA_AUDIT_OBJECT
--DBA_AUDIT_SESSION
--DBA_AUDIT_STATEMENT