Précédent   Forum des professionnels en informatique > Bases de données > MS SQL-Server > Administration
Administration Forum d'entraide sur l'administration du dataserver, via SSM ou ligne de commande, les tables système, ...
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 16/08/2011, 16h18   #1
Invité régulier
 
Homme
Chef de projet MOA
Inscription : juin 2011
Messages : 24
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations professionnelles :
Activité : Chef de projet MOA

Informations forums :
Inscription : juin 2011
Messages : 24
Points : 8
Points : 8
Par défaut Limiter l'option xp_cmdshell

Bonjour,

Est-il possible de limiter l'option xp_cmdshell à une seule commande définie (par ex : dtexec) dans le but de respecter certaines contraintes de sécurité..
Merci.
HighSam est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/08/2011, 16h49   #2
Invité régulier
 
Homme
Chef de projet MOA
Inscription : juin 2011
Messages : 24
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations professionnelles :
Activité : Chef de projet MOA

Informations forums :
Inscription : juin 2011
Messages : 24
Points : 8
Points : 8
Le problème est que je suis en partie obligé d'utiliser cette commande. Il faudrait donc que je puisse prouver à notre admin DB SQL Server qu'elle n'engendre aucun risque, afin qu'il l'active. Comment en être sûr, et comment la sécuriser au maximum?

Le besoin est d'exécuter un package SSIS distant, via une macro Excel.
Pour cela, l'idée est de faire appel en VBA à une procédure stockée (Serveur), qui exécute mon package (dispo dans le SSIS Package Store) grâce à la commande xp_cmdshell -> "dtexec /DTS ...".
HighSam est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/08/2011, 17h24   #3
Membre Expert
 
Avatar de iberserk
 
Homme Bruno IGNACE
Architecte de base de données
Inscription : novembre 2004
Messages : 1 299
Détails du profil
Informations personnelles :
Nom : Homme Bruno IGNACE
Âge : 30
Localisation : France, Gironde (Aquitaine)

Informations professionnelles :
Activité : Architecte de base de données
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : novembre 2004
Messages : 1 299
Points : 2 282
Points : 2 282
Envoyer un message via MSN à iberserk
Il peut configurer le compte exécutant cette commande...


http://msdn.microsoft.com/fr-fr/library/ms190359.aspx
__________________
Prendre conscience, c'est transformer le voile qui recouvre la lumière en miroir.
iberserk est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/08/2011, 17h53   #4
Invité régulier
 
Homme
Chef de projet MOA
Inscription : juin 2011
Messages : 24
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations professionnelles :
Activité : Chef de projet MOA

Informations forums :
Inscription : juin 2011
Messages : 24
Points : 8
Points : 8
Merci.
Cependant est-il possible de le limiter à l'exécution d'une seule commande, par ex la commande dtexec.

Est-il possible de lancer n'importe quelle commande shell avec xp_cmdshell ?
Merci
HighSam est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/08/2011, 17h59   #5
Membre chevronné
 
David BAFFALEUF
Inscription : février 2008
Messages : 612
Détails du profil
Informations personnelles :
Nom : David BAFFALEUF
Localisation : France

Informations forums :
Inscription : février 2008
Messages : 612
Points : 746
Points : 746
Il faut faire une proc qui appelle xp_cmdshell 'dtexec /...' et donner les droits sur cette proc seule au compte considéré.
__________________
David B.
dbaffaleuf est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/08/2011, 09h33   #6
Invité régulier
 
Homme
Chef de projet MOA
Inscription : juin 2011
Messages : 24
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations professionnelles :
Activité : Chef de projet MOA

Informations forums :
Inscription : juin 2011
Messages : 24
Points : 8
Points : 8
Ah ouii bien vu !
Je vais essayer d'implémenter ça dans la journée.
Merci !
HighSam est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/08/2011, 12h21   #7
Invité régulier
 
Homme
Chef de projet MOA
Inscription : juin 2011
Messages : 24
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations professionnelles :
Activité : Chef de projet MOA

Informations forums :
Inscription : juin 2011
Messages : 24
Points : 8
Points : 8
Encore moi, est-il possible d'autoriser l'exécution de xp_cmdshell à un utilisateur non sysadmin, sans lui créer de proxy.

Le problème est qu'une dizaine de personnes doivent pouvoir exécuter xp_cmdshell via une procédure stockée, que j'ai aussi seulement autorisé en exécution pour ces utilisateurs..
Et devoir créer un proxy/Credential pour chacun serait embêtant, d'autant plus que les credentials ne supportent pas la synchronisation avec le LDAP (problème lors de changement de mot de passe windows) et leur mot de passe ne doit pas être visible par l'admin par sécurité (création credential)

Merci
HighSam est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/08/2011, 13h33   #8
Membre actif
 
Inscription : juin 2006
Messages : 161
Détails du profil
Informations forums :
Inscription : juin 2006
Messages : 161
Points : 154
Points : 154
Bonjour,

Un article intéressant dans votre cas.

@+
Zabriskir est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/08/2011, 14h16   #9
Invité régulier
 
Homme
Chef de projet MOA
Inscription : juin 2011
Messages : 24
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations professionnelles :
Activité : Chef de projet MOA

Informations forums :
Inscription : juin 2011
Messages : 24
Points : 8
Points : 8
MON SAUVEUR ! Merci beaucoup.

Voici la solution donnée dans le lien :
La procédure stockée appellant la commande xp_cmdshell doit être créé dans la base de données système master, et non dans une base de données utilisateur.
Pourquoi ?
Avec cette solution, sql server ne contrôle pas le contenu de la procédure stockée et donc l'instruction exec xp_cmdshell... ne pose pas de problème.
HighSam est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/08/2011, 09h49   #10
Modérateur
 
Homme
Administrateur de base de données
Inscription : août 2007
Messages : 1 158
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 28
Localisation : Belgique

Informations professionnelles :
Activité : Administrateur de base de données
Secteur : Industrie Pharmaceutique

Informations forums :
Inscription : août 2007
Messages : 1 158
Points : 1 617
Points : 1 617
Citation:
Envoyé par HighSam Voir le message
MON SAUVEUR ! Merci beaucoup.

Voici la solution donnée dans le lien :
La procédure stockée appellant la commande xp_cmdshell doit être créé dans la base de données système master, et non dans une base de données utilisateur.
Pourquoi ?
Avec cette solution, sql server ne contrôle pas le contenu de la procédure stockée et donc l'instruction exec xp_cmdshell... ne pose pas de problème.
Perso je trouve ca un peu deg comme solution.
Deja creer des sp dans Master, je suis bof bof a l'idee, et de plus faire ca pour bypasser le fait d'utiliser xp_cmdshell...

Je vous recommanderai de creer un job SQL Server agent qui execute votre job SSIS avec un proxy application.
Et dans votre stored procedure de declencher ce job avec sp_start_job.

Ca vous evite de devoir activer xp_cmdshell sur votre instance.
Ptit_Dje est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/08/2011, 13h25   #11
Invité régulier
 
Homme
Chef de projet MOA
Inscription : juin 2011
Messages : 24
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations professionnelles :
Activité : Chef de projet MOA

Informations forums :
Inscription : juin 2011
Messages : 24
Points : 8
Points : 8
Je comprends oui c'est pas faux..

L'avantage pour moi avec xp_cmdshell est qu'il est possible de donner un paramètre à la commande (variable user), chose impossible avec la procédure stockée sp_start_job.
C'est vrai que je peux toujours lui spécifier un fichier de configuration dans lequel j'indiquerai la valeur de ma variable...

Mais J'ai 2 questions vis à vis de ça :
Est-il possible que plusieurs utilisateurs SQL puissent exécuter un même job simultanément ?

Est-il possible que plusieurs personnes distinctes (avec le même compte SQL) puissent appeler une procédure stockée lancant la commande dtexec sur un même package (paramètres différents) simultanément, depuis la procédure stockée xp_cmdshell et ceci sur un serveur 64bit ? Ou faut-il leur créer chacun un autre compte SQL? Ou dans les 2 cas ce n'est pas possible ?
Merci.
HighSam est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/08/2011, 14h01   #12
Modérateur
 
Homme
Administrateur de base de données
Inscription : août 2007
Messages : 1 158
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 28
Localisation : Belgique

Informations professionnelles :
Activité : Administrateur de base de données
Secteur : Industrie Pharmaceutique

Informations forums :
Inscription : août 2007
Messages : 1 158
Points : 1 617
Points : 1 617
Citation:
Envoyé par HighSam Voir le message
Je comprends oui c'est pas faux..
Mais J'ai 2 questions vis à vis de ça :
Est-il possible que plusieurs utilisateurs SQL puissent exécuter un même job simultanément ?
Non

Citation:
Envoyé par HighSam Voir le message
Est-il possible que plusieurs personnes distinctes (avec le même compte SQL) puissent appeler une procédure stockée lancant la commande dtexec sur un même package (paramètres différents) simultanément, depuis la procédure stockée xp_cmdshell et ceci sur un serveur 64bit ? Ou faut-il leur créer chacun un autre compte SQL? Ou dans les 2 cas ce n'est pas possible ?
Merci.
Je sais pas, a tester.

Autre piste:
Que fait ce package SSIS ?
Quid d'en sortir la logique ?
Ptit_Dje est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/08/2011, 14h37   #13
Modérateur
 
Avatar de Jinroh77
 
Homme Alexandre Chemla
Consultant en Business Intelligence
Inscription : février 2006
Messages : 1 773
Détails du profil
Informations personnelles :
Nom : Homme Alexandre Chemla
Âge : 28
Localisation : France, Seine et Marne (Île de France)

Informations professionnelles :
Activité : Consultant en Business Intelligence

Informations forums :
Inscription : février 2006
Messages : 1 773
Points : 1 837
Points : 1 837
Au fait, pourquoi passer par des commandes SQL pour déclencher un package SSIS ?
Vous pouvez toujorus faire appel dans votre VBA, directement à l'éxecutable DTExec.exe... : C:\Program Files (x86)\Microsoft SQL Server\100\DTS\Binn\DTExec.exe
__________________
Alexandre Chemla - Consultant MS BI chez Masao
Jinroh77 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/08/2011, 14h45   #14
Modérateur
 
Homme
Administrateur de base de données
Inscription : août 2007
Messages : 1 158
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 28
Localisation : Belgique

Informations professionnelles :
Activité : Administrateur de base de données
Secteur : Industrie Pharmaceutique

Informations forums :
Inscription : août 2007
Messages : 1 158
Points : 1 617
Points : 1 617
Citation:
Envoyé par Jinroh77 Voir le message
Au fait, pourquoi passer par des commandes SQL pour déclencher un package SSIS ?
Vous pouvez toujorus faire appel dans votre VBA, directement à l'éxecutable DTExec.exe... : C:\Program Files (x86)\Microsoft SQL Server\100\DTS\Binn\DTExec.exe
J'ai pense a ca aussi...
Le probleme est si le fichier excel est ouvert en local et que dtexec n'existe pas sur la machine client.
Il faut aussi de la machine client executer le package SSIS qui se trouve ailleurs (possible via un share).
QUID alors de la configuration du package si celui-ci utilise une variable d'environnement... -> A definir sur tous les clients.

Il faudrait alors passer par l'execution en remote de dtexec (est ce possible ???)
Ptit_Dje est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/08/2011, 14h50   #15
Modérateur
 
Avatar de Jinroh77
 
Homme Alexandre Chemla
Consultant en Business Intelligence
Inscription : février 2006
Messages : 1 773
Détails du profil
Informations personnelles :
Nom : Homme Alexandre Chemla
Âge : 28
Localisation : France, Seine et Marne (Île de France)

Informations professionnelles :
Activité : Consultant en Business Intelligence

Informations forums :
Inscription : février 2006
Messages : 1 773
Points : 1 837
Points : 1 837
Il faudrait effectivement executer avec le DtExec du serveur, amis ça implique certaines choses.
Pour les variables, on peut les passer via le dtsconfig ou dans la ligne de commande, par contre pour les droits sur des fichiers source par exemple, ça doit se paramétrer également.
__________________
Alexandre Chemla - Consultant MS BI chez Masao
Jinroh77 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/08/2011, 15h14   #16
Invité régulier
 
Homme
Chef de projet MOA
Inscription : juin 2011
Messages : 24
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations professionnelles :
Activité : Chef de projet MOA

Informations forums :
Inscription : juin 2011
Messages : 24
Points : 8
Points : 8
Citation:
Envoyé par Ptit_Dje Voir le message
Autre piste:
Que fait ce package SSIS ?
Quid d'en sortir la logique ?
Ce projet s'inscrit dans le cadre d'un reporting project (project : affaire interne à l'entreprise), effectué via un fichier excel rempli de feuilles et de macros.
Ce fichier (le "MASTER") est toujours utilisé vu que les clients internes en sont satisfaits, mais était autrefois, en partie alimenté manuellement ! Ce processus a depuis changé et je suis en charge de l'automatiser/l'industrialiser.
Je précise que ce fichier est lancé par les contrôleurs de gestion.

J'ai terminé le développement du package, en local. J'effectue donc des tests (concluants) mais dans un environnement développeur (SSIS, BIDS)


Le processus est le suivant :

---- PACKAGE.DTSX ----------------------------------------------------
1-] Récupérer les données d'une BD SQL Server sur le réseau (ex: \\SERV)
2-] Traiter ces données
3-] Restituer ces données vers des "exports" excel présents sur un serveur de données (ex: S:\ )


---- MANUEL -----------------------------------------------------------
4-] Un fichier "Master" Excel doit ensuite être lancé manuellement, permettant de réaliser le reporting project, en vue de faire certaines analyses financières. Ses macros vont donc permettre d'alimenter ce fichier à l'aide des exports générés à l'étape 3-].

-> Ce package doit être administré sur serveur, et éventuellement planifiable (mode Batch); je l'ai ainsi déployé sur serveur, vers le SSIS Package Store et SQL Server (SQL Server Agent) -> FONCTIONNEL !

=> Puis l'idée est d'intégrer au final dans ce Master, un bouton permettant d'exécuter ce package (mode Interactif). Mais nous voulons alléger le plus possible l'environnement technique des contrôleurs de gestion, qu'ils puissent aboutir à cela sans qu'on soit amener à leur installer SSIS.


Citation:
Envoyé par Jinroh77 Voir le message
Au fait, pourquoi passer par des commandes SQL pour déclencher un package SSIS ?
Vous pouvez toujorus faire appel dans votre VBA, directement à l'éxecutable DTExec.exe... : C:\Program Files (x86)\Microsoft SQL Server\100\DTS\Binn\DTExec.exe
Ca m'aurait beaucoup simplifié la vie dès le départ, mais nous ne pouvons pas installer SSIS à tous les contrôleurs de gestion pour pouvoir rendre accessible à chacun la commande DTexec.exe
HighSam est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/08/2011, 15h25   #17
Modérateur
 
Avatar de Jinroh77
 
Homme Alexandre Chemla
Consultant en Business Intelligence
Inscription : février 2006
Messages : 1 773
Détails du profil
Informations personnelles :
Nom : Homme Alexandre Chemla
Âge : 28
Localisation : France, Seine et Marne (Île de France)

Informations professionnelles :
Activité : Consultant en Business Intelligence

Informations forums :
Inscription : février 2006
Messages : 1 773
Points : 1 837
Points : 1 837
Justement, dans le VBA, sur le poste client, vous pourriez directement faire appel à l'executable DTExec qui est placé sur le serveur.
__________________
Alexandre Chemla - Consultant MS BI chez Masao
Jinroh77 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/08/2011, 15h35   #18
Invité régulier
 
Homme
Chef de projet MOA
Inscription : juin 2011
Messages : 24
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations professionnelles :
Activité : Chef de projet MOA

Informations forums :
Inscription : juin 2011
Messages : 24
Points : 8
Points : 8
Comment ?
HighSam est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/08/2011, 16h12   #19
Invité régulier
 
Homme
Chef de projet MOA
Inscription : juin 2011
Messages : 24
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations professionnelles :
Activité : Chef de projet MOA

Informations forums :
Inscription : juin 2011
Messages : 24
Points : 8
Points : 8
A part ça, pour la commande xp_cmdshell, quand je crée le proxy avec la procédure sp_xp_cmdshell_proxy_account, qu'est-ce que cela signifie :

Est-ce que n'importe quel compte non sysadmin sera apte à exécuter xp_cmdshell, et ceci quelque soit le compte windows enregistré dans le credential ##xp_cmdshell_proxy_account## (sous réserve d'authentification réussie bien sur) ?
Merci.
HighSam est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/08/2011, 16h17   #20
Modérateur
 
Avatar de Jinroh77
 
Homme Alexandre Chemla
Consultant en Business Intelligence
Inscription : février 2006
Messages : 1 773
Détails du profil
Informations personnelles :
Nom : Homme Alexandre Chemla
Âge : 28
Localisation : France, Seine et Marne (Île de France)

Informations professionnelles :
Activité : Consultant en Business Intelligence

Informations forums :
Inscription : février 2006
Messages : 1 773
Points : 1 837
Points : 1 837
Avec un executable dans ce genre :
Code :
\\MonServeur\c$\progr..\SQL ..\..\DTExec.exe /DTS "\File System\MyPackage"
__________________
Alexandre Chemla - Consultant MS BI chez Masao
Jinroh77 est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 09h27.


 
 
 
 
Partenaires

Hébergement Web