Conception Et Réalisation (MySQL) by Grare Stéphane - HTML preview

PLEASE NOTE: This is an HTML preview only and some elements such as links or page numbers may be incorrect.
Download the book in PDF, ePub, Kindle for a complete version.

Les index

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

index-49_1.png

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

index-50_1.png

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

index-51_1.jpg

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

index-52_1.png

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