![Free-eBooks.net](/resources/img/logo-nfe.png)
![All New Design](/resources/img/allnew.png)
Si le but de l’index d’un livre est de nous permettre d’accéder plus rapidement au sujet qui
nous intéresse dans ce livre, il en est de même pour les index dans la base de données, à la
différence que ces index vont nous permettre de retrouver plus rapidement les données
stockées dans la base.
Il existe plusieurs types d’index (index ou index-cluster, unique ou non unique…). Un index
ordonné en clusters trie physiquement les lignes d’une table. Un index non ordonné en
clusters s’appuie sur les informations d’emplacement de stockage contenues dans les pages
d’index pour naviguer vers les pages de données (on parle de tri logique).
48
Une table ne peut posséder qu’un seul index ordonné en clusters, car ses lignes ne peuvent
être stockées que dans un seul ordre physique. L’ordre physique des lignes de l’index et
l’ordre des lignes de l’index sont identiques (il est conseillé de créer cet index avant tout
autre).
Un index peut être créé à n’importe quel moment, qu’il y ait ou non des données dans la
table. Simplement, il est préférable de créer l’index après une importation majeure de
données, pour éviter à avoir à le reconstruire par la suite, ce qui causera une perte
conséquente de temps au niveau serveur.
CREATE [UNIQUE|FULLTEXT|SPATIAL] INDEX index_name [index_type]
ON tbl_name (index_col_name,...)
index_col_name:
col_name [(length)] [ASC | DESC]
L’instruction CREATE INDEX de SQL ou l’option « Nouvel Index » dans le menu contextuel
du nœud Index de la table choisie de « PhpMyAmin » peuvent être utilisés pour la création
d’index.
La suppression d’index peut avoir plusieurs origines. La plus fréquente est la suivante.
Lorsqu’un index est trop coûteux en maintenance et qu’il n’offre pas de performances
significatives sur les requêtes, il peut être préférable de le supprimer.
Comme chacun le sait désormais, le mot clé pour supprimer un objet de la base est le mot
DROP. Nous allons encore une fois l’utiliser afin de pouvoir supprimer un index de la base.
Voici la commande type de suppression d’un index :
DROP INDEX index_name ON tbl_name
L’instruction DROP INDEX supprimera l’index.
49
Sauvegarder et restaurer la base
Les bases de données utilisateurs sont les bases les plus sujettes à être sauvegardées dans
l’entreprise. Pour effectuer une sauvegarde, dirigez-vous sur l’onglet « Exporter ». Vous
trouverez différents modes d’exportations de vos données.
50
Sécurité de la base
Pour gérer les utilisateurs, il faut se rendre sur le lien « Privilèges » depuis la page d'accueil de
« PHPMyAdmin ». La fenêtre affiche sur la partie droite tous les utilisateurs (comptes) existants :
Ce serveur possède une faille de sécurité : Le compte plénipotentiaire, « root » (le "super
utilisateur") n'a pas de mot de passe. Il est donc très facile pour un pirate de se connecter à
ce serveur et, étant super utilisateur, de faire ce qu'il veut avec les comptes ou avec les bases
de données. En réalité, ces captures d'écran sont tirées d'un « PHPMyAdmin » installé sur
mon poste, non accessible depuis Internet : le risque est donc très minime, sauf à avoir accès
physique à ma machine, de pouvoir modifier les comptes ou les bases et leur contenu.
On peut alors cliquer sur « Ajouter un utilisateur » et l'écran suivant indique l'identifiant, le
mot de passe, le degré de liberté de l'utilisateur (peut-il choisir une seule base, si oui laquelle
? peut-il choisir de travailler sur toutes les bases ?) ainsi que ses permissions. On reconnaît
les 3 grandes catégories de commandes SQL. Pour un utilisateur qui n'aura accès qu'à une
base et qui ne pourra modifier que les données, alors les permissions à cocher sont dans
l'encadré à gauche. Pour cet exemple, je choisis de créer un compte « tux » qui aura pour
permissions la manipulation des données, ainsi que la création et la modification de tables.
Grâce à la case "Créer une base portant son nom et donner à cet utilisateur tous les privilèges
sur cette base" une base propre lui sera attribuée, « tux » ne verra pas les autres bases sur
le serveur et ne pourra donc pas les modifier.
51
Vous pouvez également spécifier les droits par le code.
GRANT priv_type [(column_list)] [, priv_type [(column_list)]] ...
ON {tbl_name | * | *.* | db_name.*}
TO user [IDENTIFIED BY [PASSWORD] 'password']
[, user [IDENTIFIED BY [PASSWORD] 'password']] ...
[REQUIRE
NONE |
[{SSL| X509}]
[CIPHER cipher [AND]]
[ISSUER issuer [AND]]
[SUBJECT subject]]
[WITH [GRANT OPTION | MAX_QUERIES_PER_HOUR count |
MAX_UPDATES_PER_HOUR count |
MAX_CONNECTIONS_PER_HOUR count]]
REVOKE priv_type [(column_list)] [, priv_type [(column_list)]] ...
ON {tbl_name | * | *.* | db_name.*}
FROM user [, user] ...
REVOKE ALL PRIVILEGES, GRANT OPTION FROM user [, user] ...
Les commandes GRANT et REVOKE permettent à l'administrateur système de créer et
supprimer des comptes utilisateur et de leur donner ou retirer des droits. GRANT et REVOKE
sont implémentées en MySQL 3.22.11 ou plus récent. Pour les anciennes versions de MySQL,
ces commandes ne font rien.
52
Les informations sur les comptes MySQL sont stockées dans la base MySQL. Les droits sont
donnés à 4 niveaux :
• Niveau global : Les droits globaux s'appliquent à toutes les bases de données d'un
serveur. Ces droits sont stockés dans la table mysql.user. REVOKE ALL ON *.*
retirera seulement les privilèges globaux.
•
• Niveau base de données : Les droits de niveau de base de données s'appliquent à
toutes les tables d'une base de données. Ces droits sont stockés dans les tables
mysql.db et mysql.host. REVOKE ALL ON db.* retirera seulement les privilèges de
base de données.
•
• Niveau table : Les droits de table s'appliquent à toutes les colonnes d'une table. Ces
droits sont stockés dans la table mysql.tables_priv. REVOKE ALL ON db.table
retirera seulement les privilèges de table.
•
• Niveau colonne : Les droits de niveau de colonnes s'appliquent à des colonnes dans
une table. Ces droits sont stockés dans la table mysql.columns_priv. Quand vous
utilisez REVOKE vous devez spécifier les mêmes colonnes qui s'étaient vues accorder
des privilèges.
•
Pour faciliter la suppression de tous les droits d'un utilisateur, MySQL 4.1.2 a ajouté la
syntaxe suivante, qui efface tous les droits de base, table et colonne pour un utilisateur donné
:
REVOKE ALL PRIVILEGES,GRANT FROM user_name [, user_name ...]
Avant MySQL 4.1.2, tous les droits ne peuvent pas être effacés d'un coup. Il faut deux
commandes pour cela :
REVOKE ALL PRIVILEGES FROM user [, user] ...
REVOKE GRANT OPTION FROM user [, user] ...
Pour les commandes GRANT et REVOKE, la clause priv_type peut être spécifiée par les
constantes suivantes :
Droit
Signification