出于数据安全性,公司要求DBA实现控制拒绝特定的用户登录,由于公司不同的工作楼层分属于不同的vlan,因此单从linux主机层次依赖ACL访问列表控制登录数据库服务器,已经不能实现。
因此,只能考虑从数据库内部加以限制登录数据库,也就是借助oracle Trigger实现登录验证,实现方法就是捕获到拒绝登录的用户就抛应用异常强制用户退出登录,也就是使用Raise_Application_Error
实现,但是需要注意的是,被限制的用户不能有DBA权限,也不能有imp_full_database权限。其实,想想也明白,如果不小心限制了dba权限的用户登录,那么sys就不能登录数据库,也就全完蛋了。
/**
功能:实现限制特定用户登录数据库
注意:被限制用户不能有dba及imp_full_database权限,否则该触发器不能起作用
日期:2017-1-4
**/
Create Or Replace Trigger DENY_LOGIN
After Logon On Database
Declare
v_Program Varchar2(48);
v_Message Varchar2(1000);
v_deny_Client Exception;
v_deny_User Exception;
v_deny_Ip Exception;
Begin
Select Program Into v_Program From V$session Where Audsid = Sys_Context('USERENV', 'SESSIONID') And Rownum < 2;
If Lower(v_Program) = 'plsqldev.exe' Then
Raise v_deny_Client;
End If;
If User In ('SCOTT','scott') Then
Raise v_deny_User;
End If;
If Sys_Context('USERENV', 'ip_address') = '10.117.196.52' Then
Raise v_deny_Ip;
End If;
Exception
When v_deny_Client Then
v_Message := 'Sorry!You cannot access database using this software client!';
Raise_Application_Error(-20001, v_Message);
When v_deny_User Then
v_Message := 'Sorry!Database deny you('||User||') access,Contact DBAs please!';
Raise_Application_Error(-20002, v_Message);
When v_deny_Ip Then
v_Message := 'Sorry!Database deny you('||Sys_Context('USERENV', 'SESSIONID') ||') access,Contact DBAs please!';
Raise_Application_Error(-20003, v_Message);
When Others Then
v_Message := 'ERROR – NOT_LOGON TRIGGER- Please Contact Your DBA!!' || Sqlerrm;
Raise_Application_Error(-20004, v_Message);
End;
部分测试结果如下:
C:\Users\localadmin>sqlplus / as sysdba
SQL*Plus: Release 11.2.0.1.0 Production on 星期三 1月 4 09:32:27 2017
Copyright (c) 1982, 2010, Oracle. All rights reserved.
连接到:
Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - 64bit Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options
SQL> revoke dba from scott;
撤销成功。
SQL> quit
从 Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - 64bit Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options 断开
C:\Users\localadmin>sqlplus scott/oracle@oradb
SQL*Plus: Release 11.2.0.1.0 Production on 星期三 1月 4 09:32:39 2017
Copyright (c) 1982, 2010, Oracle. All rights reserved.
ERROR:
ORA-00604: 递归 SQL 级别 1 出现错误
ORA-20002: Sorry!Database deny you(SCOTT) access,Contact DBAs please!
ORA-06512: 在 line 24
请输入用户名:
ERROR:
ORA-01017: 用户名/口令无效; 登录被拒绝
请输入用户名:
ERROR:
ORA-01017: 用户名/口令无效; 登录被拒绝
SP2-0157: 在 3 次尝试之后无法连接到 ORACLE, 退出 SQL*Plus
C:\Users\localadmin>
C:\Users\localadmin>sqlplus scott/oracle
SQL*Plus: Release 11.2.0.1.0 Production on 星期三 1月 4 09:48:42 2017
Copyright (c) 1982, 2010, Oracle. All rights reserved.
ERROR:
ORA-00604: 递归 SQL 级别 1 出现错误
ORA-20002: Sorry!Database deny you(SCOTT) access,Contact DBAs please!
ORA-06512: 在 line 24
请输入用户名:
ERROR:
ORA-01017: 用户名/口令无效; 登录被拒绝
请输入用户名:
ERROR:
ORA-01017: 用户名/口令无效; 登录被拒绝
SP2-0157: 在 3 次尝试之后无法连接到 ORACLE, 退出 SQL*Plus
C:\Users\localadmin>
C:\Users\localadmin>sqlplus zhul/oracle
SQL*Plus: Release 11.2.0.1.0 Production on 星期三 1月 4 09:51:43 2017
Copyright (c) 1982, 2010, Oracle. All rights reserved.
连接到:
Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - 64bit Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options
SQL>
ORACLE 触发器控制用户登录之权限限制
时间: 2024-09-23 21:44:57
ORACLE 触发器控制用户登录之权限限制的相关文章
Oracle的SYS用户登录报权限不足(insufficient privileges)
Oracle的SYS用户登录报权限不足(insufficient privileges) D:\Users\xiaomaimiao>sqlplus sys/lhr@192.168.1.31/orastrac as sysdba SQL*Plus: Release 11.2.0.1.0 Production on Sat Jul 15 11:36:54 2017 Copyright (c) 1982, 2010, Oracle. All rights reserved. ERROR:ORA-0
Oracle使用scott用户登录不能登录,提示已经加锁
环境:Oracle 11g R2 + SQLPlus 问题:Oracle使用scott用户登录不能登录,提示已经加锁. 解决:打开SQL Plus------------>执行以下命令 conn system/manager; alter user scott account unlock; grant connect,resource to scott; 完后执行以下语句: conn scott/tiger; 如果出现已连接,说明解锁成功.同理我们也可以对hr用户进行解锁. 以上是小编为您精心
界面-求大神过来看看,web系统java开发的,中间件用的是tomcat,如果像控制用户登录数怎么解决
问题描述 求大神过来看看,web系统java开发的,中间件用的是tomcat,如果像控制用户登录数怎么解决 求大神过来看看,web系统java开发的,中间件用的是tomcat,如果像控制用户登录数怎么解决?想做一个如果用户数连接达到500人,那么再有新用户访问网站就跳转到友好界面,如何做?是在TOMCAT里面可以设置,还是程序里面可以控制,求代码方案 解决方案 浏览器关闭了session就销毁了,不管是正常关闭还是非正常关闭,正常退出时销毁session,浏览器关闭也会销毁session,所有你
java中使用Filter控制用户登录权限具体实例_java
学jsp这么长时间,做的项目也有七八个了,可所有的项目都是用户登录就直接跳转到其拥有权限的页面,或者显示可访问页面的链接.使用这种方式来幼稚地控制访问权限.从来没有想过如果我没有登录,直接输入地址也可以直接访问用户的页面的. 在jsp中权限的控制是通过Filter过滤器来实现的,所有的开发框架中都集成有Filter,如果不适用开发框架则有如下实现方法: LoginFilter.java 复制代码 代码如下: public class LoginFilter implements Filter {
linux 让ssh只允许指定的用户登录的权限设置
方法一,只允许ssh指定用户登录权限的设置 SSH远程登录的权限直接影响服务器的安全,为ssh设置合理的用户权限是必须的. 查看ssh版本的命令: ssh -v 设置ssh只允许指定用户登录的方法 在/etc/ssh/sshd_config文件中添加如下语句 允许admin可以在任何地方登录 AllowUsers admin 只允许指定ip地址的用户可以登录 #允许root用户只能在192.168.0.1地方登录 AllowUsers root@192.168.0.1 同时限制用户名和ip登录s
使用触发器控制用户删除业务往来中使用的基础资料
本文转载:http://www.csframework.com/archive/1/arc-1-20120526-1945.htm 比如说货品资料,如果这个货品有了业务上的往来,比如采购和销售单使用该货品,在基础资料就不能删除该货品,这样的约束如何实现? 有下面两种常见处理方式: 1. 在DAL层的Delete方法中控制,删除前查询业务往来表,如果有使用该基础资料就抛出异常终止删除. 2. 使用DELETE触发器实现. 3. 使用主外键约束 下面是使用触发器实现的代码: ALTER TRIG
使用Oracle触发器实现IP限制用户登录
在Oracle里,不像MySQL那样方便,可以直接在用户上进行IP限制,Oracle要实现用户级别的IP限制 ,可以使用触发器来迂回实现,下面是一个触发器的例子: create or replace trigger logon_ip_control after logon on database declare ip STRING(30); user STRING(30); begin SELECT SYS_CONTEXT('USERENV','SESSION_USER') into user
[Oracle] 如何使用触发器实现IP限制用户登录
在Oracle里,不像MySQL那样方便,可以直接在用户上进行IP限制,Oracle要实现用户级别的IP限制,可以使用触发器来迂回实现,以下就是示例,需要的朋友可以参考下 下面是一个触发器的例子: 复制代码 代码如下: create or replace trigger logon_ip_control after logon on database declare ip STRING(30); user STRING(30); begin SELECT SYS_CONTEXT('U
[Oracle] 如何使用触发器实现IP限制用户登录_oracle
下面是一个触发器的例子: 复制代码 代码如下: create or replace trigger logon_ip_controlafter logon on databasedeclare ip STRING(30); user STRING(30);beginSELECT SYS_CONTEXT('USERENV','SESSION_USER') into user from dual;SELECT SYS_CONTEXT('USERENV','IP_ADDRESS') into ip