使用SSIS for SQL Server(2012或更高版本)标准版,我想使用Windows身份验证连接到远程Oracle数据库。
在我的测试中,这在使用sqlplus时工作正常:
sqlplus / @ MyRemoteConnection
在SSIS中(使用ADO.NET或OLE DB连接管理器),连接 指定用户标识和密码时成功。 指定" /&#34时连接失败; SSIS连接中的用户(没有密码)。
是否支持通过Windows进行身份验证以实现与Oracle的SSIS连接? 如果是,我该怎么做?
如果不支持Windows身份验证,是否有其他工具可以让我从SQL Server标准版连接(这就是为什么不能使用Attunity)?
所有建议都非常感谢!
答案 0 :(得分:1)
是的,支持从SQL Server Standard Edition到Oracle的Windows身份验证。
有效的ADO.NET连接字符串(例如,使用Visual Studio(SSIS)或SQL Server Management Studio中的导入向导)可能如下所示:
Data Source=<host name>:<port number>/<database name>;Integrated Security=SSPI;
一个例子:
Data Source=my_host_name.com:1521/ORCL;Integrated Security=SSPI;
对于Windows身份验证,“集成安全性” 需要设置为“是”,“真实”或“SSPI”。
有效的OLE DB连接字符串如下所示:
Data Source=<host name>:<port number>/<database name>;User ID=/Provider=OraOLEDB.Oracle.1;
示例:
Data Source=my_host_name.com:1521/ORCL;User ID=/Provider=OraOLEDB.Oracle.1;
请注意: 端口号是可选的,如果使用标准端口号(通常为1521),则可以省略。 使用SSIS时,Connection Manager可能会抱怨该消息 “不支持给定路径的格式。” 如果在连接字符串中指定了端口号,则会发生这种情况。 如果连接字符串由表达式中的变量填充,则连接字符串(包括端口号)仍然有效。
进一步要求:
在文件系统上(在客户端和服务器上),必须存在一个文件sqlnet.ora。
该文件必须包含字符串
SQLNET.AUTHENTICATION_SERVICES= (NTS)
在数据库服务器上,以及使用完整的Oracle客户端时, 文件sqlnet.ora应位于ORACLE_HOME \ Network \ Admin目录中 ORACLE_HOME通常在注册表中定义,在下 HKEY_LOCAL_MACHINE \ SOFTWARE \ ORACLE
如果已安装Instant Client,则可以将文件sqlnet.ora放在Instant Client所在目录下的“network \ admin”子目录中。 请注意,Instant Client不会查看注册表以使用(或评估)ORACLE_HOME。 因此,尝试连接到Oracle服务器时,不会读取位于那里的sqlnet.ora文件! (这就是为什么我的连接一直都失败的原因。)
另一种选择是通过设置环境变量TNS_ADMIN来指定sqlnet.ora的目录,例如,在Windows控制面板中。
例:
TNS_ADMIN = C:\ TNS_ADMIN
然后,将文件sqlnet.ora放入此目录中。
在Oracle服务器上,Windows用户需要存在。 示例:
create user "OPS$MYDOMAIN\MY_USER_NAME" identified externally;
grant create session, alter session to "OPS$MYDOMAIN\MY_USER_NAME";
(可能需要其他特权。)
然后应该可以作为Windows用户MY_USER_NAME连接到Oracle, 使用Windows身份验证。