Chinaunix首页 | 论坛 | 博客
  • 博客访问: 3550034
  • 博文数量: 715
  • 博客积分: 1860
  • 博客等级: 上尉
  • 技术积分: 7745
  • 用 户 组: 普通用户
  • 注册时间: 2008-04-07 08:51
个人简介

偶尔有空上来看看

文章分类

全部博文(715)

文章存档

2023年(75)

2022年(134)

2021年(238)

2020年(115)

2019年(11)

2018年(9)

2017年(9)

2016年(17)

2015年(7)

2014年(4)

2013年(1)

2012年(11)

2011年(27)

2010年(35)

2009年(11)

2008年(11)

最近访客

分类: Oracle

2022-03-23 11:27:56

在linux/unix上直接sqlplus / as sysdba 可以登录数据库,但是这样不太安全,比如不太熟悉oracle维护的开发人员随便操作数据库。

专业的做法是在$ORACLE_HOME/network/admin/sqlnet.ora 
中加入 SQLNET.AUTHENTICATION_SERVICES=(NONE) 即可生效

没有设置前

可以直接登录(绿色箭头所指),以sys用户的权限执行任何操作(比如:关库、删除数据)。

修改sqlnet.ora 后 (不需要重启侦听,立即生效)
就不允许直接登录了(蓝色箭头)

有的环境中sqlnet.ora 在$TNS_ADMIN目录下

一般人会被拦住,懂点的可能会自己修改sqlnet.ora 去掉这个限制,因此可以进一步防护:修改属主和权限

这样oracle用户就不能直接修改sqlnet.ora了。
禁止sys
直接登录,还影响备份rman target / 或ADG切换平台、监控、脱敏等系统,要注意测试。


可是,你有你的张良计,我有我的过墙梯,要想很容易的实现登录数据库,即使无法改写sqlnet.ora,也可轻松绕开,即利用 $TNS_ADMIN,使其临时指向一个新目录,手工生成一个简单的sqlnet.ora即可(这很像黑客伪造证书)。


要想禁止普通用户直接登录,得靠触发器

  1. CREATE OR REPLACE TRIGGER LOGON_DENY
  2.   AFTER LOGON ON DATABASE
  3. DECLARE
  4.   my_forced_exception EXCEPTION;
  5.   PRAGMA EXCEPTION_INIT(MY_FORCED_EXCEPTION, -20101);
  6. BEGIN
  7.   --禁止sys用户从192.168.204.10/30上用sqlplus登录
  8.   IF (sys_context('USERENV', 'SESSION_USER') IN ('SCOTT')) -- add your username here
  9.    THEN
  10.     IF (UPPER(sys_context('USERENV', 'MODULE')) LIKE '%SQLPLUS%' AND --SQL*PLUS
  11.        SYS_CONTEXT('USERENV','IP_ADDRESS') in ('192.168.204.30','192.168.204.10'))
  12.      THEN
  13.       RAISE my_forced_exception;
  14.     END IF;
  15.   END IF;
  16. EXCEPTION
  17.   WHEN my_forced_exception THEN
  18.     RAISE_APPLICATION_ERROR(-20101,
  19.                             'USER ' ||
  20.                             sys_context('USERENV', 'SESSION_USER') || ' ' ||
  21.                             'MODULE ' ||
  22.                             UPPER(sys_context('USERENV', 'MODULE')) || ' ' || '
  23.                               Logon Action is not allowed.
  24.                               Please contact DBA');
  25.   WHEN OTHERS THEN
  26.     null;
  27. END;
  28. /

但是 SYS 好像不能被拦截,它总是很特殊(密码有效期就不起作用)。

一个思路是:
把orapwd执行权限去掉,属主改为root
删除口令文件!
给rman创建专用备份用户,并授权
给ADG配置参数redo_transport_user,指定专用用户
给监控配置专用用户,授予连接和查询数据字典权限
给脱敏配置专用用户
给XX配置专用用户...

一切交给了root 或者了解一下 oracle database vault


GoodLuck!
阅读(1600) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~