Notes base de donnees MySql
De MicElectroLinGenMet.
Sécurisation serveur MySql (Source : Revue MISC 11-12/2002)
Comptes et mots de passe : Connexion :
- mysql -u root mysql
avec password :
- mysql -u root mysql -p
Changer mot de passe root
- set password for root@localhost = password (’mot_de_passe’) ;
Supprimer password avec le nom de machine
- DELETE FROM user WHERE Host=’nom_machine’ AND User=’root’ ;
Si un utilisateur doit se connecter à distance, rajouter l’adresse IP ou le nom de machine dans le champs ’Host’ de la table ’user’ ou ’%’ pour se connecter de n’importe ou.
Supprimer comptes sans mot de passe
- DELETE FROM user WHERE Password=’’ ;
Supprimer la base de test
- DROP DATABASE test ;
Activer modifications
- FLUSH PRIVILEGES ;
Privilèges
Ajout d’un utilisateur ’utilisateur’ qui sera un super utilisateur avec les mêmes droits que root :
- INSERT INTO user VALUES(’localhost’, ’utilisateur’, PASSWORD(’mot-de-passe’), ’Y’, ’Y’, ’Y’, ’Y’, ’Y’, ’Y’, ’Y’, ’Y’, ’Y’, ’Y’, ’Y’, ’Y’, ’Y’, ’Y’) ;
Donner les droits d’accès à ’utilisateur’ sur la base ’base_utilisateur’ de n’importe ou :
- GRANT SELECT, INSERT, UPDATE, DELETE, CREATE, ALTER, DROP ON base_utilisateur.* TO utilisateur@% IDENTIFIED BY "pwd" ;
Lister que les bases sur lesquelles l’utilisateur a des droits :
- Dans /etc/my.cnf, section mysql, ajouter safe-show-database
Limiter les connexions : Dans /etc/my.cnf, pour 100 connections simultanées
- set-variable = max_connections=100
pour 50 connexions simultanées par utilisateur
- set-variable = max_user_connections=50
Perte du mot de passe administrateur : Relancer mysqld avec l’option --skip-grant-tables
Debian : L’utilisateur "
debian-sys-main
t" est déclaré dans la base mysql et est nécessaire au démarrage de MySql (ne pas supprimer). Il est déclaré dans
/etc/mysql/debian.cnf
avec son password.
Exemples de requêtes mySQL :
Création d’une Base.
- CREATE DATABASE linux ;
Utilisation de la base linux :
- USE linux ;
Création d’une table.
- CREATE TABLE fichiers (Chemin VARCHAR (255) not null , Nom VARCHAR (255) not null ) comment = ’Fichiers divers sur Vesta’
- CREATE TABLE tiers (id_tiers TINYINT UNSIGNED DEFAULT ’0’ NOT NULL AUTO_INCREMENT, nom_tier VARCHAR(80), PRIMARY KEY (id_tiers)) ;
Modification de la table "fichiers_critiques"(rajout de 2 colonnes).
- ALTER TABLE fichiers_critiques ADD Programme_associe VARCHAR (64) not null , ADD Remarques VARCHAR (255) not null
Autre exemple avec une clé primaire.
- ALTER TABLE noteslinux ADD id_notes smallint(5) unsigned NOT NULL auto_increment primary key ;
Affiche tous les enregistrements de la table "revues"
- SELECT * FROM revues ;
Ajout nouvelle ligne
- INSERT INTO revues (Nom, Numero, Date, Sujet, Domaine, Auteur, Remarques) VALUES (’Linux Magazine’, ’HS-8’, ’2001-8-1’, ’Sécuriser un serveur Postfix’, ’Sécurité’, ’Samuel Dralet’, ’’)
- INSERT INTO typesoperation VALUES (’’, ’CH’) ;
Maj colonne ’Auteur’ si colonne ’Sujet’ = ’News et FTP avec Perl’ de la table revues.
- UPDATE revues SET Auteur=’Eric Jacoboni’ WHERE Sujet=’News et FTP avec Perl’ ; # Autre exemple avec variables PHP :
- UPDATE $table SET domaine=’$domaine’, fonction=’$fonction’, description=’$description’ WHERE id_notes=’$index’
Insert un fichier de type csv dans la table revues
- LOAD DATA LOCAL INFILE ’/home/dan/table.csv’ REPLACE INTO TABLE revues FIELDS TERMINATED BY ’ ;’ OPTIONALLY ENCLOSED BY ’\"’ ESCAPED BY ’\\’ LINES TERMINATED BY ’\n’
Suppression d’une ligne.
- DELETE FROM revues WHERE Nom = ’Maximum Linux’ AND Numero = ’6’ AND Date = ’2001-01-01’ AND Sujet = ’Découvrir le navigateur Lynx’ AND Domaine = ’Application’ AND Auteur = ’Michel Luczak’ AND Remarques = ’’
Ecrit le contenu de la table1 dans le fichier data.txt avec séparteurs ’,’
- SELECT * FROM table1 INTO OUTFILE ’data.txt’ FIELDS TERMINATED BY ’,’ ;
Pour relire ce fichier, la bonne commande est :
- LOAD DATA INFILE ’data.txt’ INTO TABLE table2 FIELDS TERMINATED BY ’,’ ;
Exemple de requête de jonction entre plusieurs tables : Soit les tables ccp categories souscategories tiers typesoperation d’une base compte
- SELECT nom_typeoperation, no_cheque, dateoperation, nom_tier, noteoperation, nom_categorie, nom_souscategorie, montant FROM ccp, typesoperation, tiers, categories, souscategories WHERE no_typeoperation=id_typeoperation AND no_tier=id_tier AND no_categorie=id_categorie and no_souscategorie=id_souscategorie
Sauvegarde et restauration d’une base.
- mysqldump -u dan linux -p > database_linux.mysql
- mysql -u dan linux -p < database_linux.mysql
Autorise les SELECT complexe (long) :
- mysql_query("SET OPTION SQL_BIG_SELECTS=1 ") ;
26 juin 2004
