ORACLE DBA学习笔记--使用LOGON TRIGGER限制用户登陆
2009-08-23 16:55
761 查看
通过TRIGGER 限制用户登陆时的IP地址,应用程序.加强对ORACLE用户的操作审计.
CREATE OR REPLACE TRIGGER trg_work_log
AFTER LOGON ON DATABASE
declare
v_program_name varchar2(200);
v_username varchar2(100);
v_ip_address varchar2(18);
v_error varchar2(1000);
begin
--获取当前的连接用户信息
select username,program,SYS_CONTEXT('USERENV','IP_ADDRESS')
into v_username,v_program_name,v_ip_address
from v$session where AUDSID = SYS_CONTEXT('USERENV', 'SESSIONID');
if upper(v_username)='WOODY' then
if UPPER(v_program_name)<>'SQLNAV4.EXE' then
if v_ip_address <> ('192.168.1.101') then
RAISE_APPLICATION_ERROR(-20003,'You are not allowed to connect to the database');
end if;
ELSE
RAISE_APPLICATION_ERROR(-20003,'不能使用SQL Nav4.exe程序登陆');
end if;
else
RAISE_APPLICATION_ERROR(-20003,'You are not allowed to connect to the database');
end if;
END;也可以根据需要加入其他的一些限制.
非DBA权限可以通过SYS_CONTEXT函数获取当前V$SESSION的会话信息.
SYS_CONTEXT函数的用法:SYS_CONTEXT('namespace', 'parameter' [, length ]);
通过以下语句可以查看V$SESSION部分信息.
select
SYS_CONTEXT('USERENV','LANGUAGE') language,
SYS_CONTEXT('USERENV','SESSIONID') sessionid,
SYS_CONTEXT('USERENV','INSTANCE') instance,
SYS_CONTEXT('USERENV','NLS_TERRITORY') nls_territory,
SYS_CONTEXT('USERENV','NLS_CURRENCY') nls_currency,
SYS_CONTEXT('USERENV','NLS_CALENDAR') nls_calendar,
SYS_CONTEXT('USERENV','NLS_DATE_FORMAT') nls_date_format,
SYS_CONTEXT('USERENV','NLS_DATE_LANGUAGE') nls_date_language,
SYS_CONTEXT('USERENV','CURRENT_USER') current_user,
SYS_CONTEXT('USERENV','CURRENT_USERID') current_userid,
SYS_CONTEXT('USERENV','SESSION_USER') session_user,
SYS_CONTEXT('USERENV','SESSION_USERID') session_userid,
SYS_CONTEXT('USERENV','HOST') host,
SYS_CONTEXT('USERENV','OS_USER') os_user,
SYS_CONTEXT('USERENV','EXTERNAL_NAME') external_name,
SYS_CONTEXT('USERENV','IP_ADDRESS') ip_address,
SYS_CONTEXT('USERENV','NETWORK_PROTOCOL') network_protocol
from dual 非法登陆的错误如下:
CREATE OR REPLACE TRIGGER trg_work_log
AFTER LOGON ON DATABASE
declare
v_program_name varchar2(200);
v_username varchar2(100);
v_ip_address varchar2(18);
v_error varchar2(1000);
begin
--获取当前的连接用户信息
select username,program,SYS_CONTEXT('USERENV','IP_ADDRESS')
into v_username,v_program_name,v_ip_address
from v$session where AUDSID = SYS_CONTEXT('USERENV', 'SESSIONID');
if upper(v_username)='WOODY' then
if UPPER(v_program_name)<>'SQLNAV4.EXE' then
if v_ip_address <> ('192.168.1.101') then
RAISE_APPLICATION_ERROR(-20003,'You are not allowed to connect to the database');
end if;
ELSE
RAISE_APPLICATION_ERROR(-20003,'不能使用SQL Nav4.exe程序登陆');
end if;
else
RAISE_APPLICATION_ERROR(-20003,'You are not allowed to connect to the database');
end if;
END;也可以根据需要加入其他的一些限制.
非DBA权限可以通过SYS_CONTEXT函数获取当前V$SESSION的会话信息.
SYS_CONTEXT函数的用法:SYS_CONTEXT('namespace', 'parameter' [, length ]);
通过以下语句可以查看V$SESSION部分信息.
select
SYS_CONTEXT('USERENV','LANGUAGE') language,
SYS_CONTEXT('USERENV','SESSIONID') sessionid,
SYS_CONTEXT('USERENV','INSTANCE') instance,
SYS_CONTEXT('USERENV','NLS_TERRITORY') nls_territory,
SYS_CONTEXT('USERENV','NLS_CURRENCY') nls_currency,
SYS_CONTEXT('USERENV','NLS_CALENDAR') nls_calendar,
SYS_CONTEXT('USERENV','NLS_DATE_FORMAT') nls_date_format,
SYS_CONTEXT('USERENV','NLS_DATE_LANGUAGE') nls_date_language,
SYS_CONTEXT('USERENV','CURRENT_USER') current_user,
SYS_CONTEXT('USERENV','CURRENT_USERID') current_userid,
SYS_CONTEXT('USERENV','SESSION_USER') session_user,
SYS_CONTEXT('USERENV','SESSION_USERID') session_userid,
SYS_CONTEXT('USERENV','HOST') host,
SYS_CONTEXT('USERENV','OS_USER') os_user,
SYS_CONTEXT('USERENV','EXTERNAL_NAME') external_name,
SYS_CONTEXT('USERENV','IP_ADDRESS') ip_address,
SYS_CONTEXT('USERENV','NETWORK_PROTOCOL') network_protocol
from dual 非法登陆的错误如下:
相关文章推荐
- Servlet学习笔记(四)-----使用Servlet处理用户注册和登陆
- ORACLE DBA学习笔记--日志文件(使用LogMiner分析日志)
- Oracle 学习笔记3 —— 使用Profile管理用户密码
- JSP学习笔记(三)-----使用JSP处理用户注册和登陆
- 使用Oracle的PROFILE对用户资源限制和密码限制
- java学习笔记之使用MyEclipse编写一个简单的登陆界(一)
- java学习笔记之使用MyEclipse写一个简单的登陆界面(二)
- 36.Oracle深度学习笔记——SLOB 工具使用
- Oracle学习(17)【DBA向】:管理用户
- 【学习笔记】--Java过滤器,用户登陆验证过滤等
- Oracle 11g学习笔记--自带用户
- 32.Oracle深度学习笔记——LogMiner使用
- OD调试学习笔记7—去除未注册版软件的使用次数限制
- Oracle 11g学习笔记--用户
- Oracle 学习笔记 登陆和注销
- 使用function 限制ORACLE用户密码长度
- 2018年作为一个新手的Oracle(DBA)学习笔记
- ORACLE 角色、授权、表空间授权、授予用户使用表空间、dba的赋予与取消
- 非Oracle用户使用操作系统验证登陆(/ as sysdba)
- Oracle 学习笔记2 —— 用户管理