Oracle连接字符串使用Windows身份验证

4
我们有一个需求,需要让我们的产品在Oracle和SQL Server上都能运行(它们最初是围绕SQL Server构建的)。不幸的是,我们没有任何内部的Oracle开发经验,但作为一名高级开发人员,这个项目落到了我的手中。到目前为止,我已经成功地使我们的应用程序连接到了Oracle数据库(我正在使用Oracle XE 11.2),并使用以下连接字符串:
Data Source=(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=VS010-ORA11GR1)(PORT=1523))(CONNECT_DATA=(SERVICE_NAME=DEVORA)));User Id=dbo;Password=dbo;

我们决定使用这种连接字符串的原因是,我们不想依赖于更改每个客户端机器上的tnsnames.ora文件。然而,正如您所见,这个字符串指定了一个Oracle用户和相关密码。我们还需要提供使用SQL Server集成安全性等效项的能力。
根据我所阅读的文献,在做到这一点时,我只需要将/指定为用户ID,然后省略密码部分(因为对于Windows身份验证,该部分会被忽略)。我还创建了Oracle用户,确保它与Windows用户匹配,使用以下片段:
CREATE USER "OPS$<DOMAIN>\<user>" IDENTIFIED EXTERNALLY;

GRANT CONNECT,RESOURCE TO "OPS$<DOMAIN>\<user>";

我还检查了我的本地计算机上托管XE实例和开发环境的sqlnet.ora文件,其中包含以下行:

SQLNET.AUTHENTICATION_SERVICES= (NTS)

我原以为这将使我的应用程序可以使用Windows身份验证连接到Oracle数据库。但实际发生的是,我收到以下Oracle错误消息:
ORA-01005:未给出空密码;登录被拒绝
这似乎不太合理,因为它当然是空的 - 根据我读过的教程,它应该是这样的。
该应用程序为.NET Framework 3.5目标,我们使用System.Data.OracleProvider,并且实际连接等操作由Enterprise Library 5处理。顺便说一句,我知道OracleClient组件已被弃用,但在我处理更复杂的更改提供程序之前,我只想让其正常工作。
有人能告诉我我错过了什么吗?我选择了错误类型的连接字符串吗?对于任何基本错误,我表示歉意,但我一直设法避免使用Oracle,所以我的知识接近于零。
非常感谢。
2个回答

1

为了补充@Stikut的答案。我用NHibernate 3.3.3.GA测试过,它可以工作。

user id=/;password=;Integrated Security=yes

1

我曾经遇到过同样的问题,后来在连接字符串中添加了这个内容后解决了:

Integrated Security=yes

真的吗?我不记得是否尝试过这个,但我们有时间测试时我会试一下。我们决定最初不提供集成安全性,特别是考虑到 Oracle 自己也不推荐使用它。如果这解决了问题,我会非常高兴! - Steve Pettifer
终于有几分钟的时间来尝试一下,但我简直无法让它工作。除非迫切需要,否则我放弃这项研究! - Steve Pettifer

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接