我们有一个需求,需要让我们的产品在Oracle和SQL Server上都能运行(它们最初是围绕SQL Server构建的)。不幸的是,我们没有任何内部的Oracle开发经验,但作为一名高级开发人员,这个项目落到了我的手中。到目前为止,我已经成功地使我们的应用程序连接到了Oracle数据库(我正在使用Oracle XE 11.2),并使用以下连接字符串:
我们决定使用这种连接字符串的原因是,我们不想依赖于更改每个客户端机器上的tnsnames.ora文件。然而,正如您所见,这个字符串指定了一个Oracle用户和相关密码。我们还需要提供使用SQL Server集成安全性等效项的能力。
根据我所阅读的文献,在做到这一点时,我只需要将
我原以为这将使我的应用程序可以使用Windows身份验证连接到Oracle数据库。但实际发生的是,我收到以下Oracle错误消息:
ORA-01005:未给出空密码;登录被拒绝
这似乎不太合理,因为它当然是空的 - 根据我读过的教程,它应该是这样的。
该应用程序为.NET Framework 3.5目标,我们使用System.Data.OracleProvider,并且实际连接等操作由Enterprise Library 5处理。顺便说一句,我知道OracleClient组件已被弃用,但在我处理更复杂的更改提供程序之前,我只想让其正常工作。
有人能告诉我我错过了什么吗?我选择了错误类型的连接字符串吗?对于任何基本错误,我表示歉意,但我一直设法避免使用Oracle,所以我的知识接近于零。
非常感谢。
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,所以我的知识接近于零。
非常感谢。