sql >> Databáze >  >> RDS >> Mysql

Přístup odepřen uživateli 'test'@'ip' (pomocí hesla:ANO)

"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 .



  1. vrátí jednu hodnotu z databáze pomocí mysql php pdo

  2. 5 neobvyklých tipů pro Microsoft Access pro rok 2020

  3. Jak monitorovat sdružování připojení pro .NET MySQL Data Connector ve službě IIS

  4. SQL Server – Odeberte všechny netisknutelné znaky ASCII