You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Oracle 9i连接VS2017遇ORA-01017错误求助

解决Visual Studio 2017连接Oracle 9i时的ORA-01017错误

这个问题的核心原因是Oracle 9i使用的旧版身份验证算法(比如基于MD5的认证)和现代Oracle驱动/Visual Studio默认支持的认证方式不兼容——SQL Developer能正常连接是因为它内置了对旧版本Oracle的兼容逻辑,而VS和.NET驱动默认启用了更严格的认证规则。

下面是具体的解决方案,按优先级尝试:

1. 配置Oracle客户端的sqlnet.ora文件

Oracle客户端的sqlnet.ora文件控制着认证相关的参数,我们需要添加允许旧版本认证的配置:

  • 找到Oracle客户端安装目录下的network/admin文件夹(如果没有就手动创建)
  • 新建或编辑sqlnet.ora文件,添加以下内容:
    SQLNET.ALLOWED_LOGON_VERSION_SERVER = 9
    SQLNET.ALLOWED_LOGON_VERSION_CLIENT = 9
    
    (这两个参数指定允许与Oracle 9i版本的服务器/客户端进行认证,避免因算法不匹配导致的用户名密码验证失败)

2. 更换兼容Oracle 9i的ODP.NET驱动

现代版本的ODP.NET(比如12c及以后)已经不再支持Oracle 9i,你需要安装ODP.NET 11g R2版本(这是最后一个支持Oracle 9i的官方驱动):

  • 安装完成后,在项目中引用对应版本的Oracle.DataAccess.dll
  • 确保连接字符串使用该驱动的格式(你的现有连接字符串格式是兼容的,但要确认驱动版本匹配)

3. 修正连接字符串的格式问题

你的连接字符串中User Id = myUsername; Password = myPassword包含多余空格,虽然大部分情况下不影响,但有可能触发验证异常,建议修改为:

var connectionString = "Data Source=(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=myServerName)(PORT=1521)))(CONNECT_DATA=(SERVER=DEDICATED)(SID=mySID)));User Id=myUsername;Password=myPassword";

4. 确认FIPS设置完全生效

你已经修改了注册表项System\CurrentControlSet\Control\Lsa\FIPSAlgorithmPolicy\Enabled为0,但需要:

  • 重启电脑确保注册表修改生效
  • 检查Oracle客户端是否有单独的FIPS配置(部分旧版本客户端可能有独立设置,可在sqlnet.ora中添加SQLNET.FIPS_140=OFF来禁用)

5. 配置Visual Studio服务器资源管理器的驱动

当在服务器资源管理器添加连接时:

  • 选择“Oracle Database”作为数据源后,不要使用默认的驱动,而是选择旧版本的ODP.NET驱动或者“System.Data.OracleClient”(注意后者已被微软弃用,但仍可用于兼容旧系统)
  • 手动输入正确的连接字符串,而不是依赖向导自动生成

内容的提问来源于stack exchange,提问作者glautrou

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.28 09:49:42