Maison  >  Article  >  interface Web  >  Comment gérer l'accès refusé à la base de données MySQL

Comment gérer l'accès refusé à la base de données MySQL

php中世界最好的语言
php中世界最好的语言original
2018-05-25 11:28:015733parcourir

Cette fois, je vais vous montrer comment gérer un accès refusé à la base de données MySQL et quelles sont les précautions à prendre pour gérer un accès refusé à la base de données MySQL. Ce qui suit est un cas pratique. , jetons un coup d'oeil.

Utilisez WordPress pour créer le blog et la base de données utilise MySQL. Pour faciliter le débogage, créez le compte my_account et autorisez-le à accéder à la base de données depuis n'importe quel hôte.

CRÉER UN UTILISATEUR `my_account`@'%' IDENTIFIÉ PAR 'my_password';Copier

Modifier la configuration correspondante de wp-config.php, notez que DB_HOST est défini sur 127.0.0.1.

define('DB_USER', 'my_account'); // 账号
define('DB_PASSWORD', 'my_password'); // 密码
define('DB_HOST', '127.0.0.1'); // 数据服务地址Copy

Déployé sur le serveur cloud, le navigateur local accède au blog, indiquant que l'accès à la base de données est refusé (il n'y a aucun problème pour se connecter localement aux données distantes), voici le journal des erreurs.

ERREUR 1045 (28000) : Accès refusé pour l'utilisateur 'mon_compte'@'localhost' (en utilisant le mot de passe : OUI)`Copie

Après un simple dépannage, le problème a été résolu, enregistré Voici ci-dessous les solutions et les raisons de l'erreur.

Solution

1. Solution 1 : Supprimer le compte anonyme dont le champ Host est localhost dans la table mysql.user (le nom du compte est vide).
2. Option 2 : Créez le compte my_account@localhost pour une connexion locale à la base de données.

L'auteur a adopté le premier plan.

Tout d'abord, confirmez s'il existe un compte anonyme dans la table mysql.user.

MariaDB [(none)]> SELECT User, Host from mysql.user WHERE Host = 'localhost' AND User = '';
+------+-----------+
| User | Host      |
+------+-----------+
|      | localhost |
+------+-----------+
1 row in set (0.00 sec)Copy

Ensuite, supprimez le compte anonyme correspondant et essayez de vous reconnecter avec succès.

MariaDB [(none)]> DROP USER ''@'localhost';
Query OK, 0 rows affected (0.00 sec)Copy

Analyse du problème

Pourquoi le compte anonyme provoque-t-il l'échec de la connexion à la base de données ?

Vous devez avoir une certaine compréhension de la création de compte MySQL et de la vérification de la connexion client.

Créer un compte MySQL

La syntaxe de base est la suivante :

CRÉER un nom de compte UTILISATEUR@hôte IDENTIFIÉ PAR mot de passe ; Copier

Notes : (ci-dessous, Utiliser Utilisateur pour faire référence au nom du compte et Hôte pour faire référence à l'hôte)

Hôte indique à partir de quel hôte le compte est autorisé à accéder à la base de données. Principalement utilisé pour les restrictions de sécurité, il peut s'agir du nom d'hôte, de l'adresse IP, du % (caractère générique)

L'utilisateur peut être répété, tant que l'hôte est différent ;

Lorsque l'hôte est défini sur %, cela signifie que la base de données peut être connectée à partir de n'importe quel hôte.

Par exemple, il existe deux comptes xiaoming, l'un permet de se connecter à la base de données depuis la machine locale, et l'autre permet de se connecter à la base de données depuis le 14.215.177.39.

MariaDB [(none)]> SELECT User, Host FROM mysql.user WHERE User = 'xiaoming';           
+---------+---------------+
| User    | Host          |
+---------+---------------+
| xiaoming | 14.215.177.39 |
| xiaoming | localhost     |
+---------+---------------+
2 rows in set (0.00 sec)Copy

Compte anonyme

est un compte dont l'utilisateur est vide et peut correspondre à n'importe quel nom d'utilisateur. La commande suivante crée un compte anonyme.

CRÉER UN UTILISATEUR ''@'localhost' IDENTIFIÉ PAR 'pwd3';Copier

Vérification d'identité

Lorsque le serveur de base de données reçoit la connexion client, il va d'abord Pour la vérification de l'identité, comparez les champs Utilisateur, Hôte et Mot de passe avec les enregistrements de la table mysql.user pour confirmer si le compte est légitime.

Voici une question : s'il y a plusieurs enregistrements correspondants dans la table mysql.user, quel enregistrement doit prévaloir ?

La réponse est « prioritaire ». Les règles générales sont les suivantes :

Tout d'abord, vérifiez le champ Hôte. Si plusieurs hôtes répondent aux critères, l'enregistrement avec le score de correspondance le plus élevé (adresse IP > % générique) est sélectionné.

Deuxièmement, vérifiez le champ Utilisateur. Si plusieurs utilisateurs répondent aux critères, l'enregistrement présentant le degré de correspondance le plus élevé est sélectionné. Les utilisateurs anonymes peuvent correspondre à n’importe quel utilisateur et ont donc le degré de correspondance le plus bas.

Exemple de correspondance de priorité

Par exemple, supposons que la base de données locale possède les deux comptes suivants (le champ Mot de passe n'est en fait pas du texte en clair).

+------------+-----------+-----------+
| User       | Host      | Password  |
+------------+-----------+-----------+
| my_account | %         | 123       |
|            | localhost | 456       |
+------------+-----------+-----------+Copy

Exécutez la commande suivante. Le compte que vous avez finalement connecté correspond au 2ème enregistrement. (Les lecteurs peuvent l'essayer par eux-mêmes. Si la connexion échoue lors de la saisie du mot de passe 123, mais réussit lors de la saisie du mot de passe 456)

mysql -u my_account -pCopy

Pourquoi ? Passez en revue les priorités correspondantes.

Tout d’abord, vérifiez le champ Hôte. localhost et % répondent tous aux exigences. Le degré de correspondance de localhost est supérieur à %, donc le deuxième enregistrement correspond.

Ensuite, vérifiez le champ Utilisateur. Le deuxième enregistrement est un compte anonyme et peut correspondre à n'importe quelle valeur d'utilisateur. Par conséquent, le deuxième enregistrement répond aux exigences.

Par conséquent, bien que le champ Hôte du compte mon_compte soit %, lorsque vous vous connectez localement à la base de données (l'hôte où se trouve la base de données), du fait de l'existence des règles ci-dessus, MySQL pensera que vous vous connectez avec un compte anonyme.

Le mot de passe de mon_compte est différent de celui du compte anonyme, donc la vérification du mot de passe échoue et l'accès est refusé.

Je pense que vous maîtrisez la méthode après avoir lu le cas dans cet article. Pour des informations plus intéressantes, veuillez prêter attention aux autres articles connexes sur le site Web chinois de php !

Lecture recommandée :

Explication détaillée des étapes pour mettre en évidence le li sélectionné dans React

Le déploiement de node.js démarre s'exécutant en arrière-plan Explication détaillée des étapes permanentes

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn