Outils pour utilisateurs

Outils du site


technique:linux:bdd_mysql

Mysql

Doc : http://dev.mysql.com/doc/mysql/en/index.html

http://dev.mysql.com/doc/mysql/fr/index.html

FAQ : http://mysql.developpez.com/faq/ Portail PHP/MySQL : http://www.nexen.net/

Installation du serveur * # urpmi mysql Voir les notes d'installation dans /usr/share/doc/mysql/README.urpmi Vérifier si le service mysqld fonctionne, le lancer, l'arrêter … # service mysqld status start restart stop Fichier de configuration /etc/my.cnf Première connexion $ mysql il n'y a aucun mot de passe ! Les créer d'urgence pour root (= l'administrateur MySQL, n'a rien à voir avec le root linux !) et au moins un utilisateur : mysql> SET PASSWORD FOR 'root'@'localhost' = PASSWORD('MotDePassePourRoot'); mysql> GRANT ALL PRIVILEGES ON *.* TO 'utilisateur'@'localhost' IDENTIFIED BY 'MotDePasseDeCetUtilisateur' WITH GRANT OPTION; Vérifier (facultatif) le résulat : mysql> SELECT Host, User FROM mysql.user; mysql> quit

Se connecter $ mysql -h localhost -u joe -p $ mysql -p NB : -h localhost et -u joe sont facultatifs : en leur absence c'est localhost et l'utilisateur qui lance la commande mysql qui sont pris par défaut. - p pour qu'au démarrage de mysql le mot de passe soit demandé

Version, aide en ligne Lancer simplement mysql : $ mysql Welcome to the MySQL monitor. Commands end with ; or \g. Your MySQL connection id is 1 to server version: 4.1.5-gamma Type 'help;' or '\h' for help. Type '\c' to clear the buffer. mysql> SHOW DATABASES; liste les DB $ mysqlshow -u root -p “ mysql> SELECT DATABASE(); affiche la DB actuellement sélectionnée (NULL si aucune DB est sélectionnée) mysql> CREATE DATABASE toto; Crée la DB toto mysql> USE toto Sélectionne la DB toto CREATE TABLE `tb1` ( `id_tb1` int(11) NOT NULL auto_increment, `nom` text NOT NULL, …. PRIMARY KEY (`id_tb1`) ) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=11 ; mysql> SHOW TABLES FROM toto; liste les tables contenues dans la DB toto mysql> DESCRIBE tb1; Affiche la structure de la table tb1 mysql> DROP DATABASE tb1; Supprime la DB tb1 Sécurité Afficher les utilisateurs : mysql> SELECT Host, User FROM mysql.user; ————————— mysql> SELECT Host, User FROM mysql.user; +———–+——+ | Host | User | +———–+——+ | localhost | | | localhost | root | +———–+——+ La ligne où user est vide correspond à un accès anonyme avec les pleins droits ! ⇒ supprimer le compte anonyme : ——————————– mysql> DELETE FROM mysql.user WHERE User = ; suppression mysql> FLUSH PRIVILEGES; mise à jour Assigner un mot de passe chiffré : ———————————- Plusieurs commandes possibles : - SET PASSWORD ………….. mysql> SET PASSWORD FOR 'root'@'localhost' = PASSWORD('mot_de_passe'); - mysqladmin ………… $ mysqladmin -u root password “mot_de_passe” $ mysqladmin -u root -h nom_ou_IP_machine password “mot_de_passe” - UPDATE …….. mysql> UPDATE mysql.user SET Password = PASSWORD('mot_de_passe') → WHERE User = 'root'; mysql> FLUSH PRIVILEGES; Vérifier la mise en place du mot de passe —————————————– mysql> SELECT Host, User, password FROM mysql.user; Se connecter apès avoir mis un mdp ———————————- $ mysql -h host -u user -p Se connecter après voir mis un mdp Enter password: Ajouter un utilisateur ———————- Utilisateur pouvant se connecter à partir de localhost avec tous les droits : mysql> GRANT ALL PRIVILEGES ON *.* TO 'utilisateur'@'localhost' → IDENTIFIED BY 'mot_de_passe' WITH GRANT OPTION; Utilisateur pouvant se connecter à partir de n'importe où avec tous les droits : remplacer TO 'utilisateur'@'localhost' par TO 'utilisateur'@'%' Autres mesures de sécurité http://www.securityfocus.com/infocus/1726 Activer /désactiver l'accès par le réseau * Editer /etc/my.cnf Désactiver = skip-networking (existe par défaut dans le fichier) Activer = mettre “skip-networking” en commentaire Messages d'erreur *** $ mysql -u joe -p Enter password: ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/var/lib/mysql/mysql.sock' (2) ⇒ Vérifier si mysqld est lancé # service mysqld status mysqld is stopped # service mysqld start Starting MySQL: [OK] Installation de phpMyAdmin ========================= Voir documentation phpMyAdmin Configuration de la version stable (rpm) °°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°° MDV installe phpMyadmin dans /var/www/html/admin/phpMyAdmin La documentation locale est dans : http://localhost/admin/phpMyAdmin/Documentation.html Pour lancer phpMyAdmin : http://localhost/admin/phpMyAdmin/ En cas de message d'erreur : cannot load mysql extension; please check PHP configuration installer les fonctions nécessaires à PHP pour se connecter au servfeur Mysql : php-mysql-x.x.x-xmdk Mire phpMyAdmin, mais message d'erreur : The configuration file now needs a secret passphrase (blowfish_secret). ⇒ editer le fichier /var/www/html/admin/phpMyAdmin/config.inc.php : chercher la ligne $cfg['blowfish_secret'] = et entrer une phrase quelconque qui servira à coder les mots de passe. Autres messages d'erreur - The mbstring PHP extension was not found and you seem to be using a multibyte charset. Without the mbstring extension phpMyAdmin is unable to split strings correctly and it may result in unexpected results. ⇒ probablement une fausse alerte. Installer php4-mbstring-x.x.x-xmdk Se déloger Redémarrer le serveur mysql # service mysqld stop # service mysqld start Relancer phpMyAdmin Le message d'erreur persiste !! A voir. Création des tables nécessaires au “whole set of new features (bookmarks, comments, SQL-history, PDF-generation, field contents transformation, etc.” ———————————————————————————————————- Documentation, voir : http://localhost/admin/phpMyAdmin/Documentation.html /var/www/html/admin/phpMyAdmin/scripts/create_tables_mysql_4_1_2+.sql - Créer un utilisateur 'pma' (par userdrake par exemple) et lui attribuer un mot de passe quelconque - Mettre ce nom d'utilisateur et ce mot de passe dans le fichier de configuration de phpMyAdmin /var/www/html/admin/phpMyAdmin/config.inc.php : $cfg['Servers'][$i]['controluser'] = 'pma'; MySQL control user settings (this user must have read-only $cfg['Servers'][$i]['controlpass'] = 'mot de passe pour pma'; access to the “mysql/user” Indiquer dans ce même fichier de configuration les services voulus ; pas de service si la variable correspondante n'est pas initialisée : $cfg['Servers'][$i]['pmadb'] = 'phpmyadmin'; Database used for Relation, Bookmark and PDF Features (see scripts/create_tables.sql) - leave blank for no support DEFAULT: 'phpmyadmin' $cfg['Servers'][$i]['bookmarktable'] = 'pma_bookmark'; Bookmark table - leave blank for no bookmark support DEFAULT: 'pma_bookmark' $cfg['Servers'][$i]['relation'] = 'pma_relation'; $cfg['Servers'][$i]['table_info'] = 'pma_table_info'; $cfg['Servers'][$i]['table_coords'] = 'pma_table_coords'; $cfg['Servers'][$i]['pdf_pages'] = 'pma_pdf_pages'; $cfg['Servers'][$i]['column_info'] = 'pma_column_info'; $cfg['Servers'][$i]['history'] = 'pma_history'; Configurer correctement les droits du controluser pma : cf http://localhost/admin/phpMyAdmin/Documentation.html au paragraphe “Using authentication modes” GRANT USAGE ON mysql.* TO 'pma'@'localhost' IDENTIFIED BY 'mot de passe pour pma'; GRANT SELECT ( Host, User, Select_priv, Insert_priv, Update_priv, Delete_priv, Create_priv, Drop_priv, Reload_priv, Shutdown_priv, Process_priv, File_priv, Grant_priv, References_priv, Index_priv, Alter_priv, Show_db_priv, Super_priv, Create_tmp_table_priv, Lock_tables_priv, Execute_priv, Repl_slave_priv, Repl_client_priv ) ON mysql.user TO 'pma'@'localhost'; GRANT SELECT ON mysql.db TO 'pma'@'localhost'; GRANT SELECT ON mysql.host TO 'pma'@'localhost'; GRANT SELECT (Host, Db, User, Table_name, Table_priv, Column_priv) ON mysql.tables_priv TO 'pma'@'localhost'; - Créer les tables nécessaires à l'aide du script fourni dans phpMyAdmin/scripts : $ mysql -ulogin -p -vv </var/www/html/admin/phpMyAdmin/scripts/create_tables_mysql_4_1_2+.sql - Lancer (relancer) phpMyAdmin Ne semble pas fonctionner correctement : à voir. Installation de la dernière version disponible sur le site http://www.phpmyadmin.net/ °°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°° - Décompresser : tar zxvf phpMyAdmin_x.x.x.tar.gz - Mettre le dossier dans (sous) la racine du serveur web (/var/www/html), ou dans un répertoire accessible par apache (cf. Apache, alias) - Configurer (fichier config.inc.php) compléter: $cfg['PmaAbsoluteUri'] = 'http://localhost/phpMyAdmin-2.6.0-pl3/'; $cfg['PmaAbsoluteUri_DisableWarning'] = TRUE; $cfg['Servers'][$i]['host'] = 'localhost'; Installation de phpMyAdmin-2.8.0.3 (à partir de cooker) °°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°° Documentation : /var/www/phpMyAdmin/Documentation.html Le fichier de configuration “config.inc.php” de phpMyAdmin n'existe pas. Il faut le créer à partir du modèle “config.default.php” fourni : /var/www/phpMyAdmin/libraries/config.default.php → /etc/phpMyAdmin/config.default.php Placer une copie de ce fichier (ou un lien) dans le répertoire principal de phpMyAdmin (celui contenant le fichier index.php, en principe /var/www/phpMyAdmin ou tout autre endroit où l'on a installé phpMyAdmin) ; nommer cette copie config.inc.php. Seule chose à modifier (pour commencer) : $cfg['Servers'][$i]['auth_type'] = 'cookie'; Authentication method (config, http or cookie based)? ⇒ remplacer 'cookie' par 'http' Script de configuration : /usr/share/doc/phpMyAdmin-2.8.0.3/scripts/setup.php : intérêt? Fonctionnemnet ? En cas de login/mot de passe rejeté : vérifier qu'Apache et msql sont bien démarrés ! # service httpd status|start # service mysqld status|start Sécurisation °°°°°°°°°°°° Pour qu'apache présente une fenêtre login/password : 1 - fichier config.inc.php : remplacer config par http: $cfg['Servers'][$i]['auth_type'] = 'http'; 2 - Créer un fichier de mots de passe utilisable par apache : cf. documentation apache : file:/usr/share/doc/apache2-manual-2.0.50/howto/auth.html Créer le fichier de mots de passe n'importe où (éviter de le mettre sous /var/www/html qui est la racine du serveur web sous Mandrake, lisible sauf précautions particuliéres (.htaccess) par tout le monde). Le placer par exemple dans la zone de fichiers de configuration d'apache (/etc/httpd). Créer par exemple un dossier spécial : # mkdir /etc/httpd/passwd Puis créer (-c) avec l'utilitaire (apache) htpasswd un fichier de mots de passe avec un nom quelconque (ici par exemple .htpasswd). Ici pour l'utilisateur root : # htpasswd -c /etc/httpd/passwd/.htpasswd root répondre par le mot de passe à utiliser pour root (NB : pour que le nouvel utilisateur soit pris en compte par apache il est nécessaire de redémarrer apache (service httpd restart). Ici ce n'est pas utile : il sera redémarré au point 4 Pour ajouter un nouvel utilisateur, même commande, mais ATTENTION ! sans -c, sinon le fichier de mots de passe est effacé) 3 - Indiquer à apache où se trouve ce fichier de mots de passe : Dans le fichier de configuration d'apache /etc/httpd/conf/commonhttpd.conf, rajouter dans la partie concernant phpMyAdmin les directives suivantes : <Directory ”/var/www/html/phpMyAdmin-2.6.0-pl3“> … AuthType Basic AuthName “phpMyAdmin” AuthUserFile /etc/httpd/passwd/.htpasswd Require user toto </Directory> Explication : <Directory ”/var/www/html/phpMyAdmin-2.6.0-pl3“> indique quel répertoire est concerné (celui qui contient phpMyAdmin) AuthType Basic type d'identification Basic : le mot de passe circule en clair Digest : le mot de passe est transmis crypté : n'est supporté que par les clients web les plus récents : OK avec konqueror Ne fonctionne pas avec Mozilla 1.7.2 et Firefor 0.9.3 AuthName “phpMyAdmin” Invite affichée dans la fenêtre de demande de login/mot de passe AuthUserFile /etc/httpd/passwd/.htpasswd /path/vers/le/fichier_de_mots_de_passe Require user root utilisateur autorisé </Directory> 4 - Relancer apache (service httpd restart) pour que les nouvelles directives soient prises en compte 5 - Si on veut indiquer non plus un utilisateur, mais un (ou des) groupes d'utilisateurs <Directory ”/var/www/html/phpMyAdmin-2.6.0-pl3“> AuthType Digest AuthName “Accès à phpMyAdmin” AuthUserFile /etc/httpd/passwd/.htpasswd AuthGroupFile /etc/httpd/passwd/groups Require group Nom_du_groupe </Directory> Explication : AuthGroupFile /etc/httpd/passwd/groups groups : nom du fichier (il peut être quelconque) où sont définis un (ou des) groupe(s) Dans le fichier texte “groups” définir les groupes de la facon suivante : Nom_du_groupe: user4 user6 user25 Pour d'autres possibilités de sécuriser l'accès au serveur web, voir la documentation apache : file:/usr/share/doc/apache2-manual-2.0.50/howto/auth.html plutôt bien faite. phpMyadmin-2.10.0.2 sous MDV 2008.0 °°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°° phpMyadmin est maintenant installé dans /var/www/ (/var/www/phpmyadmin). On peut le déplacer ailleurs. Documentation : /usr/share/doc/phpmyadmin-2.10.0.2/Documentation.txt /var/www/phpmyadmin/Documentation.html Configuration : /etc/phpmyadmin/config.default.php (/var/www/phpmyadmin/libraries/config.default.php → /etc/phpmyadmin/config.default.php) La doc précise - de copier config.default.php dans config.inc.php - d'éditer et de compléter ce dernier (voir plus loin) - de le copier dans la racine de phpmyadmin (phpmyadmin/libraries/config.default.php est d'abord lu puis phpmyadmin/config.inc.php. # cp /var/www/phpmyadmin/libraries/config.default.php /var/www/phpmyadmin/config.inc.php Configuration de phpmyadmin ————————— Voir plus haut “Installation de phpMyAdmin-2.8.0.3 (à partir de cooker)” Configuration du serveur Apache ——————————- Les modifications ne sont pas apportées dans /etc/httpd/conf/httpd.conf, mais dans /etc/httpd/conf/webapps.d/phpmyadmin.conf Modifier ce fichier en conséquence en particulier Alias /phpmyadmin /var/www/phpmyadmin si on a modifié l'emùplacement de phpmyadmin et <Directory /var/www/html/phpmyadmin> Allow from All </Directory> pour renforcer la sécurité puis redémarrer httpd Quelques problèmes °°°°°°°°°°°°°°°°°° couldn't perform authentication. AuthType not set! ————————————————– “Require user” non précédé de la façon dont doit se faire l'authentification de l'utilisateur. ⇒ voir “Authtype” dans le paragraphe “Sécurisation” ci-dessus Permission denied: Could not open password file: /etc/httpd/passwd/htpasswd access to /<LaPageWeb>/ failed, reason: verification of user id 'toto' not configured ————————————————————————————- ⇒ Apache doit pouvoir lire le fichier htpasswd. Tester où ça bloque avec : # su - apache Mettre les droits d'accès corrects et de lecture corrects : # chmod 755 /etc/httpd/passwd # chmod 644 /etc/httpd/passwd/htpass ou de préférence (droits plus restreints) : ou bien les 2 commandes : # chown root:apache /etc/httpd/passwd # chown root:apache /etc/httpd/passwd/htpass # chmod 750 /etc/httpd/passwd # chmod 640 /etc/httpd/passwd/htpass Existing configuration file (./config.inc.php) is not readable ————————————————————– Apache ne peut pas le lire. Appartient probablement à root:root) # ll /var/www/phpmyadmin/config.inc.php -rw-r—– 1 root root /var/www/phpmyadmin/config.inc.php # chown root:apache /var/www/phpmyadmin/config.inc.php MySQL - ODBC - OpenOffice ========================= Cf. http://support.openoffice.org/index.html, cliquer sur “Free: OpenOffice.org, ODBC,and MySQL How-To” (fichier OOoMySQL9.pdf) - Installer MySQL - Installer MyODBC - Configurer /etc/odbcinst.ini et /etc/odbc.ini comme indiqué dans la doc ci-dessus $ cat /etc/odbc.ini [MySQL-test] Description = MySQL database test Driver = MySQL Server = localhost Database = test Port = 3306 $ cat /etc/odbcinst.ini (à rajouter dans ce fichier, il y a probablement deja un paragraphe [PostgreSQL]) [MySQL] Description = ODBC for MySQL Driver = /usr/lib/libmyodbc3.so.1.0.0 Setup = = /usr/lib/libmyodbc3S.so.1.0.0 FileUsage = 1 - Voir la version et la config d'ODBC : $ odbcinst -j - Tester la configuration : $ isql -v MySQL-test login MotDePasse Problèmes ——— 1 : $ isql -v MySQL-test test [IM004][unixODBC][Driver Manager]Driver's SQLAllocHandle on SQL_HANDLE_HENV fail ed [ISQL]ERROR: Could not SQLConnect ⇒ dans /etc/odbcinst.ini Driver = /usr/lib/libmyodbc3S.so.1.0.0 le driver indiqué n'est pas le bon : “S” est seulement pour le setup 2 : $ isql -v MySQL-test test [S1T00][unixODBC][MySQL][ODBC 3.51 Driver]Access denied for user 'test'@'localhost' (using password: NO) [ISQL]ERROR: Could not SQLConnect ⇒ l'utilisateur test n'existe pas (a été supprimé) ou bien, même message d'erreur mais avec un utilisateur existant : 3 : $ isql -v MySQL-test NomDeLogin [S1T00][unixODBC][MySQL][ODBC 3.51 Driver]Access denied for user 'NomDeLogin'@'localhost' (using password: NO) [ISQL]ERROR: Could not SQLConnect ⇒ Connexion refusée car pas de mot de passe

technique/linux/bdd_mysql.txt · Dernière modification : 2020/04/06 15:38 de 127.0.0.1