oracle 客户端非授权登录限制管理 sql_MySQL, Oracle及数据库讨论区_Weblogic技术|Tuxedo技术|中间件技术|Oracle论坛|JAVA论坛|Linux/Unix技术|hadoop论坛_联动北方技术论坛  
网站首页 | 关于我们 | 服务中心 | 经验交流 | 公司荣誉 | 成功案例 | 合作伙伴 | 联系我们 |
联动北方-国内领先的云技术服务提供商
»  游客             当前位置:  论坛首页 »  自由讨论区 »  MySQL, Oracle及数据库讨论区 »
总帖数
1
每页帖数
101/1页1
返回列表
0
发起投票  发起投票 发新帖子
查看: 1945 | 回复: 0   主题: oracle 客户端非授权登录限制管理 sql        下一篇 
Michelle
注册用户
等级:列兵
经验:88
发帖:58
精华:0
注册:2011-8-11
状态:离线
发送短消息息给Michelle 加好友    发送短消息息给Michelle 发消息
发表于: IP:您无权察看 2015-7-24 17:38:05 | [全部帖] [楼主帖] 楼主

 CREATE OR REPLACE TRIGGER TRG_LOGON_RESTRICT

AFTER LOGON

ON DATABASE

DISABLE

DECLARE

SQL_STATEMENT VARCHAR2 (500);

V_EXIST NUMBER (19);

TYPE LOGON_RECORD_TYPE --定义记录类型

IS

RECORD (

ID TAB_AUDIT_LOGON_RECORD.id%TYPE,

LOGON_TIME TAB_AUDIT_LOGON_RECORD.logon_time%TYPE,

SESSION_ID TAB_AUDIT_LOGON_RECORD.session_id%TYPE,

OS_USER TAB_AUDIT_LOGON_RECORD.os_user%TYPE,

IP_ADDRESS TAB_AUDIT_LOGON_RECORD.ip_address%TYPE,

TERMINAL TAB_AUDIT_LOGON_RECORD.terminal%TYPE,

HOST_NAME TAB_AUDIT_LOGON_RECORD.host_name%TYPE,

USER_NAME TAB_AUDIT_LOGON_RECORD.user_name%TYPE

);

LOGON_RECORD LOGON_RECORD_TYPE;

BEGIN

SQL_STATEMENT := '0';

V_EXIST := 0;

SELECT SEQ_LOGON.NEXTVAL id,

SYSDATE,

SYS_CONTEXT ('USERENV', 'SESSIONID'),

SYS_CONTEXT ('USERENV', 'OS_USER'),

SYS_CONTEXT ('USERENV', 'IP_ADDRESS'),

SYS_CONTEXT ('USERENV', 'TERMINAL'),

SYS_CONTEXT ('USERENV', 'HOST'),

ORA_LOGIN_USER

INTO LOGON_RECORD

FROM DUAL;

INSERT INTO TAB_AUDIT_LOGON_RECORD

VALUES LOGON_RECORD;

SELECT COUNT ( * )

INTO V_EXIST

FROM TAB_AUTHORIZATION_LOGON_USER

WHERE ip_address = LOGON_RECORD.ip_address

AND terminal = LOGON_RECORD.terminal

AND valid = 1;

IF V_EXIST IS NULL

THEN

V_EXIST := 0;

END IF;

IF V_EXIST > 0

THEN

DBMS_OUTPUT.put_line ('Authorized user, please be careful operation!');

ELSE

SP_KILL_SESSION (LOGON_RECORD.HOST_NAME);

raise_application_error (-20001,

'Restricted LOGON! Please contact DBA');

END IF;

EXCEPTION

WHEN NO_DATA_FOUND

THEN

DBMS_OUTPUT.put_line ('Login session does not exist');

WHEN OTHERS

THEN

RAISE_APPLICATION_ERROR (-20002,

'Restricted LOGON! Please contact DBA!');

END;

/

CREATE OR REPLACE PROCEDURE SYS.SP_KILL_SESSION (P_HOST_NAME IN VARCHAR)

AS

SQL_STATEMENT VARCHAR2 (500);

BEGIN

SQL_STATEMENT := '0';

--定义游标

DECLARE

CURSOR MACHINE_AUDIT

IS

SELECT sid, serial#

FROM v$session

WHERE machine = P_HOST_NAME;

--定义记录变量

MACHINE_RECORD MACHINE_AUDIT%ROWTYPE;

--开始使用游标取数据

BEGIN

OPEN MACHINE_AUDIT;

LOOP

FETCH MACHINE_AUDIT INTO MACHINE_RECORD;

--游标取不到数据则退出

EXIT WHEN MACHINE_AUDIT%NOTFOUND;

SQL_STATEMENT :=

'ALTER SYSTEM KILL SESSION '

''''

MACHINE_RECORD.sid

','

MACHINE_RECORD.serial#

'''';

EXECUTE IMMEDIATE SQL_STATEMENT;

END LOOP;

CLOSE MACHINE_AUDIT;

END;

END;

/

--转自 北京联动北方科技有限公司




赞(0)    操作        顶端 
总帖数
1
每页帖数
101/1页1
返回列表
发新帖子
请输入验证码: 点击刷新验证码
您需要登录后才可以回帖 登录 | 注册
技术讨论