使用Oracle SQL Developer,我可以将/ -character放入用户名并将密码保留为空,然后连接。我在数据库中创建了OP $ MYWINDOWSUSERNAME用户。
编辑:如果我检查操作系统身份验证复选框(清空并禁用用户名+密码),则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 :(得分:2)
SQL Developer有时候会有不可理解的行为。对于这种"操作系统认证"它不可靠。特征
您应该从身份验证字符串中完全删除id
:
string.Format("Data Source={0}; Integrated Security=yes;", dbName);
只有当您删除NTS选项时,它才能运行,或者NTS不支持所有用户的操作系统身份验证,但仅适用于{{ 1}} 即可。找到here一些解释:
NTS服务在Windows环境中用于根据o / s级别身份验证进行Sys用户身份验证。因此,如果您不愿意每次都提供Sys用户的密码,则应设置此密码。
here使用您可以在其SYS
中尝试的内容的人:
sqlnet.ora
它也可能取决于您的Oracle版本; here it says NTS is not supported with Oracle 12c
从Oracle Database 12c第1版(12.1)开始, NTS身份验证适配器不再支持使用NTLM对Windows域用户进行身份验证。因此,NTS不能用于验证旧Windows NT域中的用户或使用旧Windows NT域控制器的域。但是,使用NTLM继续对作为Windows本地用户运行的本地连接和Oracle数据库服务进行身份验证。
答案 1 :(得分:2)
你的问题不在连接字符串中,而是在你的Active Directory结构中,以及能够使用AD的LDAP DB的Oracle设置,为什么你在本地数据库上尝试代码,例如OracleXE,而不使用活动目录将会成功,但同时在分布式Oracle服务器上您可能会收到授权错误,因此请找一位能够正确设置AD和Oracle的强大管理员。
答案 2 :(得分:2)
简而言之,它是由NTS指示的Windows本机操作系统身份验证。
一旦指定NTS,oracle客户端将用户名识别为workgroup \ username或domain \ username,它与您的OP $ MYWINDOWSUSERNAME数据库用户不匹配
为了让它使用NTS选项,您需要在db用户名中包含域/工作组名称:
CREATE USER "OPS$<DOMAIN_NAME>\<OS_USERNAME>" IDENTIFIED EXTERNALLY;
oracle支持文档750436.1通过详细步骤确认了这一点。
答案 3 :(得分:1)
您的问题是您不能在数据库机器外部使用/作为用户ID。在某些情况下/不能用于连接到数据库,除非它被指定为“/ as sysdba”。因此,如果您想通过ADO.NET等客户端库进行连接,则必须指定用户名和密码,否则将无法连接。
如果您想使用LDAP用户进行身份验证以访问数据库,您还可以使用OAM和ORACLE SSO和OUD / EUM