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

使用Oracle.ManagedDataAccess.Client代理用户登录报ORA-01017如何解决

问题原因

Oracle.ManagedDataAccess.Client(托管ODP.NET)的代理用户连接语法与旧版非托管Oracle.DataAccess.Client不兼容,你当前使用的用户名[目标代理用户]方括号语法是非托管驱动的专属规则,托管驱动无法识别该格式,会将整段developer2[reportbot]作为登录用户名提交校验,因此触发ORA-01017错误。

解决方案

使用托管ODP.NET支持的代理用户专用连接参数修改连接字符串即可,无需修改其他业务逻辑:

正确连接字符串格式

// 核心参数说明:User Id填需要模拟的目标账号,Proxy User Id/Proxy Password填你自己的开发账号密码
string constr = "Data Source=ProdJobDb;User Id=reportbot;Proxy User Id=developer2;Proxy Password=Wysiwyg.12345;";

修改后的完整测试代码

static void Main(string[] args)
{ // 模拟reportbot账号访问对应schema资源
    string constr = "Data Source=ProdJobDb;User Id=reportbot;Proxy User Id=developer2;Proxy Password=Wysiwyg.12345;";
    string ProviderName = "Oracle.ManagedDataAccess.Client";

    DbProviderFactory factory = DbProviderFactories.GetFactory(ProviderName);

    using (DbConnection conn = factory.CreateConnection())
    {
        try
        {
            conn.ConnectionString = constr;
            conn.Open();
            // 此处可正常执行reportbot有权限的存储过程、表查询等操作
        }
        catch (Exception ex)
        {
            Console.WriteLine(ex.Message);
            Console.WriteLine(ex.StackTrace);
        }
    }
}
补充注意事项
  • 确保你使用的Oracle.ManagedDataAccess Nuget包版本不低于12.1,早期预览版托管驱动存在代理用户功能缺陷,建议升级到最新稳定版
  • 数据库端权限配置无需修改,原非托管模式下已配置的ALTER USER reportbot GRANT CONNECT THROUGH developer2;权限可直接复用
  • 如果你仅需要访问reportbot schema下的对象,且你的开发账号已经有对应对象的访问权限,也可以在连接打开后执行ALTER SESSION SET CURRENT_SCHEMA = reportbot;语句切换默认schema,无需走代理登录逻辑

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 08:51:03