使用Windows身份验证与Oracle建立SSIS连接

时间:2017-12-04 13:34:53

标签: sql-server oracle ssis

使用SSIS for SQL Server(2012或更高版本)标准版,我想使用Windows身份验证连接到远程Oracle数据库。

在我的测试中,这在使用sqlplus时工作正常:
    sqlplus / @ MyRemoteConnection

在SSIS中(使用ADO.NET或OLE DB连接管理器),连接 指定用户标识和密码时成功。 指定" /&#34时连接失败; SSIS连接中的用户(没有密码)。

是否支持通过Windows进行身份验证以实现与Oracle的SSIS连接? 如果是,我该怎么做?

如果不支持Windows身份验证,是否有其他工具可以让我从SQL Server标准版连接(这就是为什么不能使用Attunity)?

所有建议都非常感谢!

1 个答案:

答案 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身份验证。