11

使用 Oracle SQL Developer,我可以将 / -character 放入用户名并将密码留空并连接。我在数据库中创建了 OP$MYWINDOWSUSERNAME 用户。

编辑:如果我检查操作系统身份验证复选框(清空并禁用用户名 + 密码),SQL Developer 将不起作用。此外,Preferences->Database->Advanced->Use Oracle Client 未选中,所以我猜 SQL Developer 做什么或不做什么与我的 System.Data.OracleClient.OracleConnection 问题关系不大。

但是,当我尝试像这样形成连接字符串时:

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

我得到 ORA-01017: invalid username/password: login denied

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: invalid username/password: login denied

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)

如果有人写下正在发生的事情和原因的简短回答,我很乐意为他/她提供赏金。

4

4 回答 4

2

您的问题不在于连接字符串,而在于您的 Active Directory 结构,以及 Oracle 设置使用 AD 的 LDAP DB 的能力,如果您在本地 DB(例如 OracleXE)上尝试您的代码,而不使用 Active Directory,您可能会成功,但同时在分布式 Oracle 服务器上,您可能会遇到授权错误,因此请找一个强大的管理员来正确设置您的 AD 和 Oracle。

于 2017-04-23T14:23:16.970 回答
2

SQL Developer 有时会出现无法理解的行为。此“操作系统身份验证”功能不可靠。

您应该id从身份验证字符串中完全删除:

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

编辑

仅当您删除 NTS 选项时它才有效这一事实可能意味着预期的服务未运行,或者 NTS 不支持所有用户的操作系统身份验证,但仅适用于SYS. 在这里找到了一些解释:

NTS服务用于windows环境下,基于o/s级别的认证进行Sys用户认证。所以如果你不愿意每次都提供 Sys 用户的密码,你应该设置这个。

在这里有人使用你可以尝试的东西sqlnet.ora

SQLNET.AUTHENTICATION_SERVICES =(NONE, NTS)

它也可能取决于您的 Oracle 版本;这里它说Oracle 12c 不支持 NTS

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

于 2017-04-21T07:26:48.710 回答
2

简而言之,就是NTS表示的Windows原生操作系统认证。

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

为了让它与 NTS 选项一起使用,您需要在您的数据库用户名中包含域/工作组名称:

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

oracle 支持文档 750436.1 通过详细步骤确认了这一点。

于 2017-04-27T00:51:06.417 回答
1

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

如果您想使用 LDAP 用户进行身份验证以访问数据库,您还可以使用 OAM 和 ORACLE SSO 和 OUD/EUM

于 2017-03-24T13:56:53.107 回答