2015-12-21 1 views
6

В прошлом я использовал xp_cmdshell в SQL Server для вызова утилиты BCP для импорта текстового файла в таблицу на SQL Server между двумя компьютерами Windows. Эти две машины были в одном домене без необходимости пароля (так как команда сервера SQL использует соединение с надежным/паролем меньше). Это было сделано, установив каталог исходного компьютера, чтобы файлы наследовали владение группой, с которой была связана машина назначения.SQL Server выполняет xp_cmdshell для импорта текстового файла по протоколу FTP из окна UNIX

Я хотел бы знать, возможно ли это при использовании того же подхода для импорта текстового файла с сервера Solaris на тот же Windows Server, но в другом домене.

Ниже хранимая процедура, я хотел бы выполнить:

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 Ошибка 0, так как соединение не может быть сделано.

Мне интересно, если в последнее время машины были в одном домене, мне нужно было только поставить каталог «\ ftpprod \ testserver \ file.txt», и на этот раз домены разные. Мне нужно использовать «ftp : \ 10.251.11.10 \ TestFile.txt ", что это сделает невозможным.

+2

Мы не можем ожидать, чтобы знать, как разрешения установлены в новой среде. Это может взорваться, или ... это может сработать. Вы должны попробовать использовать свой код. Если это сработает, удалите этот вопрос Q. Если он не работает, обновите Q с сообщениями об ошибках, которые вы получите. Удачи. – shellter

+0

Ошибка SQLState = S1000, NativeError = 0. В принципе SQL Server не может подключиться к серверу, использующему Solaris. То, о чем я прошу, - это то, о чем вы меня спрашиваете, используя SFTP, как я могу настроить разрешения, которые используют соединение с минус -T (доверенным). Каковы некоторые параметры для настройки этих разрешений. – MilesMorales

+1

Вы пробовали использовать telnet или ftp-клиент из FileZilla, например, для проверки соединения и разрешений.Как только вы можете сделать это вручную, это должно быть более простым, чтобы сделать это prrogramatically –

ответ

0

Возможно, просто используйте psftp для автоматизации ftp-части, затем на втором этапе вызова bcp для импорта из локального каталога.

+0

Используя этот метод, я должен правильно создать командный файл, который запускается сервером Windows? Я хотел бы решение, которое полностью обрабатывается в хранимой процедуре SQL. – MilesMorales

+0

Ну, но вы все равно не сможете подключиться к серверу sftp с сервера SQL. Если у вас достаточно прав администратора на SQL Server, вы можете написать расширенную хранимую процедуру на C#, чтобы делать все, что угодно, самым красивым образом. Хотя это все равно потребует установки DLL. – Eduardo

+0

Это потому, что это машина Solaris? Потому что я смог подключиться через SFTP к машине Windows. – MilesMorales

0

Лучше всего, чтобы вы отправились на ответ Эдуардо. вы столкнулись с множеством проблем, что xp_cmdshell,

  1. Кто это будет называть?
  2. В каком контексте безопасности он будет работать.
  3. Есть ли какие-либо другие транзакции, которые вы собираетесь использовать вместе с этим материалом MSDTC.
  4. вам придется отражать все это в dev/uat/production.

    надеюсь, что это поможет.

0

я не мог бы быть понимание вопроса правильно, но FTP является стандартным сетевым протоколом, поэтому до тех пор, пока параметры и разрешения установлены правильно, хозяин ОС не должна делать никакой разницы в функциональности сам ftp-сервер.

ie: если он работал на ftp-сервере, размещенном в окне окна, он будет делать то же самое, если ftp-сервер размещен в unix-блоке при условии, что все настройки одинаковы.

0

Кажется, что вы спрашиваете, возможно ли это и как изменить/настроить разрешения на машине Solaris.

Приведенные здесь шаги могут изменяться в зависимости от версии Solaris и конкретных настроек, которые имеют ваша среда.

Эти шаги предоставляются без каких-либо гарантий, и вы никогда не должны следовать советам безопасности или шагам «вслепую» о том, как настроить безопасность системы, за которую вы отвечаете, только потому, что вы нашли ответ онлайн (даже в стеке переполнение), убедитесь, что вы понимаете и проверяете каждую отдельную строку, показанную здесь, перед ее применением в производственную систему.

На стороне сервера, в зависимости от имеющейся у вас версии Solaris, необходимо выполнить следующие шаги.

Эта процедура настраивает каталог sftponly, созданный специально для SFTP переводов. Пользователи не могут видеть файлы или каталоги вне каталога передачи.

Все следующие шаги выполняются с помощью роли 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 

В этой конфигурации/экспорт/главный/sftonly это каталог корневого, что только корневая учетная запись имеет доступ. У пользователя есть разрешение на запись в подкаталог sftponly/WWW.

На сервере настройте блок соответствия для группы sftp.

В файле/и т.д./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 могут отличаться.

[email protected]:~# ssh [email protected] 
This service allows sftp connections only. 
Connection to server closed. No shell access, sftp is enforced. 
[email protected]:~# sftp [email protected] 
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

Смежные вопросы