一、 限定仅能从指定服务器/工具连接

create or replace trigger logon_ip_module_controlafter logon on database
/*限制DATAFIX用户仅允许通过192.168.1.3的ip使用plsqldev.exe工具登录至数据库*/
declarev_ip      Varchar2(50);v_user    Varchar2(50);v_module  Varchar2(50);v_log     Varchar2(300);v_message Varchar2(300);
beginSELECT SYS_CONTEXT('USERENV', 'SESSION_USER'),SYS_CONTEXT('USERENV', 'IP_ADDRESS'),SYS_CONTEXT('USERENV', 'MODULE')into v_user, v_ip, v_modulefrom dual;if v_user = 'DATAFIX' THENIF (v_ip = '192.168.1.3' and v_module = 'plsqldev.exe') THEN-- Access Gateway null;elsev_log := 'LOGON_IP_MODULE_CONTROL_TRIGGER -- User: ' || v_user ||', IP: ' || v_ip || ', Logon tool:' || v_module;sys.dbms_system.ksdwrt(2, v_log);v_message := 'User ' || v_user ||' is not allowed to connect from this IP address or logon tool.Please contact your DBA to help.';raise_application_error(-20001, v_message);END IF;END IF;
end;

或者

**/
Create Or Replace Trigger DENY_LOGIN  After Logon On Database
Declarev_Program Varchar2(48);v_Message Varchar2(1000);v_deny_Client Exception;v_deny_User Exception;v_deny_Ip Exception;
BeginSelect Program Into v_Program From V$session Where Audsid = Sys_Context('USERENV', 'SESSIONID') And Rownum < 2;If  Lower(v_Program) = 'plsqldev.exe' ThenRaise v_deny_Client;End If;If  User In ('SCOTT','scott') ThenRaise v_deny_User;End If;If Sys_Context('USERENV', 'ip_address') = '10.117.196.52' ThenRaise v_deny_Ip;End If;
ExceptionWhen v_deny_Client Thenv_Message := 'Sorry!You cannot access database using this software client!';Raise_Application_Error(-20001, v_Message);When v_deny_User Thenv_Message := 'Sorry!Database deny you('||User||') access,Contact DBAs please!';Raise_Application_Error(-20002, v_Message);When v_deny_Ip Thenv_Message := 'Sorry!Database deny you('||Sys_Context('USERENV', 'SESSIONID') ||') access,Contact DBAs please!';Raise_Application_Error(-20003, v_Message);When Others Thenv_Message := 'ERROR – NOT_LOGON TRIGGER- Please Contact Your DBA!!' || Sqlerrm;Raise_Application_Error(-20004, v_Message);
End;
/

二、 监控指定用户登录

其实这个可以开登录审计,这里只作为多了解一种方法。

create or replace trigger sysdba_to_alert
after logon on database
declare
message varchar2(256);
IP varchar2(15);
v_os_user varchar2(80);
v_module varchar2(50);
v_action varchar2(50);
v_type varchar2(50);
v_sql_id varchar2(50);
v_pid varchar2(10);
v_sid number;
v_program varchar2(48);
v_client_id VARCHAR2(64);
begin
IF user ='SYS' THEN-- get IP for remote connections:
if sys_context('userenv','network_protocol') = 'TCP' then
IP := sys_context('userenv','ip_address');
end if;select distinct sid into v_sid from sys.v_$mystat;
SELECT p.SPID, v.PROGRAM,v.type,v.sql_id into v_pid, v_program,v_type,v_sql_id
FROM V$PROCESS p, V$SESSION v
WHERE p.ADDR = v.PADDR AND v.sid = v_sid;v_os_user := sys_context('userenv','os_user');
dbms_application_info.READ_MODULE(v_module,v_action);v_client_id := sys_context('userenv','client_identifier');message:= to_char(sysdate,'Dy Mon dd HH24:MI:SS YYYY')||
' SYSDBA logon from '||nvl(IP,'localhost')||' '||v_sid||' '||v_sql_id||
' '||v_os_user||' '||v_client_id||' '||v_type||
' with '||v_program||' '||v_module||' '||v_action;sys.dbms_system.ksdwrt(2,message);end if;
end;
/

三、 只允许用户连到从库不允许连到主库

Create Trigger DENY_LOGINAfter Logon On Database
Declarev_db_role Varchar2(20);v_Message Varchar2(1000);v_deny_User Exception;
Beginselect DATABASE_ROLE into v_db_role from v$database;If User In ('TESTERP', 'testerp') Thenif v_db_role = 'PRIMARY' thenRaise v_deny_User;End If;End If;
ExceptionWhen v_deny_User Thenv_Message := 'Sorry! Primary database denies your user (' || User ||') to access.Please connect to the standby database.';Raise_Application_Error(-20002, v_Message);When Others Thenv_Message := 'ERROR – NOT_LOGON TRIGGER- Please Contact Your DBA.' ||Sqlerrm;Raise_Application_Error(-20004, v_Message);
End;
/

四、 限制用户在某时间段内登陆数据库

  • 被限制的用户不能拥有dba权限
  • 需要通过sys用户创建触发器
CREATE OR REPLACE TRIGGER limit_connection
AFTER LOGON ON DATABASE
BEGIN
IF USER='TM1' THEN
IF to_number(TO_CHAR (SYSDATE,'HH24')) BETWEEN 8 AND 22
THEN
RAISE_APPLICATION_ERROR(-20998,'CONT LOGIN BETWEEN 8-20');
END IF;
END IF;
END limit_connection;
/

五、 dg broker,让应用可以自动切换的trigger(高可用的)

create trigger myapptriggafter startup on database
declarev_role varchar(30);
beginselect database_role into v_role from v$database;if v_role = 'PRIMARY' thenDBMS_SERVICE.START_SERVICE('myapp');elseDBMS_SERVICE.STOP_SERVICE('myapp');end if;
end;
/

五、 禁止DROP、TRUNCATE操作

CREATE OR REPLACE TRIGGER TR_DISABLE_DDL
BEFORE DDL ON DATABASE
BEGINDECLARE L_FLAG INT;L_TEMPORARY VARCHAR2(50);BEGINIF ORA_SYSEVENT = 'TRUNCATE' OR ORA_SYSEVENT='DROP' THEN
/*       DBMS_OUTPUT.put_line('操作类型:' || ORA_SYSEVENT || CHR(13) ||'操作对象:' || ORA_DICT_OBJ_TYPE || CHR(13) || '所属用户:' || ORA_DICT_OBJ_NAME || CHR(13) || '对象名称:' || ORA_DICT_OBJ_OWNER  );*/SELECT COUNT(1) INTO L_FLAG FROM USER_TABLES WHERE TABLE_NAME=UPPER(ORA_DICT_OBJ_NAME)AND TEMPORARY='N' ;IF L_FLAG=1 THENRAISE_APPLICATION_ERROR(-20000,'You cannot TRUNCATE or DROP table: ' || ORA_DICT_OBJ_NAME);END IF;END IF;END;
END;
/

参考

https://blog.csdn.net/blogliu/article/details/79559395

ORACLE 触发器控制用户登录之权限限制_kissweety的博客-CSDN博客

oracle 触发器脚本相关推荐

  1. oracle触发器高级教程

    [转自]http://download.oracle.com/docs/cd/B19306_01/server.102/b14200/statements_7004.htm#i2153503 CREA ...

  2. oracle 触发器管理(以及行级触发器中有两个伪变量 :new 与 :old 的使用方法)(三个谓词inserting、deleting、updating的使用方法)

    oracle触发器管理: 1.概念 2.建立一个简单的触发器: 3.触发器的作用 4.触发条件 a.触发事件 b.触发时间 c.触发级别 d.触发限制 e.触发对象 5.创建及使用触发器 6.触发器分 ...

  3. Oracle触发器-校验身份证和字节长度

    一.Oracle触发器的一个简单介绍: 触发器:是特定事件出现的时候,自动执行的代码块.类似于存储过程,但是用户不能直接调用他们. 功    能: 1.允许.限制对表的修改 2.自动生成派生列,比如自 ...

  4. oracle触发器 触发事件,oracle 触发器的种类和触发事件

    oracle触发器的种类和触发事件,DML触发器,DDL事件触发器,替代触发器,查看触发器 触发器的种类和触发事件 触发器必须由事件才能触发.触发器的触发事件分可为3类,分别是DML事件.DDL事件和 ...

  5. oracle发票验证,通过使用Oracle SQL脚本进行计算(总发票)的多个表的更新记录...

    我有一个SERVICE表,该表存储一个表中的服务数量,然后链接到连接到INVOICE的LINE表.通过使用Oracle SQL脚本进行计算(总发票)的多个表的更新记录 我想要创建一个触发器,根据SER ...

  6. Oracle简单脚本演示样例

    Oracle简单脚本演示样例 1.添加表 --改动日期:2014.09.21 --改动人:易小群 --改动内容:新增採购支付情况表 DECLARE VC_STR           VARCHAR2( ...

  7. linux mysql设置开机启动脚本_linux下添加oracle自启动脚本

    1.修改/etc/oratab文件,后面的dbstart和dbshut依据这个文件启动数据库 soadb:/u01/oracle/product/11.2.0/dbhome_1:Y 2.创建数据库初始 ...

  8. Oracle 触发器调用存储过程|转||待研究|

    Oracle触发器调用存储过程资料收集整理 触发器:Trigger 存储过程:Stored Procedure // ******************** 收集1 **************** ...

  9. SQL server与Oracle触发器的创建与使用

    SQL Server 1创建触发器 GO BEGIN IF (object_id('WMY', 'tr') is not null) DROP trigger WMY END; GO CREATE T ...

最新文章

  1. SOL注入——HTTP头部注入(六)
  2. (Docker实战) 第2篇:Centos7 拉取和部署Gitlab
  3. json转string示例_C.示例中的String.Copy()方法
  4. 人脸对齐(十三)--3DDFA
  5. A*算法(最佳优先搜索)
  6. python图像分类实验总结_第4章 图像分类(image classification)基础
  7. 计算机专业 论文检索,如何检索计算机专业论文文献
  8. JavaScript系列之去掉字符串前后的空格
  9. 商标注册的费用是多少钱
  10. uniapp 微信小程序开发 解决旧版本缓存
  11. php微信调用摄像头拍视频,公众号调用摄像头录制视频
  12. 群晖设置腾讯云ddns显示认证失败的两种解决办法【实测第二种成功了】
  13. Android开发辅助工具类 Utils
  14. SQL Prompt v5.3.0.3
  15. matlab数组保存envi,MATLAB 读取envi img格式
  16. 大象又要跳舞了,中国移动的用户再度加速增长
  17. 将一个分数拆为两个不同的单位分数之和c++算法源码
  18. let,const和作用域
  19. Nginx (5):nginx URLRewrite伪静态配置
  20. php日期格式和时间戳转换

热门文章

  1. 【VxWorks】入门教程2:创建VIP项目及DKM项目
  2. 民族证券午间看盘:短线有望企稳,把握反弹机会
  3. ASCII码表中的数字和我们运算用的纯数字有何区别?
  4. 抢票浏览器该不该禁?
  5. 韩乔生逐条点评“韩乔生语录”:那是宋世雄老师说的
  6. 12.通过微信小程序端访问企查查(采集工商信息)
  7. Python合并EXCEL数据(按行、按列、按sheet)
  8. nginx正向代理和反向代理思想的理解
  9. 学习Web前端开发,这些可行性的建议分享给大家!
  10. 苹果痛下狠手,全面禁止App内部的广告拦截软件...