J'essaie de créer un utilisateur MySQL qui ne sera autorisé à se connecter à la base de données MySQL qu'à partir d'un nom d'hôte spécifique.
accorder tout sur db_name. * à 'user_name'@'appserver-lan.mydomain.com' identifié par 'some_passwd'
En vérifiant la table des utilisateurs sur la base de données mysql, je peux voir que l'utilisateur a été créé avec succès:
utiliser mysql; sélectionnez * de l'utilisateur où User = 'nom_utilisateur' et Host = 'appserver-lan.mydomain.com'
ou
afficher les subventions pour 'username'@'appserver-lan.mydomain.com'
Le nom d'hôte que j'ai spécifié est un alias d'un nom amazon-ec2 qui, lorsqu'il est résolu par les serveurs DNS AWS, se traduit par une adresse LAN:
[root @ db_server ~] # hôte appserver-lan.mydomain.com
appserver-lan.mydomain.com est un alias pour ec2-xxx-xxx-xxx-xxx.compute-1.amazonaws.com ec2-xxx-xxx-xxx-xxx.compute-1.amazonaws.com a l'adresse 10.xxx .xxx.xxx
Le problème est que lorsque j'essaie de me connecter à l'IP LAN de la base de données à partir de ce serveur d'applications, j'obtiens une erreur d'accès refusé, bien que le mot de passe soit correct. La chose étrange ici est que le nom d'hôte affiché dans l'erreur n'est pas le nom d'hôte que j'avais spécifié lors de la création de l'utilisateur:
ERREUR 1045 (28000): accès refusé pour l'utilisateur 'nom_utilisateur' @ ' appserver.mydomain.com ' (en utilisant le mot de passe: OUI)
Donc, ma question est: comment mysql détermine le nom d'hôte du client? Je crois qu'il ne le fait pas par une recherche DNS inversée, puisque j'ai vérifié et qu'il ne pointe pas sur "appserver.mydomain.com" ni sur "appserver-lan.mydomain.com". De plus, le serveur db n'a aucune entrée liée au serveur d'applications sur / etc / hosts.
En résumé, je suis à peu près sûr que c'est un problème de résolution de nom d'hôte, car l'octroi de privilèges pour l'hôte "%" ou l'IP LAN fonctionne très bien.
Des idées sur ce qui me manque?
la source
host -t PTR 10.1.2.3
?Réponses:
Il utilise une recherche DNS inversée. Il prend l'adresse IP du client et utilise tout enregistrement PTR renvoyé pour ce nom.
À mon avis, l'authentification basée sur le nom n'est pas très utile du tout, je vous suggère d'envisager d'utiliser des adresses IP à la place.
Consultez ce document sur la façon dont Mysql utilise DNS .
la source
MySQL fera une recherche DNS inversée sur l'adresse IP pour obtenir le nom d'hôte. Si vous utilisez AWS EC2, vous pouvez attribuer une adresse IP élastique à votre serveur (cela ne coûte rien de plus), puis demander à amazon de configurer un DNS inversé pour que l'adresse IP élastique accède à votre nom d'hôte.
Est-ce que votre serveur DB est également en EC2? Parce que si c'est le cas, il utilisera l'adresse IP privée de l'instance, sinon il utilisera l'adresse IP publique. Il semble que vous postez sur le serveur d'applications car c'est l'IP privée 10.XXX.XXX.XXX assignée à votre serveur, pas celle de l'ail.
Je ne sais pas quelle adresse IP serait utilisée si je communiquais avec une région différente, car je n'ai eu que des serveurs dans la même région.
la source
Je viens d'avoir un problème similaire, où le serveur mysql semblait mal effectuer des recherches DNS inversées.
Le problème que j'avais était que le serveur avait des autorisations pour 'user'@'1.2.3.4' ainsi que 'user'@'reverse.dns'. L'utilisateur avec juste l'adresse IP avait des autorisations minimales, mais le serveur mysql utilisait les autorisations de cet utilisateur plutôt que celui avec le nom d'hôte et renvoyait le message "Accès refusé pour l'utilisateur 'user'@'1.2.3.4'". La suppression de l'utilisateur avec l'adresse IP a résolu le problème et forcé le sereur à utiliser l'autre utilisateur sur le nom d'hôte.
la source
J'ai également vu des problèmes où les noms d'hôte IPV4 et IPV6 et les adresses IP ne correspondent pas, et où un nom d'hôte uniquement est utilisé pour l'autorisation utilisateur. Par exemple, lorsqu'il existe un DNS IPV6 inverse mais pas de DNS IPV6 direct.
la source