我们要求我们的产品适用于Oracle以及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:给出null密码;登录被拒绝
根据我读过的教程,这当然没有多大意义,因为它应该是空的 - 它应该是。
该应用程序以.Net Framework 3.5为目标,我们使用System.Data.OracleProvider,实际连接等由Enterprise Library 5处理。顺便提一下,我知道OracleClient组件的弃用但我只是想要在我进入更换供应商的额外复杂性之前,这是可行的。
谁能告诉我我缺少什么?我选择了错误类型的连接字符串吗?我为任何基本错误道歉,但我一直设法避免使用Oracle,所以我对它的了解接近于零。
非常感谢
答案 0 :(得分:1)
我有同样的问题并在将此添加到conn后解决了。字符串:
Integrated Security=yes
答案 1 :(得分:1)
通过@Stikut扩展上面的答案。我用NHibernate 3.3.3.GA对它进行了测试,结果很好。
user id=/;password=;Integrated Security=yes