7

Oracle 有这样一个概念,即允许数据库用户由运行连接到 Oracle 的程序的操作系统用户来识别。见这里

这使您可以像 unix 机器上的用户那样执行以下命令:

sqlplus /

我正在尝试为 Oracle 10.2 编写一个无需用户名或密码即可连接的 Java 程序。url的明显选择:

jdbc:oracle:thin:/@localhost:1521:MYDBSID

不起作用,给出一个错误(对不起,我现在没有可用的错误)。

我也尝试了许多其他形式的这样做,但没有运气。

有人对我如何使用操作系统识别方法将 Java 程序连接到 Oracle 有任何建议吗?

4

8 回答 8

7

JDBC Thin 驱动程序是 100% 纯 Java 实现,无法从操作系统收集所需的信息。

JDBC OCI 驱动程序可以做到这一点!使用jdbc:oracle:oci8:/@MYDBSID,它将要求在该机器上安装 Oracle 驱动程序,如果这是一台服务器,则不是问题(并且启动速度更快,并且支持比瘦驱动程序更多的功能)

于 2008-10-17T06:34:10.667 回答
1

oracle 提供的 jdbc 驱动程序无法从您提供的 URL 中收集操作系统用户名和密码。假设,有用于 ORACLE 的 3rd 方 JDBC 驱动程序提供程序,其中之一可能提供您所要求的功能。你应该到处谷歌。

于 2008-10-17T05:44:45.710 回答
1

感谢那些回答。我们已经使用了 OCI 驱动程序。

我确实找到了表明 Oracle 11g确实支持通过瘦驱动程序进行操作系统用户身份验证的文档:

http://www.orindasoft.com/public/Oracle_JDBC_JavaDoc/javadoc1110/oracle/jdbc/OracleConnection.html#CONNECTION_PROPERTY_THIN_VSESSION_OSUSER

我没有 11g 设置来测试它,所以我不能确定它是否有效。

于 2008-10-19T20:37:53.677 回答
1

在 11g 中添加了 JDBC 瘦驱动程序中的 OS 身份验证支持(您可以在 OTN 上从 11.2.0.4 下载 JDBC 瘦驱动程序)。

请注意,您必须允许服务器上的远程操作系统身份验证(通过 TCP),否则它只能在本地使用 IPC 或 BEQ 与 sqlplus 一起使用。在您的 init.ora 文件中,添加以下内容:

REMOTE_OS_AUTHENT = TRUE

然后,如果您的用户是客户端计算机上的“osuserdemo”,请创建一个这样的数据库用户并重新启动数据库:

 CREATE USER OSUSERDEMO IDENTIFIED EXTERNALLY;
 GRANT CONNECT,CREATE SESSION,RESOURCE TO OSUSERDEMO; 

并且 JDBC 瘦驱动程序应该能够在没有任何用户名或密码的情况下进行连接。

值得注意的是,此功能 - 被认为是高度不安全的 - 在 12c 中已被取消支持。

于 2015-06-17T21:44:31.693 回答
0

如果您从 J2EE 应用服务器访问 Oracle,则可以通过使用 JNDI 获取数据源来达到类似的目的。

于 2008-10-17T06:50:45.857 回答
0

11g 瘦驱动程序可以使用 Kerberos 身份验证进行连接。

请参阅使用 Kerberos 连接到 Oracle 数据库

于 2010-08-04T19:01:43.493 回答
0

尝试以下 jdbc:oracle:thin:username/password@localhost:1521:MYDBSID

您需要指定帐户信息

sqlplus / as sysdba 在通过操作系统认证的 unix 机器上

于 2011-12-14T06:04:16.147 回答
-1

jdbc:oracle:oci:@适用于 ojdbc6.jar 和 Oracle 11g2

于 2015-06-17T13:35:12.363 回答