暂无图片
ORACLE 主机sqlplus登录时记录连接终端的IP地址
我来答
分享
Thomas
2022-08-27
ORACLE 主机sqlplus登录时记录连接终端的IP地址

有个dbms_session.set_identifier,可以给登入的session赋予特别的IDENTIFIER。打算在主机的SQLPLUS的glogin.sql里加上这句:

exec dbms_session.set_identifier(xx);

不过这里的xx是当前SSH连入主机的客户端的IP地址。请问能实现吗?若实现了,该session在v$session里的记录,其client_identifier列的值就是终端的IP地址。

我来答
添加附件
收藏
分享
问题补充
3条回答
默认
最新
农夫三拳

1、oracle 用户的.bash_profile写入

export MYIP=\'`who am i | awk '{print $NF}' | sed -e 's/[()]//g'`\'
echo "exec dbms_session.set_identifier($MYIP);" >/home/oracle/myip.sql

2、glogin.sql里面引用/home/oracle/myip.sql

@/home/oracle/myip.sql

3、建议配置history显示时间、IP等信息,完善审计信息

暂无图片 评论
暂无图片 有用 2
暂无图片
Thomas
题主
2022-08-27
果然是高手,我试验了你的方法,分毫不差,感谢!
农夫三拳
答主
2022-08-28
这种方法在多人ssh的时候存在不准确的可能,修改一下,在执行sqlplus的时候实时生成插入ip语句 1、oracle 用户的.bash_profile写入 export MYIP=\'`who am i | awk '{print $NF}' | sed -e 's/[()]//g'`\' 2、glogin.sql里面 host echo "exec dbms_session.set_identifier($MYIP);" >/home/oracle/myip.sql @/home/oracle/myip.sql
Thomas

补充一下,在OS里,用w命令,可以显示连入终端的IP,比如

root@iZ94t0nyo72Z ~]# w

11:01:27 up 1 day, 18:50, 1 user, load average: 0.12, 0.07, 0.12
USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT
root pts/0 112.66.36.80 10:16 7.00s 0.04s 0.00s w

就是FROM列的内容,关键是如何把这个IP写入V$SESSION里以作为标识

暂无图片 评论
暂无图片 有用 0
Thomas

今天到单位试了一下,我们这里是:有多个人可以通过堡垒机然后SSH主机再SQLPLUS。现在就是要将我在ORACLE里的SESSION和其他人的区别开来,所以才想到把IP设为CLIENT_IDENTIFIER,但是,敲了who am i, 发现显示的是堡垒机IP,换言之,那几个人登录SQLPLUS则CLIENT_IDENTIFIER和我一样,都是堡垒机IP,这样就没法区分了。我这种情况,能否给个思路再用其它什么标识区分呢?

暂无图片 评论
暂无图片 有用 0
农夫三拳
2022-08-29
如果是单纯为了审计的话,堡垒机不是都可以录屏的吗?还有其他目的的话,建议分不同的oracle用户
回答交流
提交
问题信息
请登录之后查看
邀请回答
暂无人订阅该标签,敬请期待~~
暂无图片墨值悬赏