如何禁止特定用户使用sqlplus或PL/SQL Developer等工具登陆?
来源:互联网 发布:阿里巴巴数据库多大 编辑:程序博客网 时间:2024/06/07 06:21
如何禁止特定用户使用sqlplus或PL/SQL Developer等工具登陆?
【本站文章除注明转载外,均为本站原创编译】
转载请注明:文章转载自: Oracle Clinic – Maclean Liu的个人技术博客 [http://www.oracledatabase12g.com/]
本文标题: 如何禁止特定用户使用sqlplus或PL/SQL Developer等工具登陆?
本文永久地址: http://www.oracledatabase12g.com/archives/how-to-prohibit-sqlplus-plsql-developer-logon-oracle.html
最早想要实现禁止某些特定用户使用SQLPLUS或PL/SQL Developer等工具登陆是在2010年的3月,当时发现用户的一套数据库中有大量的用户使用老版本的PL/SQL Developer登陆,具体的版本号记不清楚了,大约是PL/SQL Developer 5的版本,是否正版授权不得而知, 反正就是一个办公室里有大量的阿姨、大叔都靠这个图形化工具访问数据库,做一些必要的数据操作,主要是一些SQL查询语句,有时候他们还会用工具栏查一些对象(search object),正是因为他们使用了老版本的PL/SQL Developer,造成在使用一些widget的时候会引起Oracle出现一些非致命的ORA-00600错误,虽然这些600错误不会导致严重的问题,但是只要是出现在告警日志Alert.log中的600还是需要我们去分析。
当时我的想法是直接从Oracle的角度禁止普通用户以PL/SQL Developer工具登陆,虽然当时没有真的这样做。 题外话,要真的这么做了,估计那一办公室的阿姨、叔叔都要找我的麻烦,他们可不会用SQLPLUS来登数据库;让他们升级PL/SQL Developer到高版本的想法也基本可以打住,让阿姨、叔叔们升级可要比登天还难。
Google了一番,没有找到太多有用的信息。
闲来无事,我在著名的Oracle-l Freelist邮件列表中发了一封邮件,集思广益:
Hello every, Anyone can advise how to ban plsql developer connect to oracle?The plsql developer search widget may cause some ora-600 warning in alertlog . So I want to ban any connection using plsql developer.
Oracle-l Free List不愧是卧虎藏龙,第二天就收到了十分有用的信息,感谢这位 Coskan Gundogar的网友。
Damir-Vadas 在他的博客上提供了一种有效的方式,通过建立LOGON DATABASE的Trigger触发器,实现了仅允许拥有特定角色(Role)的用户通过sqlplus登陆实例。
这和我们的需求大致相仿,值得借鉴。我们的实际需求是: 针对某些已知的数据库用户账号,限制其使用SQLPLUS、PL/SQL Developer、Toad等工具登陆实例; 因为这里所要限制的用户账号和工具模块名(module)都是已知的,所以不必要如Damir-Vadas那样做成白名的形式,而只需要定义blacklist即可。实际这样做的一大目的是尽可能限制人为的登录; 我们知道当应用程序登录数据库时,根据应用程序的构成不同,可能使用JDBC Thin Client、Pro*C、ODBC等多种模块名(Module),我们不想限制应用程序的正常登录, 而仅仅想禁止人为地使用这些应用程序所使用的账号来登录实例(应用程序的账号信息可能被写在应用层中,或者为开发人员所知晓),一般我们只要限制SQLPLUS、PL/SQL Developer、Toad这几种主流的客户端程序,就可以限制人为地登录数据库了;当然这其实是防君子不防小人,实际如果hacker真的掌握了应用程序的账号密码的话,完全可以通过自己编写程序来访问数据库。
建立示例的,禁止以SQLPLUS和PL/SQL DEVELOPER登陆的用户账号TRY_LOGON_BY_TOOLS:
SQL> select * from v$version;BANNER----------------------------------------------------------------Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - 64biPL/SQL Release 10.2.0.1.0 - ProductionCORE 10.2.0.1.0 ProductionTNS for Linux: Version 10.2.0.1.0 - ProductionNLSRTL Version 10.2.0.1.0 - ProductionSQL> select * from global_name;GLOBAL_NAME--------------------------------------------------------------------------------www.oracledatabase12g.com & www.askmaclean.comSQL> create user TRY_LOGON_BY_TOOLS IDENTIFIED BY abc;User created.SQL> grant connect,resource to TRY_LOGON_BY_TOOLS;Grant succeeded.
创建以下LOGON DATABASE Trigger即可限制TRY_LOGON_BY_TOOLS用户以SQLPLUS、Toad、PL/SQL DEVELOPER 三种软件登陆数据库, 但是该用户仍能以其他的程序模块登录,如:JDBC、ODBC等;实际就是限制了该账号的人为登录,而应用程序如Java、.Net、Pro*C等语言编写的程序没有使用这里已经禁止的模块名(Module),所以不会被禁止登录。
记得修改TRY_LOGON_BY_TOOLS为你需要的用户名列表-- NAME: BLOCK_TOOLS_LOGON.SQL-- -------------------------------------------------------------------------- Copyright 2011, www.oracledatabase12g.com-- LAST UPDATED: 12/05/11-- Written By Maclean.Liu-- Usage: @BLOCK_TOOLS_LOGON-- -------------------------------------------------------------------------- PURPOSE:-- This script is to be used to help dba protect database-- from uninvited logon action-- -------------------------------------------------------------------------- DISCLAIMER:-- This script is provided for educational purposes only. It is NOT-- supported by Maclean Liu.-- The script has been tested and appears to work as intended.-- You should always run new scripts on a test instance initially.-- -------------------------------------------------------------------------- Script output is as follows:drop trigger BLOCK_TOOLS_LOGON;CREATE OR REPLACE TRIGGER BLOCK_TOOLS_LOGON AFTER LOGON ON DATABASEDECLARE my_forced_exception EXCEPTION; PRAGMA EXCEPTION_INIT(MY_FORCED_EXCEPTION, -20101);BEGIN IF (sys_context('USERENV', 'SESSION_USER') IN ('TRY_LOGON_BY_TOOLS')) -- add your username here THEN IF (UPPER(sys_context('USERENV', 'MODULE')) LIKE '%SQLPLUS%' OR --SQL*PLUS UPPER(sys_context('USERENV', 'MODULE')) LIKE '%TOAD%' OR --TOAD UPPER(sys_context('USERENV', 'MODULE')) LIKE '%PLSQLDEV%') --PL/SQL DEVELOPER THEN RAISE my_forced_exception; END IF; END IF;EXCEPTION WHEN my_forced_exception THEN RAISE_APPLICATION_ERROR(-20101, 'USER ' || sys_context('USERENV', 'SESSION_USER') || ' ' || 'MODULE ' || UPPER(sys_context('USERENV', 'MODULE')) || ' ' || ' Logon Action via tool is not allowed. Please contact Maclean Liu to help you!http://www.oracledatabase12g.com/'); WHEN OTHERS THEN null;END;/
以DBA身份用户登录并创建以上Trigger:
[oracle@vrh8 ~]$ sqlplus system/oracleSQL*Plus: Release 10.2.0.1.0 - Production on Tue Dec 6 00:34:12 2011Copyright (c) 1982, 2005, Oracle. All rights reserved.Connected to:Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - 64bit ProductionWith the Partitioning, OLAP and Data Mining optionsSQL> CREATE OR REPLACE TRIGGER BLOCK_TOOLS_LOGON 2 AFTER LOGON ON DATABASE 3 DECLARE 4 5 my_forced_exception EXCEPTION; 6 PRAGMA EXCEPTION_INIT(MY_FORCED_EXCEPTION, -20101); 7 BEGIN 8 IF (sys_context('USERENV', 'SESSION_USER') IN ('TRY_LOGON_BY_TOOLS')) -- add your username here 9 THEN 10 IF (UPPER(sys_context('USERENV', 'MODULE')) LIKE '%SQLPLUS%' OR --SQL*PLUS 11 UPPER(sys_context('USERENV', 'MODULE')) LIKE '%TOAD%' OR --TOAD 12 UPPER(sys_context('USERENV', 'MODULE')) LIKE '%PLSQLDEV%') --PL/SQL DEVELOPER 13 THEN 14 RAISE my_forced_exception; 15 END IF; 16 END IF; 17 EXCEPTION 18 WHEN my_forced_exception THEN 19 RAISE_APPLICATION_ERROR(-20101, 20 'USER ' || 21 sys_context('USERENV', 'SESSION_USER') || ' ' || 22 'MODULE ' || 23 UPPER(sys_context('USERENV', 'MODULE')) || ' ' || ' 24 Logon Action via tool is not allowed. 25 Please contact Maclean Liu to help you! 26 http://www.oracledatabase12g.com/'); 27 WHEN OTHERS THEN 28 null; 29 END; 30 /Trigger created.
成功创建后 , 使用指定的TRY_LOGON_BY_TOOLS用户尝试SQLPLUS登录:
[oracle@vrh8 ~]$ sqlplus TRY_LOGON_BY_TOOLS/abcSQL*Plus: Release 10.2.0.1.0 - Production on Tue Dec 6 01:18:47 2011Copyright (c) 1982, 2005, Oracle. All rights reserved.ERROR:ORA-00604: error occurred at recursive SQL level 1ORA-20101: USER TRY_LOGON_BY_TOOLS MODULE SQLPLUS@VRH8.ORACLE.COM (TNS V1-V3)Logon Action via tool is not allowed.Please contact Maclean Liu to help you!http://www.oracledatabase12g.com/ORA-06512: at line 17
TRY_LOGON_BY_TOOLS用户以PL/SQL Developer登录:
以上我们通过建立LOGON触发器的形式达到了禁止特定用户以SQLPLUS、PL/SQL Developer登录实例的目的,但是请注意Trigger触发器会消耗额外的资源,对于登录频繁的系统,一个小小的登录触发器可能引发性能的瓶颈。 另外在一些容易hang住的场景中,Trigger可能会引起更多不良的反应,所以请谨慎地在产品数据库中部署这些小玩样。
- 如何禁止特定用户使用sqlplus或PL/SQL Developer等工具登陆?
- pl/sql developer 登陆sys用户
- 登陆pl/sql developer
- PL/SQL Developer工具登陆一个新创建的用户进行查询时报Dynamic Performance Tables not accessible
- 使用pl/sql developer开发工具无法编译存储过程,触发器,包等程序文件
- PL/SQL Developer使用
- PL/SQL Developer使用
- PL/SQL Developer 工具优化
- PL/SQL Developer 工具技巧
- 客户端使用 pl/sql developer 无法以sys用户登录
- 使用PL/SQL Developer工具来实现创建表空间、创建数据库、备份数据库、数据导出等操作
- 使用PL/SQL Developer工具来实现创建表空间、创建数据库、备份数据库、数据导出等操作
- 使用PL/SQL Developer工具导入excel和导出excel
- 使用PL/SQL Developer工具导入excel和导出excel
- Oracle第三方工具PL/SQL Developer使用一
- 使用PL/SQL Developer工具导入导出Oracle数据库
- PL/SQL Developer引用客户端登陆数据库
- magento -- 如何禁止国内用户或某个特定地区的用户访问你的 magento网店呢
- 黑马程序员-正则表达式
- DirectShow对avi视频按帧设置慢放功能
- C语言练习(5月17日更新)
- Ibatis基础学习案例
- 程序员必备的七大面向对象设计原则
- 如何禁止特定用户使用sqlplus或PL/SQL Developer等工具登陆?
- php文件下载IE文件名乱码问题
- SSH2要点
- OpenSSL Examples
- 解决 OpenSSH - “ Error: Connection closed by server with exitcode 128 ” 错误(ZT)
- 懒人 配置权限(存储过程)
- C++向Excel数据库中创建、插入数据
- HTML总结
- 检索xml节点