在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!
阅读(1484) | 评论(0) | 转发(0) |