【问题标题】:Connection to Oracle without a username or password无需用户名或密码即可连接到 Oracle
【发布时间】:2010-09-17 16:33:06
【问题描述】:

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

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

sqlplus /

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

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

不起作用,出现错误(抱歉,我现在没有可用的错误)。

我也尝试了许多其他形式的方法,但都没有成功。

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

【问题讨论】:

    标签: java oracle jdbc connection


    【解决方案1】:

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

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

    【讨论】:

    【解决方案2】:

    在 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 中已被取消支持。

    【讨论】:

      【解决方案3】:

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

      【讨论】:

        【解决方案4】:

        尝试关注 jdbc:oracle:thin:用户名/密码@localhost:1521:MYDBSID

        您需要指定账户信息

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

        【讨论】:

          【解决方案5】:

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

          Connect to an Oracle database using Kerberos

          【讨论】:

            【解决方案6】:

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

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

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

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

            【讨论】:

            • 仅供参考:在 Oracle 10g 数据库上使用 Oracle 11g JDBC 瘦驱动程序可与操作系统用户身份验证配合使用(我已经对其进行了测试)。但请注意,它并不是真正安全的,因为可以通过编程方式更改上述属性。即使不允许远程操作系统身份验证,在这种情况下,从未经授权的用户在同一台​​机器上运行程序仍然是一个高风险。
            • 驱动程序是否适用于连接字符串 /@TWO_TASK 与 Oracle Wallet 设置?有没有示例 Java 连接代码?
            【解决方案7】:

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

            【讨论】:

              【解决方案8】:

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

              【讨论】:

                猜你喜欢
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 2022-09-28
                • 1970-01-01
                • 2021-12-25
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                相关资源
                最近更新 更多