Affichage des articles dont le libellé est SQL. Afficher tous les articles
Affichage des articles dont le libellé est SQL. Afficher tous les articles

mardi 11 août 2009

[MySQL] ERROR 1045 (28000): Access denied for user 'debian-sys-maint'@'localhost' (using password: YES)

Aujourd'hui, j'ai eu une erreur du type : ERROR 1045 (28000): Access denied for user 'debian-sys-maint'@'localhost' (using password: YES)
Voici comment j'ai fait pour m'en sortir :

Se connecter sur mysql
mysql -u root -p
Nous allons vérifier les privilèges de l'utilisateur debian-sys-maint avec la commande SQL suivante
SHOW GRANTS FOR 'debian-sys-maint'@'localhost';

Dans mon cas l'utilisateur n'avait pas de GRANT OPTION mais la commande suivante devrait résoudre d'autre problèmes du même ordre.
GRANT ALL PRIVILEGES ON *.* TO 'debian-sys-maint'@'localhost' IDENTIFIED BY 'password' WITH GRANT OPTION;

password est le mot de passe que vous retrouverez dans /etc/mysql/debian.cnf

Il suffit de redémarrer le serveur et tout doit fonctionner ;) !
/etc/init.d/mysql restart

lundi 15 septembre 2008

[Zend Framework] Faire un join

Il se peut que vous rencontriez une erreur de type :
Select query cannot join with another table in /var/www/ etc ...

Ceci est du à Zend Framework qui n'autorise pas par défaut de faire une simple jointure sur une table sous jacente.

L'objet Zend_Db_Table_Select est destiné à sélectionner des données sur une table précise. Des jointures peuvent être faites, mais il n'est pas possible de sélectionner des colonnes ne faisant pas partie de la table sous jacente. Cependant, ceci aurait pu être utile dans certains cas, et l'objet Zend_Db_Table_Select possède une clause spéciale déverrouillant cette limitation. Passez la valeur false à sa méthode setIntegrityCheck. Il est alors possible de sélectionner des colonnes hors table. Attention toutefois, l'objet row/rowset résultant sera verrouillé. Impossible d'y appeler save(), delete() ou même d'affecter une valeur à certains de ses champs. Une exception sera systématiquement levée.

Pour enlever cette protection vous devez spécifier setIntegrityCheck(false) dans votre requête.

Par exemple pour une classe simple de récupération de news j'ai :
<?php

/**
* News
*
* @author Lermit
* @version 1
*/

require_once 'Zend/Db/Table/Abstract.php';

class News extends Zend_Db_Table_Abstract {

protected $_name = 'news';
protected $_primary = 'news_id';
protected $_dependentTables = array("Users");
protected $_referenceMap = array(
    'Reporter' => array(
    'columns' => 'user_id',
    'refTableClass' => 'Users',
    'refColumns' => 'user_id'
    )
);

/**
* getLast
* retourne les $numberOfNews dernières news à partir de $start
* @author lermit
* @version 1
* @param $numberOfNews nombre de news
* @param $start à partir de la n-ieme news
* @return les news
*/
public function getLast($numberOfNews,$start)
{
    $select = $this->select()
        ->setIntegrityCheck(false)
        ->from( array('n' => $this->_name), array('text','date','user_id'))
        ->join(array('u' =>'users'),'u.user_id=n.user_id','login')
        ->order('date DESC')
        ->limit($numberOfNews,$start);

    return $this->fetchAll($select);
}
}

Tout d'abord je spécifie le nom et la clef primaire de ma table puis les relations de jointure avec les autres tables.
$_dependentTable = tableau de la/les classe(s) de la(des) table(s) dépendante(s).
$_referenceMap = tableau de tableaux de dépendances. Chaque dépendance est listée sous la forme d'un tableau construisant comme suit :
'columns' => 'colonne de la classe courante',
'refTableClass' => 'classe de la table à joindre',
'refColumns' => 'colonne de la table à joindre'
Bref ma requête utilise bien ->setIntegrityCheck(false) ce qui m'enlèvera cette fâcheuse erreur !!

vendredi 12 septembre 2008

[Base de Données] Recherche du provider et de la chaine de connection ?

Pour ne plus chercher comment se connecter à tel ou tel base avec quel provider ? etc ...

Ce site web recense un nombre impressionnant de méthodes de connexions et pourrait en aider plus d'un ;)
http://www.connectionstrings.com/default.aspx
Bonne connexion !

[SQL Server] Mise en place du serveur, Mise en place d'un shema de base, activation du protocole TCP/IP



Pour faire des tests sur Entity Framework j'ai du installer une base de donnée de test. J'ai choisi Microsoft SQL Server Express 2005 car il est complètement intégré avec l'Entity Framework.

Tout d'abord il convient de télécharger SQL Server Express 2005. Il se trouve à cette adresse (40.9 Mo) :

http://msdn.microsoft.com/fr-fr/express/bb410791.aspx
Attention pour installer le serveur il faut avoir au préalable installer Windows Installer 3.1 (ou supérieur) qui est disponible ici. Il faut aussi posséder le dot net Framework 2 ou supérieur.Une fois le téléchargement fini il faut exécuter l'exécutable, l'installateur décompresse tout d'abord les données, il faut ensuite accepter la licence et enfin cliquer sur installer ! Vous arrivez après dans l'installateur en lui même. Il faut tout d'abord une vérification du système et vous informe des non conformités avec l'installation. Il vous demande votre nom et société puis les composants que vous voulez installer. Il faut sélectionner ce que vous avez besoin. Ici nous avons tout sélectionné. Pour le mode d'authentification vous pouvez choisir entre l'authentification Windows (qui fonctionne avec votre compte Windows) ou l'authentification mixte qui rajoute une entrée "non-Windows". Ceci permet de récupérer la base en cas de problèmes avec le réseau d'authentification Windows.Ensuite deux choix s'offrent à vous : activer les instances d'utilisateur qui si il est coché permet aux utilisateurs d'exécuter des instances séparé de l'instance parent. Ainsi chaque utilisateur peut avoir sa propre instance. Nous l'avons coché. L'autre option : Ajouter l'utilisateur au rôle Administrateur SQL Server permet à l'utilisateur qui installe la base de données d'être administrateur de celle-ci. Ensuite vous pouvez spécifier si vous voulez ou non envoyer des rapports à Microsoft sur le fonctionnement de son produit. Enfin l'installation se lance et après quelques minutes tout est fini.

Pour activer votre base de données sur le réseau il faut aller dans Gestionnaire de configuration SQL Server (nouvellement installé) et dans Configuration du réseau SQL Server 2005 -> Protocoles pour SQLEXPRESS sélectionner TCP/IP, bouton de droite activer. Activer aussi canaux nommées. Il faut ensuite redémarrer le service. Pour ceci dans Services SQL Server 2005, sélectionner SQL Server (SQLEXPRESS), bouton de droite, redémarrer. Enfin pour que le serveur puisse être facilement listé par les clients nous allons démarrer SQL Server Browser. Faire bouton de droite sur celui ci propriétés, Service, changer le Mode de démarrage en Automatique, cliquer sur ok. Ensuite bouton de droite démarrer.

Une fois l'installation terminée nous allons intégrer un schéma de base, proposé par Microsoft pour nos tests. Vous trouverez plusieurs schémas de base à cette adresse :

http://www.microsoft.com/sql/editions/express/starterschemas.mspx
Nous utiliserons ici le schéma Customers and Orders.
Pour l'intégrer facilement à notre base de données nous utiliserons le logiciel (gratuit) de Microsoft : Microsoft SQL Server Management Studio Express. Il se trouve à cette adresse (en bas !) :

http://www.microsoft.com/downloads/details.aspx?displaylang=fr&FamilyID=C243A5AE-4BD1-4E3D-94B8-5A0F62BF7796
L'installation est très simple.
Lancer ensuite SQL Server Management Studio Express (non ce n'est pas un nom à rallonge ...), connecter vous à votre base de donnée (dans nom du serveur, cliquer sur parcourir et votre base de donnée devrait s'afficher)
Sélectionner Bases de données, bouton de droite, Nouvelle base de données. Pour créer une nouvelle base de données qui nous servira pour nos tests. Sur votre nouvelle base de donnée, bouton de droite, nouvelle requête, copier ici votre code SQL. Nous avons nous copier l'intégralité du fichier cre_customers_and_orders.sql. Puis faite bouton de droite sur l'éditeur et exécuter.

Voila votre serveur SQL Server 2005 Express est installer et votre base de données créé.