• Aucun résultat trouvé

Comment fonctionne le système de droits

4 Administration du serveur

4.2 Règles de sécurité et droits d'accès au serveur MySQL

4.2.6 Comment fonctionne le système de droits

Le système de droits de MySQL s'assure que les utilisateurs font exactement ce qu'ils sont supposés pouvoir faire dans la base. Lorsque vous vous connectez au serveur, vous identité est déterminée par l'hôte d'où vous vous connectez et le nom d'utilisateur que vous spécifiez . Le système donne les droits en fonction de votre identité et de ce que vous voulez faire .

MySQL considère votre nom d'hôte et d'utilisateur pour vous identifier, car il n'y pas que peu de raisons de supposer que le même nom d'utilisateur appartient à la même personne, quelque soit son point de connexion sur Internet. Par exemple, l'utilisateur joe qui se connecte depuis

office.com n'est pas forcément la même personne que joe qui se connecte depuis

elsewhere.com . MySQL gère cela en vous aidant à distinguer les différents utilisateurs et hôtes qui ont le même nom : vous pourriez donner des droits à joe lorsqu'il utilise sa connexion depuis

office.com , et un autre jeu de droits lorsqu'il se connecte depuis elsewhere.com . Le contrôle d'accès de MySQL se fait en deux étapes :

Etape 1 : Le serveur vérifie que vous êtes autorisé à vous connecter.

Etape 2 : En supposant que vous pouvez vous connecter, le serveur vérifie chaque requête que vous soumettez, pour vérifier si vous avez les droits suffisants pour l'exécuter. Par exemple, si vous sélectionnez des droits dans une table, ou effacez une table, le serveur s'assure que vous avez les droits de SELECT pour cette table, ou les droits de DROP , respectivement.

Le serveur utilise les tables user , db et host dans la base mysql durant les deux étapes. Les champs de cette table sont les suivants :

Nom de la table user db host

Identifiant Host Host Host

User Db Db

Password User

Champs de droits Select_priv Select_priv Select_priv

Insert_priv Insert_priv Insert_priv

Update_priv Update_priv Update_priv

Delete_priv Delete_priv Delete_priv

Index_priv Index_priv Index_priv

Alter_priv Alter_priv Alter_priv

Create_priv Create_priv Create_priv

Drop_priv Drop_priv Drop_priv

Grant_priv Grant_priv Grant_priv

References_priv Reload_priv Shutdown_priv Process_priv File_priv

Lors de la seconde étape du contrôle d'accès (vérification de la requête), le serveur peut, suivant la requête, consulter aussi les tables tables_priv et columns_priv . Les champs de ces tables sont :

Nom de la table tables_priv columns_priv

Identifiant Host Host

Db Db

User User

Table_name Table_name

Column_name

Champs de droits Table_priv Column_priv

Column_priv

Autre champs Timestamp Timestamp

Grantor

Chaque table de droit contient des champs d'identification et des champs de droits.

Les champs d'identification déterminent quels utilisateurs correspondent à cette ligne dans la table. Par exemple, une ligne dans la table user avec les valeurs dans les colonnes Host et User de

'thomas.loc.gov' et 'bob' servira à identifier les connexions qui sont faites par l'utilisateur bob

depuis l'hôte thomas.loc.gov . De même, une ligne dans la table db avec les valeurs des colonnes Host , User et Db de 'thomas.loc.gov' , 'bob' et 'reports' sera utilisée lorsque l'utilisateur bob se connecte depuis l'hôte thomas.loc.gov pour accéder à la base reports . Les tables tables_priv et columns_priv contiennent en plus des champs indiquant les tables et combinaisons tables et colonnes auxquelles les lignes s'appliquent.

Pour les contrôles d'accès, les comparaisons de nom d'hôte avec la colonne Host sont insensibles

à la casse. Les colonnes User , Password , Db et Table_name sont sensibles à la casse. Les valeurs de la colonne Column_name sont insensibles à la casse pour les versions de MySQL 3.22.12 et plus récent.

Les champs de droits indiquent si le droit est donné, c'est à dire si l'opération indiquée peut être exécuté. Le serveur combine les informations dans différentes tables pour former une description complète de l'utilisateur. Les règles utilisées sont décrites dans Contrôle d'accès, étape 2 : vérification des requêtes .

Les champs d'identification sont des chaînes, déclarées comme suit. La valeur par défaut de chacun des champs est la chaîne vide.

Nom du champs Type Notes

Host CHAR(60)

User CHAR(16)

Password CHAR(16)

Db CHAR(64) ( CHAR(60) pour les tables tables_priv et columns_priv )

Table_name CHAR(60)

Column_name CHAR(60)

Dans les tables user , db et host , tous les champs de droits sont déclarés avec le type

ENUM('N','Y') : il peuvent prendre tous les valeurs de 'N' (non) ou 'Y' (oui, YES), et la valeur par défaut est 'N' .

Dans les tables tables_priv et columns_priv , les champs de droits sont déclarés comme des champs de type SET :

Nom de la table Nom du

champs Valeurs possibles

tables_priv Table_priv

'Select', 'Insert', 'Update', 'Delete', 'Create', 'Drop', 'Grant', 'References', 'Index', 'Alter'

tables_priv Column_priv 'Select', 'Insert', 'Update', 'References' columns_priv Column_priv 'Select', 'Insert', 'Update', 'References'

En bref, le serveur utilise les tables de droits comme ceci :

La table user détermine si le serveur accepte ou rejette la connexion. Pour les connexions acceptées, tous les privilèges donnés dans la table user indiquent des privilèges globaux. Ces droits d'appliquent à toutes les bases du serveur.

Les tables db et host sont utilisées conjointement :

Les champs d'identification de la table db déterminent quels utilisateurs peuvent accéder à quelles bases, depuis quel hôte. Les champs de droits indiquent alors les opérations permises.

La table host est utilisée comme extension de la table db lorsque vous voulez qu'une ligne de la table db s'applique à plusieurs hôtes. Par exemple, si vous voulez qu'un utilisateur soit capable d'utiliser une base depuis plusieurs hôtes dans votre réseau, laissez la colonne Host vide dans la table db , Ce mécanisme est décrit en détails dans Contrôle d'accès, étape 2 : vérification des requêtes .

♦ •

Les tables tables_priv et columns_priv sont similaires à la table db , mais sont plus atomiques : elle s'appliquent au niveau des tables et des colonnes, plutôt qu'au niveau des bases.