如何使用Windows身份验证将System.Data.OracleClient连接到oracle db?

问题描述:

使用Oracle SQL Developer,我可以将/ -character添加到用户名并将密码留空并且我可以连接。我有在数据库中创建的OP $ MYWINDOWSUSERNAME用户。如何使用Windows身份验证将System.Data.OracleClient连接到oracle db?

编辑:如果我检查OS身份验证复选框(清空并禁用用户名+密码),SQL Developer不起作用。此外,首选项 - >数据库 - >高级 - >使用Oracle客户端是没有选中的,所以我猜SQL Developer与我的System.Data.OracleClient.OracleConnection问题做了什么或没有什么关系。

然而,当我试图形成连接字符串是这样的:

string.Format("Data Source={0}; user id=/;password=;Integrated Security=yes", dbName); 

我得到ORA-01017:无效的用户名/密码:登录拒绝

string.Format("Data Source={0}; user id=/;password=;Integrated Security=no", dbName); 

我得到ORA -01005。

随着

string.Format("Data Source={0};Integrated Security=yes", dbName); 

我得到ORA-01017:无效的用户名/密码:登录拒绝

随着

string.Format("Data Source={0}; user id=/;", dbName); 

我得到ORA-01005

随着

string.Format("Data Source={0};User Id=/;Integrated Security=yes;", dbName); 

我得到ORA-01017

双方的OracleConnection在我的计划和Oracle SQL Developer中工作时,我指定的用户名和密码。

编辑:这适用于

string.Format("Data Source={0};Integrated Security=yes", dbName); 

时SQLNET.ORA线

SQLNET.AUTHENTICATION_SERVICES= (NTS) 

改为

SQLNET.AUTHENTICATION_SERVICES= (NONE) 

如果有人写简短的回答发生了什么,为什么,我很高兴为他/她提供奖励。

+0

只要删除'user id'&'password'令牌 –

+0

这不起作用。这是我第一次迭代。 –

+0

啊显然它的'数据源= myOracleDB;用户ID =/- ' - https://www.connectionstrings.com/net-framework-data-provider-for-oracle/windows-authentication/ –

你的问题是你不能在数据库机器本身之外使用/作为用户ID。在某些情况下也是/不能用于连接到数据库,除非它被指定为“/ as sysdba”。因此,如果您想通过客户端库(如ADO.NET)进行连接,则必须指定用户名和密码,否则将无法连接。

,如果你想拥有认证使用LDAP用户也可以使用OAM和ORACLE SSO和OUD/EUM

+0

但我说:“使用Oracle SQL Developer,我可以将/ -character添加到用户名并将密码留空。”我是说从同一台机器上尝试ADO.NET连接。所以/从另一台机器运行。 –

SQL Developer有有时ununderstandable行为来访问数据库。这对于“OS身份验证”功能来说并不可靠。

您应该从认证字符串完全删除id

string.Format("Data Source={0}; Integrated Security=yes;", dbName); 

编辑

,它仅当你取下NTS选项可能意味着预期的服务没有运行,或者说事实NTS不支持所有用户的操作系统身份验证,但只适用于SYS。找到here一些解释:

NTS服务在Windows环境中使用,使基于o/s级别认证的Sys用户认证。所以如果你不想每次都提供Sys用户的密码,你应该设置它。

而且here人谁使用的东西,你可以尝试在其sqlnet.ora

SQLNET.AUTHENTICATION_SERVICES =(NONE, NTS) 

它也可能取决于你的Oracle版本; here it says NTS is not supported with Oracle 12c

与Oracle数据库12c的第1版(12.1)开始,NTS认证适配器不再支持使用NTLM到Windows域用户身份验证。因此,NTS不能用于在旧的Windows NT域或使用旧的Windows NT域控制器的域中对用户进行身份验证。但是,作为Windows本地用户运行的本地连接和Oracle数据库服务将继续使用NTLM进行身份验证。

+0

@matti,编辑更多信息 –

你的问题不是在连接字符串,但在Active Directory结构,并使用AD的LDAP数据库能力的Oracle设置什么原因,如果你尝试在本地数据库的代码,例如OracleXE,不使用主动目录你可能会成功,但同时在分布式Oracle服务器上,你可能会得到授权错误,所以找一个强大的管理员来设置你的AD和Oracle。

+0

请参阅我的编辑。 –

简而言之,它是由NTS指示的Windows本机操作系统认证。

一旦NTS指定,Oracle客户端识别用户名作为工作组\用户名或域\用户名不匹配您的OP $ MYWINDOWSUSERNAME数据库用户

为了要把它与NTS选项时,你需要包括域/工作组名在你的数据库的用户名:

CREATE USER "OPS$<DOMAIN_NAME>\<OS_USERNAME>" IDENTIFIED EXTERNALLY; 

Oracle支持文档750436.1证实了这一点有详细步骤。