Linux 在ORACLE SQL中更改计算机名

Linux 在ORACLE SQL中更改计算机名,linux,oracle,ubuntu,jdbc,Linux,Oracle,Ubuntu,Jdbc,我是SQL开发新手。在工作中尝试访问远程数据库时,我经常无法访问,因为我的机器名很奇怪。我希望它复制我的计算机名,但它看起来像这样: select OSUSER, MACHINE from v$session where username = 'user1' OSUSER MACHINE myOsName jdbcclient 运行hostname或hostnamectl会显示我的电脑的正确名称,即“Grynek pc”。有没有办法更改机器的名称 OS:Ubuntu 19.

我是SQL开发新手。在工作中尝试访问远程数据库时,我经常无法访问,因为我的机器名很奇怪。我希望它复制我的计算机名,但它看起来像这样:

select OSUSER, MACHINE from v$session where username = 'user1'

OSUSER      MACHINE

myOsName    jdbcclient
运行hostname或hostnamectl会显示我的电脑的正确名称,即“Grynek pc”。有没有办法更改机器的名称


OS:Ubuntu 19.04,program:SQL Developer

V$SESSION
中看到的属性与使用默认上下文(
SYS\u context
)可以恢复的属性相同。在这种情况下,您有两个感兴趣的领域:

  • 计算机操作系统计算机名称
  • 终端操作系统终端名称
例如:

1.我使用Toad从笔记本电脑访问

SQL> select username , osuser ,  machine,terminal , program from v$session where 
     username = 'MY_DB_USER' and upper(osuser) = 'MY_OS_USER' ;

USERNAME                       OSUSER                         MACHINE                        TERMINAL                       PROGRAM
------------------------------ ------------------------------ ------------------------------ ------------------------------ --------------------
MY_DB_USER                     MY_OS_USER                     DOMAIN\xxxxxxxxxxxxxx          xxxxxxxxxxxx                Toad.exe
在这种情况下,
MACHINE
给我主机名和域窗口信息,而终端只给我终端名,没有域信息。在程序栏中,我可以看到我的蟾蜍软件

2.我使用sqlplus进行本地连接

SQL> host whoami
ftpcpl

SQL> select username , osuser ,  machine,terminal , program from v$session where username = 'SYS' and osuser = 'ftpcpl' ;

USERNAME                       OSUSER                         MACHINE                        TERMINAL                       PROGRAM
------------------------------ ------------------------------ ------------------------------ ------------------------------ --------------------
SYS                            ftpcpl                         my_database_server_hostname    pts/1                          sqlplus@xxxxxx
在我的本地连接中,终端是我的
tty
linux终端会话,机器是本地数据库主机名

但是,当您使用Weblogic、Websphere或Tomcat等中间件软件时,Oracle
v$session
列程序通常显示“JDBC瘦客户端”,而终端列显示“未知”。追溯此连接来源的方法是查看Oracle SQL*Net侦听器日志。如果您使用的是精简jdbc驱动程序,通常不会看到比使用厚(oci8)驱动程序更多的信息

回答您的问题,不,您不能在V$会话中更改终端或机器名,这些是会话本身的继承属性。但是,您可以使用DBMS_会话将上下文级别的信息应用于会话

检查这篇好文章:


V$SESSION
中看到的属性与使用默认上下文(
SYS\u context
)可以恢复的属性相同。在这种情况下,您有两个感兴趣的领域:

  • 计算机操作系统计算机名称
  • 终端操作系统终端名称
例如:

1.我使用Toad从笔记本电脑访问

SQL> select username , osuser ,  machine,terminal , program from v$session where 
     username = 'MY_DB_USER' and upper(osuser) = 'MY_OS_USER' ;

USERNAME                       OSUSER                         MACHINE                        TERMINAL                       PROGRAM
------------------------------ ------------------------------ ------------------------------ ------------------------------ --------------------
MY_DB_USER                     MY_OS_USER                     DOMAIN\xxxxxxxxxxxxxx          xxxxxxxxxxxx                Toad.exe
在这种情况下,
MACHINE
给我主机名和域窗口信息,而终端只给我终端名,没有域信息。在程序栏中,我可以看到我的蟾蜍软件

2.我使用sqlplus进行本地连接

SQL> host whoami
ftpcpl

SQL> select username , osuser ,  machine,terminal , program from v$session where username = 'SYS' and osuser = 'ftpcpl' ;

USERNAME                       OSUSER                         MACHINE                        TERMINAL                       PROGRAM
------------------------------ ------------------------------ ------------------------------ ------------------------------ --------------------
SYS                            ftpcpl                         my_database_server_hostname    pts/1                          sqlplus@xxxxxx
在我的本地连接中,终端是我的
tty
linux终端会话,机器是本地数据库主机名

但是,当您使用Weblogic、Websphere或Tomcat等中间件软件时,Oracle
v$session
列程序通常显示“JDBC瘦客户端”,而终端列显示“未知”。追溯此连接来源的方法是查看Oracle SQL*Net侦听器日志。如果您使用的是精简jdbc驱动程序,通常不会看到比使用厚(oci8)驱动程序更多的信息

回答您的问题,不,您不能在V$会话中更改终端或机器名,这些是会话本身的继承属性。但是,您可以使用DBMS_会话将上下文级别的信息应用于会话

检查这篇好文章:


确保您使用的是最新的Oracle客户端或JDBC驱动程序,并且他们应该准确地报告机器。如果没有,则可能伪造许多会话值,如OSUSER和MACHINE

最近的Oracle客户端和JDBC驱动程序应该正确地报告机器。看起来您使用的是Oracle SQL Developer的现代版本,但它是否使用了现代驱动程序?签入工具-->首选项-->数据库-->高级以获取自定义设置,必要时更新驱动程序

希望不会发生这种情况,但几乎所有这些。中介绍了一些会话值。例如,OSUSER基于JVM属性“user.name”。您可以通过将行
AddVMOption-Duser.name=SomeUserName
添加到文件“…\sqldeveloper\ide\bin\ide.conf”并重新启动sqldeveloper来伪造会话OSUSER

我无法专门欺骗机器,因为我不确定驱动程序如何获得主机名。(在Windows上,我尝试创建一个假的“hostname.exe”并运行
set computername=fakeName
,但这两种方法都不起作用。)如果您正在编写自己的JDBC程序,那么这些值很容易设置,例如
java.util.props=new java.util.Properties();props.put(“v$session.terminal”,“我的电脑!”)但我不确定如何使用SQL开发人员使用的现有驱动程序实现这一点


如果无法更改IDE的计算机值,请将此信息发送给基于V$SESSION创建安全规则的人。他们的访问规则并不像他们想象的那样安全。访问规则可能会阻止您使用SQL Developer,但它们不会提供很好的保护来抵御真正的威胁。

确保您使用的是最新的Oracle客户端或JDBC驱动程序,并且它们应该准确地报告机器。如果没有,则可能伪造许多会话值,如OSUSER和MACHINE

最近的Oracle客户端和JDBC驱动程序应该正确地报告机器。看起来您使用的是Oracle SQL Developer的现代版本,但它是否使用了现代驱动程序?签入工具-->首选项-->数据库-->高级以获取自定义设置,必要时更新驱动程序

希望不会发生这种情况,但几乎所有这些。中介绍了一些会话值。例如,OSUSER基于JVM属性“user.name”。您可以通过将行
AddVMOption-Duser.name=SomeUserName
添加到文件“…\sqldeveloper\ide\b”来伪造Session OSUSER