SQL Server执行xp_cmdshell,通过FTP协议从UNIX框导入文本文件



过去,我曾在SQL Server中使用xp_cmdshell来调用BCP实用程序,以便在两台Windows计算机之间将文本文件导入SQL Server上的表中。这两台机器在同一个域上,不需要密码(因为SQL server命令使用可信/无密码连接)。这是通过设置源计算机的目录来实现的,以使文件继承目标计算机所属的组所有权。

我想知道,当使用相同的方法将文本文件从Solaris服务器导入到相同的Windows服务器但在不同的域上时,这是否也可行。

以下是我想执行的存储过程:

DECLARE @CMD VARCHAR(6000), @SystemCode INT;
DECLARE @ResultsFromCommand TABLE(SystemMessage VARCHAR(500));
SELECT @Cmd ='bcp [Destination].dbo.AC_Test in "ftp://10.251.11.10/TestFile.txt" -c -F2 -rn -t^| -Ssqldevelopmentsqldevelopment -T';
INSERT @ResultsFromCommand EXEC @SystemCode = MASTER.dbo.xp_cmdshell @Cmd;
SELECT * FROM @ResultsFromCommand;

由于无法建立连接,我收到SQL本机错误0。

我想知道是否因为上次机器在同一个域上,我只需要放目录"\ftprod\testserver\file.txt",而这次域不同,我必须使用"ftp:\10.251.11.10\TestFile.txt",这将使它不可能。

可以简单地使用psftp来自动化ftp部分,然后在第二步中调用bcp从本地目录导入。

最好选择@Eduardo的回复。您将面临许多问题xp_cmdshell、

  1. 谁来称呼它?

  2. 它将在什么安全上下文下运行。

  3. 有没有其他的事务,你将使用它MSDTC的东西。

  4. 您必须在dev/uat/production中镜像所有这些。

    希望这能有所帮助。

我可能没有正确理解这个问题,但ftp是一个标准的网络协议,所以只要设置和权限正确,主机操作系统就不会对ftp服务器本身的功能产生任何影响。

ie:如果它在windows盒子上的ftp服务器上工作,那么如果ftp服务器在unix盒子上,假设所有设置都相同,它也会做同样的事情。

您似乎在询问是否可能以及如何更改/设置Solaris计算机上的权限。

此处提供的步骤可能会根据您的Solaris版本和环境的特定设置而更改。

这些步骤是在没有任何保证的情况下提供的,您永远不应该"盲目"遵循安全建议或步骤来设置您负责的系统的安全性,因为您在网上找到了答案(即使是堆栈溢出),在将其应用于生产系统之前,请确保您理解并测试此处显示的每一行

在服务器端,根据您拥有的Solaris版本,您需要执行以下步骤。

此过程配置专门为sftp传输创建的sftponly目录。用户看不到传输目录之外的任何文件或目录。

以下所有步骤都由root角色执行。

在Secure Shell服务器上,将隔离目录创建为chroot环境。

# groupadd sftp
# useradd -m -G sftp -s /bin/false sftponly
# chown root:root /export/home/sftponly
# mkdir /export/home/sftponly/WWW
# chown sftponly:staff /export/home/sftponly/WWW

在该配置中,/export/home/sftonly是只有根帐户才能访问的chroot目录。用户对sftponly/WWW子目录具有写入权限。

仍然在服务器上,为sftp组配置一个匹配块。

在/etc/ssh/sshd_config文件中,找到sftp子系统条目并按如下方式修改该文件:

# pfedit /etc/ssh/sshd_config
...
# sftp subsystem
#Subsystem       sftp    /usr/lib/ssh/sftp-server
Subsystem       sftp    internal-sftp
...
## Match Group for Subsystem
## At end of file, to follow all global options
Match Group sftp
ChrootDirectory %h
ForceCommand internal-sftp
AllowTcpForwarding no

您可以使用以下变量来指定chroot路径:

%h–指定主目录。

%u–指定经过身份验证的用户的用户名。

%%–跳过%符号。

客户端上,验证配置是否正常工作。

chroot环境中的文件可能有所不同。

root@client:~# ssh sftponly@server
This service allows sftp connections only.
Connection to server closed. No shell access, sftp is enforced.
root@client:~# sftp sftponly@server
sftp> pwd sftp access granted
Remote working directory: /chroot directory looks like root directory
sftp> ls
WWW             local.cshrc     local.login     local.profile
sftp> get local.cshrc
Fetching /local.cshrc to local.cshrc
/local.cshrc    100%  166     0.2KB/s   00:00user can read contents
sftp> put /etc/motd
Uploading /etc/motd to /motd
Couldn't get handle: Permission denieduser cannot write to / directory
sftp> cd WWW
sftp> put /etc/motd
Uploading /etc/motd to /WWW/motd
/etc/motd     100%  118     0.1KB/s   00:00user can write to WWW directory
sftp> ls -l
-rw-r--r--    1 101  10    118 Jul 20 09:07 motdsuccessful transfer
sftp>

这是从这个文件

https://docs.oracle.com/cd/E36784_01/html/E37125/sshuser-18.html

最新更新