IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Administration SQL Server Discussion :

T-SQL : Activé TCP/IP et désactivé les autres protocoles


Sujet :

Administration SQL Server

  1. #1
    Membre émérite

    Homme Profil pro
    Chargé de Développement et d'Analyse de données
    Inscrit en
    Mars 2010
    Messages
    1 278
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Chargé de Développement et d'Analyse de données
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mars 2010
    Messages : 1 278
    Points : 2 856
    Points
    2 856
    Par défaut T-SQL : Activé TCP/IP et désactivé les autres protocoles
    Bonjour,
    L'idée c'est d'écrire un script T-SQL pour configurer le protocole de connexion à SQL server 2005 ou 2008 (côté serveur).
    les différentes étapes que j'envisage :
    1 ) Désactiver les protocoles :
    - Mémoire partagée
    - Canaux nommés
    - VIA

    2) Activer le protocole TCP/IP

    3) Redémarrer le services SQL SERVER (le moteur)

    Voici ce que j'ai commencé par glané comme infos.
    Evidemment la fonction xp_regwrite n'est pas documenté ...!
    Quelqu'un s'est-il déjà penché sur la question ?
    Pour ne pas réinventer la roue
    Merci d'avance
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    -- 1. Désactivé Shared Memeroy (Memoire partagée)
     EXEC master..xp_regwrite
         @racine='HKEY_LOCAL_MACHINE',
         @EmplacementCle='SOFTWARE\Microsoft\Microsoft SQL Server\MSSQL10.SQL2K8INSTANCE2\MSSQLServer\SuperSocketNetLib\Sm\',
         @NomCle='Enabled',
         @Type='REG_DWORD',
         @Valeur= 0
    -- 2. Désactivé Name pipe
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    EXEC master..xp_regwrite
         @racine='HKEY_LOCAL_MACHINE',
         @EmplacementCle='SOFTWARE\Microsoft\Microsoft SQL Server\MSSQL10.SQL2K8INSTANCE2\MSSQLServer\SuperSocketNetLib\Np\',
         @NomCle='Enabled',
         @Type='REG_DWORD',
         @Valeur= 0
    -- 3. Désactivé VIA
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    EXEC master..xp_regwrite
         @racine='HKEY_LOCAL_MACHINE',
         @EmplacementCle='SOFTWARE\Microsoft\Microsoft SQL Server\MSSQL10.SQL2K8INSTANCE2\MSSQLServer\SuperSocketNetLib\Via\',
         @NomCle='Enabled',
         @Type='REG_DWORD',
         @Valeur= 0
    -- 4. Activé TCP/IP
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    EXEC master..xp_regwrite
         @racine='HKEY_LOCAL_MACHINE',
         @EmplacementCle='SOFTWARE\Microsoft\Microsoft SQL Server\MSSQL10.SQL2K8INSTANCE2\MSSQLServer\SuperSocketNetLib\Tcp\',
         @NomCle='Enabled',
         @Type='REG_DWORD',
         @Valeur= 1
    -- 5. Redémarrage du service SQL
    -- je pense à un truc du genre mais ça ne marche pas
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    EXEC xp_cmdshell 'net stop "mssqlserver.exe"';
    GO
    EXEC xp_cmdshell 'net start "mssqlserver.exe"';

  2. #2
    Membre éprouvé
    Profil pro
    Inscrit en
    Février 2008
    Messages
    758
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 758
    Points : 1 069
    Points
    1 069
    Par défaut
    Citation Envoyé par zinzineti Voir le message
    EXEC xp_cmdshell 'net stop "mssqlserver.exe"';
    GO
    EXEC xp_cmdshell 'net start "mssqlserver.exe"';
    C'est le nom du service qu'il faut passer à net start/stop, pas le nom du binaire.

    David B.

  3. #3
    Expert éminent sénior
    Avatar de mikedavem
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Août 2005
    Messages
    5 450
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Distribution

    Informations forums :
    Inscription : Août 2005
    Messages : 5 450
    Points : 12 891
    Points
    12 891
    Par défaut
    Bonjour,

    Pour ce genre de choses j'aime beaucoup utiliser les scripts powershell.
    J'utilise celui-ci lors d'une installation automatique de SQL Server (Je le mets au cas où mais je ferais un billet la dessus) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    #################################
    # @author = Mikedavem           #
    # @Description =                #
    # Activation du protocole TCPIP #
    # et désactiviation des canaux  #
    # nommés.                       #
    #################################
     
    $computername = "computer";
    $login = "login";
    $pwd = convertto-securestring "motdepasse" -asplaintext -force;
     
    try
    {
        # Définition du crédential
        $credential = new-object -typename System.Management.Automation.PSCredential -argumentlist $login,$pwd -ErrorAction "silentlycontinue";
     
        # Protocol Canaux nommés à désactiver
        $protocol = Get-WmiObject -computername $computername -credential $credential -namespace "root\Microsoft\SqlServer\ComputerManagement" `
                                  -class ClientNetworkProtocol `
                                  -filter "ProtocolName='np'" `
                                  -ErrorAction "silentlycontinue";
        $protocol.SetDisable();
     
        # Protocol TCP à activer
        $protocol = Get-WmiObject -computername $computername -credential $credential -namespace "root\Microsoft\SqlServer\ComputerManagement" `
                                  -class ClientNetworkProtocol `
                                  -filter "ProtocolName='tcp'";
        $protocol.SetEnable();
     
        # Redémarrage service SQL
        $sqlservice = Get-WmiObject -computername $computername -credential $credential -namespace root\Microsoft\SqlServer\ComputerManagement `
                                    -class SqlService `
                                    -filter "ServiceName='MSSQLSERVER'" `
                                    -ErrorAction "silentlycontinue";
        $sqlservice.StopService();
        $sqlservice.StartService();
    }
    catch
    {
        "Une erreur est survenue lors de la mise à jour des protocoles :"; 
        "Détail de l'erreur :"
        $err = $Error[0];
        $err | Format-List *;
    }
    ++

  4. #4
    Membre émérite

    Homme Profil pro
    Chargé de Développement et d'Analyse de données
    Inscrit en
    Mars 2010
    Messages
    1 278
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Chargé de Développement et d'Analyse de données
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mars 2010
    Messages : 1 278
    Points : 2 856
    Points
    2 856
    Par défaut
    Citation Envoyé par dbaffaleuf Voir le message
    C'est le nom du service qu'il faut passer à net start/stop, pas le nom du binaire.

    David B.
    -- Pour Arrêter une instance par défaut ce code T-SQL marche bien
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    EXEC xp_cmdshell 'net stop mssqlserver /y';
    -- Et après il n'est plus possible via T-SQL de Starté le moteur !
    je pense que pour la partie STOP/START je vais demander à SQL d'exécuter
    un fichier .cmd qui contiendra les commandes :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    --STOP
    net stop mssqlserver /y
    --START 
    net start mssqlserver /y

  5. #5
    Membre émérite

    Homme Profil pro
    Chargé de Développement et d'Analyse de données
    Inscrit en
    Mars 2010
    Messages
    1 278
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Chargé de Développement et d'Analyse de données
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mars 2010
    Messages : 1 278
    Points : 2 856
    Points
    2 856
    Par défaut
    Citation Envoyé par mikedavem Voir le message
    Bonjour,
    Pour ce genre de choses j'aime beaucoup utiliser les scripts powershell.
    J'utilise celui-ci lors d'une installation automatique de SQL Server (Je le mets au cas où mais je ferais un billet la dessus) :
    Je vais tester le script powershell.
    Merci

  6. #6
    Membre éprouvé
    Profil pro
    Inscrit en
    Février 2008
    Messages
    758
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 758
    Points : 1 069
    Points
    1 069
    Par défaut
    Citation Envoyé par zinzineti Voir le message
    -- Pour Arrêter une instance par défaut ce code T-SQL marche bien
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    EXEC xp_cmdshell 'net stop mssqlserver /y';
    Dans le premier exemple je vois mssqlserver.exe, qui ne correspond à rien.

    David B.

  7. #7
    Membre émérite

    Homme Profil pro
    Chargé de Développement et d'Analyse de données
    Inscrit en
    Mars 2010
    Messages
    1 278
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Chargé de Développement et d'Analyse de données
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mars 2010
    Messages : 1 278
    Points : 2 856
    Points
    2 856
    Par défaut
    Citation Envoyé par dbaffaleuf Voir le message
    Dans le premier exemple je vois mssqlserver.exe, qui ne correspond à rien.
    David B.
    Oui tu as raison David, c'est une erreur de ma part.
    Je l'ai corrigé comme tu l'as suggéré
    J'ai remplacé mssqlserver.exe par mssqlserver
    Merci.

  8. #8
    Membre émérite

    Homme Profil pro
    Chargé de Développement et d'Analyse de données
    Inscrit en
    Mars 2010
    Messages
    1 278
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Chargé de Développement et d'Analyse de données
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mars 2010
    Messages : 1 278
    Points : 2 856
    Points
    2 856
    Par défaut
    Oups 2fois le même msg

  9. #9
    Expert éminent sénior
    Avatar de mikedavem
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Août 2005
    Messages
    5 450
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Distribution

    Informations forums :
    Inscription : Août 2005
    Messages : 5 450
    Points : 12 891
    Points
    12 891
    Par défaut
    Je vais tester le script powershell.
    Merci
    J'ai vu que je n'avais pas mis le bon script (On ne récupère pas les bonnes classes dans l'espace de nom root\Microsoft\SqlServer\ComputerManagement.

    Je t'invite à regarder le script que j'ai posté sur mon blog.

    ++

  10. #10
    Membre émérite

    Homme Profil pro
    Chargé de Développement et d'Analyse de données
    Inscrit en
    Mars 2010
    Messages
    1 278
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Chargé de Développement et d'Analyse de données
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mars 2010
    Messages : 1 278
    Points : 2 856
    Points
    2 856
    Par défaut
    Citation Envoyé par mikedavem Voir le message
    J'ai vu que je n'avais pas mis le bon script (On ne récupère pas les bonnes classes dans l'espace de nom root\Microsoft\SqlServer\ComputerManagement.
    Je t'invite à regarder le script que j'ai posté sur mon blog.
    ++
    Bonne idée ;-)
    Pour couvrir tous les protocoles de connexions à SQL SERVER
    tu peux aussi ajouter à ton script la Désactivation/Activation de :

    1 ) Shared Memeroy (Memoire partagée) [Sm]

    2 ) Via [Via]

    Je vais tester le script et je ferai un retour

    A+

  11. #11
    Membre émérite

    Homme Profil pro
    Chargé de Développement et d'Analyse de données
    Inscrit en
    Mars 2010
    Messages
    1 278
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Chargé de Développement et d'Analyse de données
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mars 2010
    Messages : 1 278
    Points : 2 856
    Points
    2 856
    Par défaut
    Citation Envoyé par mikedavem Voir le message
    J'ai vu que je n'avais pas mis le bon script (On ne récupère pas les bonnes classes dans l'espace de nom root\Microsoft\SqlServer\ComputerManagement.
    Je t'invite à regarder le script que j'ai posté sur mon blog.
    ++
    Hello David,
    J'ai essayé de tester ton script, mais j'ai eu quelques difficultés.
    Parce que je ne connaissais pas bien le PowerShell.
    D'abord quand j'execute ton script, la console PowerShell me dit qu'il ne connait pas : Try {} et Catch ()
    J'ai donc modifié ton script et faire des tests.
    Et ça marche nickel dans mon environnement de test (SQL2K8).
    J'ai mis des commentaires pour ceux qui veulent l'adapter pour :
    1 ) SQL SERVER 2005
    2 ) une instance nommée
    Voici le script qui marche dans mon environnement.
    je l'ai mis aussi sur ton blog
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
     
    ################################################################################################## 
    # @author : Mikedavem                                                     
    # @Description :                                                          
    #  -->Désactiver des Canaux nommés [ Name pipe (np)]                      
    #  -->Désactiver mémoire partagées [ Shared memory (sm)]                  
    #  -->Désactiver protocole via [via]                                      
    #  -->Activation du protocole TCPIP                                       
    #  -->Activation du protocole TCPIP                                       
    # @Modify by : Etienne ZINZINDOHOUE                                       
    # @OS : WXP                                                               
    # @SQL SERVER : SQL SERVER 2008
    # @ Date : 2010-06-03     
    # @Comments : 
    # --> Pour SQL SERVER 2005 il faut remplacer
    #          -namespace "root\Microsoft\SqlServer\ComputerManagement10"
    #	  par 	  
    #	      -namespace "root\Microsoft\SqlServer\ComputerManagement"
    #
    # --> Pour une instance nommée remplacé 
    #          InstanceName='MSSQLSERVER'
    #     par 
    #          InstanceName='NomInstance'
    #     ET 
    #		   ServiceName='MSSQL'  
    #     par  
    #          ServiceName='MSSQL`$NomInstance' 
    # --> Pour avoir la liste des services sous SQL SERVER 2008 faire : 
    #     Get-WmiObject `
    #	      -namespace root\Microsoft\SqlServer\ComputerManagement10 `
    #	      -class SqlService | Select-Object ServiceName, DisplayName, SQLServiceType, State
    ################################################################################################## 
     
    Write-Host -NoNewLine "########################################################"
    Write-Host -NoNewLine " Désactiver des Canaux nommés [ Name pipe (np)] "
    Write-Host -NoNewLine "########################################################"
    $protocol = Get-WmiObject -namespace "root\Microsoft\SqlServer\ComputerManagement10" -class ServerNetworkProtocol -filter "ProtocolName='np' and InstanceName='SQL2K8INSTANCE2'" -ErrorAction "silentlycontinue"; 
    $protocol.SetDisable();
     
    Write-Host -NoNewLine "########################################################"
    Write-Host -NoNewLine " Désactiver mémoire partagées [ Shared memory (sm)] "
    Write-Host -NoNewLine "########################################################"
    $protocol = Get-WmiObject -namespace "root\Microsoft\SqlServer\ComputerManagement10" -class ServerNetworkProtocol -filter "ProtocolName='sm' and InstanceName='SQL2K8INSTANCE2'" -ErrorAction "silentlycontinue"; 
    $protocol.SetDisable();
     
    Write-Host -NoNewLine "########################################################"
    Write-Host -NoNewLine " Désactiver VIA (via) "
    Write-Host -NoNewLine "########################################################"
    $protocol = Get-WmiObject -namespace "root\Microsoft\SqlServer\ComputerManagement10" -class ServerNetworkProtocol -filter "ProtocolName='via' and InstanceName='SQL2K8INSTANCE2'" -ErrorAction "silentlycontinue"; 
    $protocol.SetDisable();
     
    Write-Host -NoNewLine "########################################################"
    Write-Host -NoNewLine " Activer TCP  "
    Write-Host -NoNewLine "########################################################"
    $protocol = Get-WmiObject -namespace "root\Microsoft\SqlServer\ComputerManagement10" -class ServerNetworkProtocol -filter "ProtocolName='tcp' and InstanceName='SQL2K8INSTANCE2'"; 
    $protocol.SetEnable();
     
    Write-Host -NoNewLine "########################################################"
    Write-Host -NoNewLine " Redémarrer service SQL  "
    Write-Host -NoNewLine "########################################################"
    $sqlservice = Get-WmiObject -namespace "root\Microsoft\SqlServer\ComputerManagement10" -class SqlService -filter "ServiceName='MSSQL`$SQL2K8INSTANCE2'" -ErrorAction "silentlycontinue"; 
    $sqlservice.StopService(); 
    $sqlservice.StartService();

  12. #12
    Expert éminent sénior
    Avatar de mikedavem
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Août 2005
    Messages
    5 450
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Distribution

    Informations forums :
    Inscription : Août 2005
    Messages : 5 450
    Points : 12 891
    Points
    12 891
    Par défaut
    Ok bon je réponds aussi ici alors.

    Il faut avoir la version 2 de powershell pour utiliser les blocs try et catch.
    Avec la version 1 il faut utiliser le bloc trap.

    ++

  13. #13
    Modérateur

    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Janvier 2005
    Messages
    5 826
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Haute Garonne (Midi Pyrénées)

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

    Informations forums :
    Inscription : Janvier 2005
    Messages : 5 826
    Points : 12 371
    Points
    12 371
    Par défaut
    Bonjour,

    Pour contrôler un service par une requête, il existe aussi la procédure stockée xp_servicecontrol, qui vous permet notamment de connaître l'état d'un service.
    Attention en revanche, cette procédure n'est pas documentée

    @++

  14. #14
    Membre émérite

    Homme Profil pro
    Chargé de Développement et d'Analyse de données
    Inscrit en
    Mars 2010
    Messages
    1 278
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Chargé de Développement et d'Analyse de données
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mars 2010
    Messages : 1 278
    Points : 2 856
    Points
    2 856
    Par défaut
    Effectivement c'est avec la version 1.0 de PowerShell que j'ai fait les tests.
    c'est cette version qui est installée par défaut lors de l'installation de SQL2K8.
    je comprends maintenant pourquoi il ne voulait pas les try et catch.
    En tout cas merci.

  15. #15
    Membre émérite

    Homme Profil pro
    Chargé de Développement et d'Analyse de données
    Inscrit en
    Mars 2010
    Messages
    1 278
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Chargé de Développement et d'Analyse de données
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mars 2010
    Messages : 1 278
    Points : 2 856
    Points
    2 856
    Par défaut
    Citation Envoyé par elsuket Voir le message
    Bonjour,
    Pour contrôler un service par une requête, il existe aussi la procédure stockée xp_servicecontrol, qui vous permet notamment de connaître l'état d'un service.
    Attention en revanche, cette procédure n'est pas documentée
    @++
    Merci pour l'info

Discussions similaires

  1. [MySQL] Données SQL dans un tableau pas comme les autres
    Par Jeoffrey54 dans le forum PHP & Base de données
    Réponses: 5
    Dernier message: 29/06/2008, 11h32
  2. Désactiver les autres boutons radio
    Par miss_angel dans le forum Interfaces Graphiques
    Réponses: 2
    Dernier message: 21/02/2008, 06h48
  3. Comment activer/désactiver les effets de flou de DWM? (FAQ)
    Par zubrow dans le forum Windows Vista
    Réponses: 3
    Dernier message: 01/12/2007, 22h15
  4. Réponses: 16
    Dernier message: 04/02/2007, 20h54
  5. Réponses: 6
    Dernier message: 11/01/2005, 12h49

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo