"Přístup odepřen pro uživatele 'test'@'ip'(pomocí hesla:YES)" je chyba MySQL.
To znamená, že na úrovni sítě vše funguje , protože má být odepřen přístup jako danému uživateli , server musel rozumět, jako kterého uživatele se pokoušíte připojit . Takže síť, firewall, směrování a tak dále a tak dále musí všechny fungovat; server musí poslouchat atd..
Problém spočívá „prostě“ v ověření .
Zkuste se lokálně připojit k databázi (pro přepsání ověřování) a prohlédněte si tabulku oprávnění:
USE mysql;
SELECT User, Host, Password from user WHERE User = 'test';
a nezapomeňte, že řádek, který vás zajímá, je ten, který uvádí IP (protože chybová zpráva určuje IP a ne název hostitele – v takovém případě se mohlo jednat o problém s DNS; název hostitele je název hostitele, o kterém se server domnívá, že přicházíte , nikoli název hostitele, ze kterého skutečně přicházíte).
Shoda uživatel/hostitel jde od přesněji méně konkrétní . Takže pokud jste již měli:
user host password
test 1.2.3.4 foo
a běžel,
GRANT... TO [email protected]'%' ... PASSWORD bar
...tento grant by fungoval odkudkoli kromě 1.2.3.4, kde heslo zůstane 'foo'.
Z manuálu (odkaz výše):
Možná budete nuceni to udělat
USE mysql;
DELETE FROM user WHERE User = 'test';
GRANT ALL PRIVILEGES ON database.* TO 'test'@'%' WITH GRANT OPTION;
FLUSH PRIVILEGES;
abyste zajistili, že v tabulce grantů nebudou žádné falešné řádky odkazující na uživatele 'test'.
(Také si myslím, že GRANT by měl být
GRANT ALL PRIVILEGES ON databasename.*
)
Bezpečnostní pochybnost (nesouvisející s odpovědí)
Výše uvedený manuál říká:Specificita doslovné IP adresy není ovlivněna tím, zda má síťovou masku, takže 192.168.1.13 a 192.168.1.0/255.255.255.0 jsou považovány za stejně specifické .
Nyní na první pohled 127.0.0.1/0.0.0.0
se zdá velmi specifické (a neškodné) pro localhost . Síťová maska, pokud se nepletu, zajišťuje, že je ekvivalentní %
, kromě toho, že je neuvěřitelně konkrétní a spustí se jako první . Proto
test bar %
test localfoo 127.0.0.1/0.0.0.0
znamená, že heslo pro test
odkudkoli to vůbec není "bar", ale je to "localfoo".
Nikdo by takový grant omylem nevložil, ale je tu chyba a omyl .