过去我曾在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 -r\n -t^| -Ssqldevelopment\sqldevelopment -T';
INSERT @ResultsFromCommand EXEC @SystemCode = MASTER.dbo.xp_cmdshell @Cmd;
SELECT * FROM @ResultsFromCommand;
由于无法建立连接,因此我收到了SQL Native Error 0.
我想知道如果因为上次机器在同一个域上,我只需要放置目录" \ ftpprod \ testserver \ file.txt"这次域名是不同的我必须使用" ftp:\ 10.251.11.10 \ TestFile.txt",这将使它变得不可能。
答案 0 :(得分:0)
可以使用psftp自动执行ftp部分,然后在第二步调用bcp从本地目录导入。
答案 1 :(得分:0)
你最好去@Eduardo的回复。你将面临很多问题xp_cmdshell,
你必须在dev / uat / production中镜像所有这些。
希望这会有所帮助。
答案 2 :(得分:0)
我可能没有正确理解这个问题,但ftp是一个标准的网络协议,因此只要设置和权限设置正确,主机操作系统就不应该对ftp的功能产生任何影响。服务器本身。
即:如果它在Windows框上托管的ftp服务器上工作,如果ftp服务器托管在unix框上,假设所有设置都相同,那么它会做同样的事情。
答案 3 :(得分:0)
似乎您在询问是否可以以及如何在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是只有root帐户可以访问的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