Banner
Banner
Banner

[TUTO] Installation et configuration de SQuirreL SQL pour Sybase

février 8th, 2011

Pour mon travail, j’ai dû chercher un client sql permettant de se connecter à une base de données Sybase. Dans les critères de sélection, il fallait que celui-ci soit gratuit et qu’il puisse gérer l’unicode. Ma recherche c’est arrêté sur SQuirreL SQL.

[...]

Cathegorie(s): Software, Tutos

[TUTO] Interagir sur une base MySQL sous Linux avec un client Microsoft .net

août 26th, 2010

mysql

Nous avons déjà vu ensemble comment interagir avec une base de données Microsoft SQL depuis PHP sous Linux. Je vous propose aujourd’hui de voir l’inverse : comment depuis un client Microsoft Windows exécutant du code .net interagir avec un base de donnée MySQL installé sur un serveur Linux (Ubuntu dans mon cas).

Pour l’exemple, j’interagirai avec ma base MySQL depuis un script powershell (exécuté sur un poste Windows)  mais la méthode est la même (à quelques subtilités de langage près pour l’ensemble des langage .net).

 

Du coté Microsoft : script powershell

dotnet

Nativement, .net ne gère pas les connexion MySQL. Toutefois, on peut lui adjoindre une bibliothèque nommée MySQL Connector /Net, qui se télécharge ICI. Une fois cette bibliothèque installée sur votre poste, il ne reste plus qu’à la charger dans votre script par cette ligne :

[void][System.Reflection.Assembly]::LoadWithPartialName("MySql.Data")

A présent on peut se connecter à un serveur MySQL. Par défaut, la connexion se fait via le port 3306. Il faut alors définir le serveur, la base de donnée, le compte mysql et son mot de passe :

$port = "3306"

$srv= "ipduserveur"

$user = "comptemysql"

$mdp = "mdpmysql"

$bdd = "bddmysql"

Puis on lance la connexion :

$connection = New-Object MySql.Data.MySqlClient.MySqlConnection

$connection.ConnectionString = “server=$srv;port=$port;uid=$user;pwd=$mdp;database= bdd;Pooling=False”

$connection.Open()

Il ne reste plus qu’à définir et exécuter sa requête SQL :

$Requete = "select * from tablemySQL"

$command = New-Object MySql.Data.MySqlClient.MySqlCommand($Requete, $connection)

On va maintenant récupérer le tout dans un tableau :

$dataAdapter = New-Object MySql.Data.MySqlClient.MySqlDataAdapter($command)

$DataSet = new-object System.Data.DataSet

$DataAdapter.Fill($DataSet)

$tableauSQL = $DataSet.Tables[0].Rows

Maintenant affichons chaque résultat de ce tableau :

Foreach ($elements in $tableauSQL)

{

$donnee= "$($elements.donneeSQL)"

write-host $donnee

}

Une fois nos données récupérées, on ferme la connexion :

$connection.Close()

script

Facile n’est ce pas? Toutefois, pour pouvoir se connecter, une subtilité persiste dans la configuration Linux.

 

Du coté GNULinux : paramétrage des accès

Mon serveur Linux est un Ubuntu sur lequel est installé phpmyadmin. Lors de mes premières connexions via le script powershell, j’ai été confronté à cette erreur :

Unable to connect to any of the specified MySQL hosts

erreurmysqldotnet

Ce message peut être la conséquence de plusieurs causes. Peut-être les variables définies pour la connexion (serveur,base de donnée, compte mysql et mot de passe) ne sont pas bonnes. Si vous êtes certain de celles-ci, peut-être n’avez vous pas les autorisations pour vous connecter à votre base SQL en 3306.

Si on vérifie avec nmap (nmap -p 3306 ipduserveur), on est vite fixé : le port 3306 semble. Pour, pouvoir se connecter il faut alors modifier le fichier /etc/mysql/my.cnf de sorte qu’il contienne la ligne :

bind-address = x.x.x.x

x.x.x.x étant l’adresse ip de l’interface sur laquelle MySQL doit écouter. Vous pouvez mettre 0.0.0.0 pour que MySQL écoute les connexions venant de toutes les interfaces réseaux. Il sera donc totalement accessible mais cela est dangereux si votre serveur est connecté à Internet directement. (à ce sujet cf. ICI) Dans mon cas j’ai mis l’adresse IP de mon serveur sur le LAN.

La modification du fichier my.cnf peut être faite directement en ligne de commande avec l’utilitaire vi (avec la commande sudo vi /etc/mysql/my.cnf):

modifmycnf

Ou encore avec un éditeur graphique comme gedit (avec la commande sudo gedit /etc/mysql/my.cnf).

Puis, redémarrez MySQL avec la commande sudo /etc/init.d/mysql restart :

restartmysql

A partir de là, vous pourrez normalement vous connecter sans encombre à votre serveur MySQL sous Linux depuis un client sous Microsoft Windows en .Net.

sql

Là encore, nous avons l’illustration de la possibilité d’interopérabilité des systèmes Windows et Linux. Cela n’est pas sans difficulté mais ça reste possible. A vous de jouer maintenant!

Cathegorie(s): Software, Tutos

[TUTO] Agir sur ses bdd MSSQL depuis PHP/Apache sous Linux

juillet 20th, 2010

sql2008

Microsoft MS SQL est très largement employé en entreprise (surtout en PME, du moins, je pense). Vous pouvez avoir besoin d’interagir avec votre base de donnes Microsoft SQL depuis un serveur web sous Linux équipé de Apache et PHP (ca a été du moins mon cas et j’ai eu beaucoup de mal à trouver les informations nécessaires d’où ce tuto). Voyons ensemble comment faire.

Configuration

Pour ce tuto, j’utilise une Debian Etch 5.0 sur lequel sont installés PHP 5.0 et Apache 2.0 (via phpMyAdmin). Toutefois, de par le principe même de fonctionnement de PHP/Apache/MSSQL, l’installation et le fonctionnement devrait être, à peu près, le même pour les autres distribution Linux. Ma base de données est sous Microsoft SQL 2005. Pour se connecter et interagir avec, nous utiliserons les fonctions MSSQL, qui fonctionnent via les librairies FreeTDS.

lamp-logo

Il est aussi possible de faire fonctionner les librairies sous Windows avec un lot de configurations mais cela ne sera pas abordé dans cet article. Si c’est votre cas, vous pouvez vous rapporter à cet article.

Installation des composants pré-requis

Comme expliqué plus haut, pour se connecter et interagir avec Microsoft SQL, nous allons utiliser MSSQL. Mssql est inclus dans les librairies FreeTDS. On installe donc ces librairies, directement depuis Synaptic ou avec les lignes de commande (à taper dans un terminal) :

apt-get install freetds-dev

apt-get install freetds-common

ATTENTION : pour fonctionner, les manipulations en ligne de commande de ce tuto requièrent les droits administrateur. Sous Debian on passe administrateur en tapant la commande su et en entrant son mot de passe administrateur. Sous Ubuntu, on utilise sudo.

mssql1

Une fois les librairies FreeTDS installée on va éditer le fichier php.ini. Pour ce faire, on va taper la commande :

gedit /etc/php5/apache2/php.inimssql2

(J’utilise l’éditeur graphique gedit. Si vous n’utilisez pas d’interface graphique, dans le cas du SSH par exemple, vous pouvez utilisez l’éditeur VI)

Le fichier doit contenir une section [MSSQL] contenant ces paramètres :

mssql3

Nous allons affiner le paramétrage de MSSQL de sorte qu’il ressemble à ceci :

[MSSQL]
; Allow or prevent persistent links.
mssql.allow_persistent = On

; Maximum number of persistent links.  -1 means no limit.
mssql.max_persistent = -1

; Maximum number of links (persistent+non persistent).  -1 means no limit.
mssql.max_links = -1

; Minimum error severity to display.
mssql.min_error_severity = 1000

; Minimum message severity to display.
mssql.min_message_severity = 1000

; Compatibility mode with old versions of PHP 3.0.
mssql.compatability_mode = Off

; Connect timeout
mssql.connect_timeout = 5

; Query timeout
mssql.timeout = 60

; Valid range 0 – 2147483647.  Default = 4096.
;mssql.textlimit = 4096

; Valid range 0 – 2147483647.  Default = 4096.
;mssql.textsize = 4096

; Limits the number of records in each batch.  0 = all records in one batch.
;mssql.batchsize = 0

; Specify how datetime and datetim4 columns are returned
; On => Returns data converted to SQL server settings
; Off => Returns values as YYYY-MM-DD hh:mm:ss
;mssql.datetimeconvert = On

; Use NT authentication when connecting to the server
mssql.secure_connection = On

; Specify max number of processes. -1 = library default
; msdlib defaults to 25
; FreeTDS defaults to 4096
;mssql.max_procs = -1

; Specify client character set.
; If empty or not set the client charset from freetds.comf is used
; This is only used when compiled with FreeTDS
;mssql.charset = "ISO-8859-1"

Une fois la manipulation achevée, on enregistre le php.ini et on redémarre apache. Pour redémarrer Apache, on tape cette commande :

/etc/init.d/apache2 restart

mssql4

Il ne reste plus qu’à attaquer son code PHP pour se connecter à Microsoft SQL et à interagir avec.

Connexion et interaction via PHP

Pour se connecter à la base de données, nous allons utiliser les fonctions MSSQL. Pour pouvez toutes les retrouver (ainsi que leurs explications respectives) à cette adresse. Dans son fichier PHP, on passe simplement ces arguments :

- le nom du serveur de bases de données

- le compte utilisateur (compte SQL ou compte Windows)

- le mot de passe

- le nom de la base de donnée

Dans mon exemple j’interroge la base de donnée toto pour lui demander le contenu des lignes nom et prenom (de la table personne) pour qui le mail est tata@toto.fr (oui, c’est ce qu’on appelle un code bidon pour l’exemple). On obtient un code qui ressemble alors à ca :

<?php
$host = "monserveur";
//remplacer monserveur par le nom ou l’adresse IP de votre serveur Microsoft SQL.
$user = "sa";
//on peut aussi utiliser un identifiant de type DOMAINEuser
$mdpbdd  = "monmotdepasse";
$bdd = "toto";

mssql_connect($host, $user,$mdpbdd) or die("erreur de connexion au serveur");
mssql_select_db($bdd) or die("erreur de connexion a la base de donnees");
$query = "select nom, prenom from personne where mail=’tata@toto.fr’";
$req = mssql_query($query);

// Recuperation des resultats
while($row = mssql_fetch_row($req)){
$nom = $row[0];
$prenom = $row[1];

echo $nom;
echo $prenom;
};

mssql_close();

?>

Du reste, vous pouvez alors jouer avec votre base de données via les classiques commandes SQL.

sql

Troubleshooting

De ce que j’ai pu lire, le bug le plus courant avec mssql (que j’ai d’ailleurs moi aussi rencontré) est code retour php: Warning: mssql_connect() [function.mssql-connect]: Unable to connect to server

mssql5

Concrètement, face à ce cas de figure, vérifiez les paramètres de connexion (nom du serveur, identifiants de connexion, bdd) et assurez vous de pouvoir pinger le serveur depuis votre poste Linux. Si c’est bien le cas, contrôlez que vos librairies FreeTDS sont bien installées. Si c’est le cas, redémarrer Apache avec la commande /etc/init.d/apache2 restart devrait résoudre le problème.

mssql4

Si vous avez d’autres cas de figures où MSSQL pose problème, n’hésitez pas à me le faire savoir, si nous trouvons la réponse (ou si vous la connaissez) je mettrais à jour la partie troubleshooting de cet article.

Cathegorie(s): Software, Tutos