在特定情况下,如何使用Oracle Data Provider for .NET(ODP.NET)连接Oracle(12G及更高版本)似乎没有在线答案:
用户设置如下:
CREATE USER user_in_question
IDENTIFIED EXTERNALLY
-- etc.
并且代理连接已经设置如下:
ALTER USER specified_app_user GRANT CONNECT THROUGH user_in_question
创建ODP.NET OracleConnection字符串时的逻辑方法是这样的(使用用户友好的OracleConnectionStringBuilder):
var connBuilder = new OracleConnectionStringBuilder
{
UserID = "/", // External login using the user running the program
ProxyUserId = "specified_app_user",
DataSource = "database",
};
这不起作用。也没有提供空白"密码"或空白"代理密码"。也没有删除UserId。
那么在这种情况下如何使用ODP.NET进行连接?
答案 0 :(得分:2)
答案(我花了一个小时搜索没有任何运气)实际上非常简单,但不是非常用户友好:
var connBuilder = new OracleConnectionStringBuilder
{
UserID = "[specified_app_user]",
DataSource = "database",
};
//connBuilder.ToString() output:
//"USER ID=[specified_app_user];DATA SOURCE=database"
这适用于Oracle 12G +上的.NET 4.5+,但也可能适用于早期的.NET / Oracle / ODP.NET平台。我没有在ASP.NET中测试它,但它也应该在那里工作。
这样,UserId实际上就像ProxyUserId一样,只是用括号括起来,就像你通常使用Toad或SQlPlus登录Oracle数据库一样。
也可以使用这种格式(但在我的情况下,连接字符串必须与OraOLEDB格式兼容,因此不起作用):
//Without the use of the conn string builder class, just for the fun of it...
var connString = "User Id=specified_app_user;Data Source=database;Proxy User Id=/";
2017年3月2日编辑:上述行在某些情况下似乎不起作用。添加了关于它的评论,以下是IS工作的代码:
USER ID=[specified_app_user];DATA SOURCE=database
这个信息似乎不存在于任何地方 - 否则我忽略了它,在这种情况下,请纠正我。