在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即可(这很像黑客伪造证书)。
要想禁止普通用户直接登录,得靠触发器
-
CREATE OR REPLACE TRIGGER LOGON_DENY
-
AFTER LOGON ON DATABASE
-
DECLARE
-
my_forced_exception EXCEPTION;
-
PRAGMA EXCEPTION_INIT(MY_FORCED_EXCEPTION, -20101);
-
BEGIN
-
--禁止sys用户从192.168.204.10/30上用sqlplus登录
-
IF (sys_context('USERENV', 'SESSION_USER') IN ('SCOTT')) -- add your username here
-
THEN
-
IF (UPPER(sys_context('USERENV', 'MODULE')) LIKE '%SQLPLUS%' AND --SQL*PLUS
-
SYS_CONTEXT('USERENV','IP_ADDRESS') in ('192.168.204.30','192.168.204.10'))
-
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 is not allowed.
-
Please contact DBA');
-
WHEN OTHERS THEN
-
null;
-
END;
-
/
-
但是 SYS 好像不能被拦截,它总是很特殊(密码有效期就不起作用)。
一个思路是:
把orapwd执行权限去掉,属主改为root
删除口令文件!
给rman创建专用备份用户,并授权
给ADG配置参数redo_transport_user,指定专用用户
给监控
配置专用用户,授予连接和查询数据字典权限
给脱敏配置专用用户
给XX
配置专用用户...
一切交给了root 或者了解一下 oracle database vault
GoodLuck!
阅读(1745) | 评论(0) | 转发(0) |