SQL Server exécute xp_cmdshell pour importer un file text via un protocole FTP à partir d'une boîte UNIX

Dans le passé, j'ai utilisé xp_cmdshell dans SQL Server pour appeler l'utilitaire BCP pour importer un file text dans une table sur SQL Server entre deux machines Windows. Les deux machines se trouvaient sur le même domaine sans avoir besoin d'un mot de passe (puisque la command SQL server utilise une connection less sécurisée / mot de passe). Cela a été fait en définissant le directory de la machine source pour que les files héritent de la propriété de groupe dont faisait partie la machine de destination.

Je voudrais savoir si cela est également possible en utilisant la même approche pour importer un file text d'un server Solaris sur le même server Windows mais sur un domaine différent.

Voici la procédure stockée que je voudrais exécuter:

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; 

Je reçois une erreur SQL native 0 car la connection ne peut pas être établie.

Je me request si, parce que la dernière fois les machines étaient sur le même domaine, j'ai juste besoin de mettre le directory "\ ftpprod \ testserver \ file.txt" et cette fois les domaines sont différents, je dois utiliser "ftp: \ 10.251. 11.10 \ TestFile.txt ", cela rendra cela impossible.

C'est possible, il suffit d'utiliser psftp pour automatiser la partie ftp, puis dans un deuxième time, appelez bcp pour importer depuis le directory local.

Il vaut mieux que vous alliez à la réponse de @ Eduardo. vous allez faire face à beaucoup de problèmes ce que le xp_cmdshell,

  1. Qui va l'appeler?
  2. Dans quel context de security va-t-il fonctionner?
  3. Y at-il d'autres transactions que vous allez utiliser avec des choses MSDTC.
  4. vous devrez refléter tout cela dans dev / uat / production.

    J'espère que cela t'aides.

Je ne comprends peut-être pas bien la question, mais ftp est un protocole réseau standard, aussi longtime que les parameters et les permissions sont correctement configurés, le operating system hôte ne devrait faire aucune différence pour les fonctionnalités du server ftp lui-même.

c'est à dire: si cela a fonctionné sur un server ftp hébergé sur une boîte Windows, il fera la même chose si le server FTP est hébergé sur une boîte Unix en supposant que tous les parameters sont les mêmes.

Il semble que vous demandiez si cela est possible et comment modifier / configurer les permissions sur la machine Solaris.

Les étapes indiquées ici peuvent changer en fonction de votre version de Solaris et des parameters spécifiques de votre environnement.

Ces étapes sont fournies sans aucune garantie et vous ne devriez jamais suivre les conseils de security ou les étapes «à l'aveugle» pour configurer la security d'un système dont vous êtes responsable, simplement parce que vous avez trouvé la réponse en ligne (même en cas de débordement). que vous compreniez et testiez chaque ligne montrée ici avant de l'appliquer à un système de production

Côté server, selon la version de Solaris que vous avez, vous devez suivre les étapes suivantes.

Cette procédure configure un directory sftponly créé spécifiquement pour les transferts sftp . Les users ne peuvent voir aucun file ou directory en dehors du directory de transfert.

Toutes les étapes suivantes sont exécutées avec le rôle racine . .

Sur le server Secure Shell, créez le directory isolé en tant qu'environnement 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 

Dans cette configuration, / export / home / sftonly est le directory chroot auquel seul le count root a access. L'user a l'autorisation d'écriture dans le sous-directory sftponly / WWW.

Toujours sur le server, configurez un bloc de correspondance pour le groupe sftp.

Dans le file / etc / ssh / sshd_config, searchz l'input du sous-système sftp et modifiez le file comme suit:

 # 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 

Vous pouvez utiliser les variables suivantes pour spécifier le path de chroot:

% h – Spécifie le directory de base.

% u – Spécifie le nom d'user de l'user authentifié.

%% – Échappe le signe%.

Sur le client , vérifiez que la configuration fonctionne correctement.

Les files de votre environnement chroot peuvent être différents.

 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> 

Cela a été pris de ce document

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