我们要求我们的产品能够在 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: 给出的密码为空;登录被拒绝
这没有多大意义,因为它当然是空的 - 根据我读过的教程,它应该是空的。
该应用程序面向 .Net Framework 3.5,我们使用 System.Data.OracleProvider,实际连接等由 Enterprise Library 5 处理。顺便说一句,我知道 OracleClient 组件已弃用,但我只是希望它能够工作在我讨论更换提供商的额外复杂性之前。
谁能告诉我我错过了什么?我是否选择了错误的连接字符串类型?我为任何基本错误表示歉意,但到目前为止我一直设法避开 Oracle,所以我对它的了解接近于零。
非常感谢