sql >> Database teknologi >  >> RDS >> Mysql

Adgang nægtet for brugeren 'test'@'ip' (ved hjælp af adgangskode:JA)

"Adgang nægtet for brugeren 'test'@'ip'(bruger adgangskode:JA)" er en MySQL-fejl.

Det betyder, at alt fungerer på netværksniveau , fordi at blive nægtet adgang som en given bruger , serveren skal have forstået, hvilken bruger du forsøgte at oprette forbindelse som . Så netværk, firewall, routing og så videre og så videre skal alle fungere; serveren skal lytte osv..

Problemet ligger "simpelthen" i godkendelsen .

Prøv at oprette forbindelse lokalt til databasen (for at tilsidesætte godkendelsen) og inspicer privilegietabellen:

USE mysql;
SELECT User, Host, Password from user WHERE User = 'test';

og husk, at den linje, du er interesseret i, er den, der nævner IP-adressen (da fejlmeddelelsen angiver IP-adressen , og ikke værtsnavnet - i så fald kunne det have været et DNS-problem; værtsnavnet er værtsnavnet, som serveren tror, ​​du kommer fra , ikke det værtsnavn, du egentlig kommer fra).

Bruger/vært-matchningen går fra mere specifik til mindre specifik . Så hvis du allerede havde:

user      host     password
test      1.2.3.4  foo

og løb,

GRANT... TO [email protected]'%' ... PASSWORD bar

...dette tilskud ville fungere overalt undtagen 1.2.3.4, hvor adgangskoden forbliver 'foo'.

Fra manualen (link ovenfor):

Du kan blive tvunget til at gøre

USE mysql;
DELETE FROM user WHERE User = 'test';
GRANT ALL PRIVILEGES ON database.* TO 'test'@'%' WITH GRANT OPTION;
FLUSH PRIVILEGES;

for at sikre, at der ikke er nogen falske linjer i bevillingstabellen, der henviser til brugerens 'test'.

(Tilskuddet bør også være, synes jeg,

GRANT ALL PRIVILEGES ON databasename.*

)

Tvivl om sikkerhed (ikke relateret til svaret)

Manualen ovenfor siger:Specificiteten af ​​en bogstavelig IP-adresse påvirkes ikke af, om den har en netmaske, så 192.168.1.13 og 192.168.1.0/255.255.255.0 betragtes som lige specifik .

Nu ved første øjekast 127.0.0.1/0.0.0.0 virker meget specifik (og harmløs) for localhost . Netmasken sikrer, hvis jeg ikke tager fejl, at den svarer til % , bortset fra at den er utrolig specifik og vil køre først . Derfor

test     bar         %           
test     localfoo    127.0.0.1/0.0.0.0

betyder, at adgangskoden til test hvor som helst er det slet ikke "bar", men det er "localfoo".

Ingen ville indsætte en sådan bevilling ved en fejl, men der er fejl og fejl .



  1. PHP MySQL Google Chart JSON - Komplet eksempel

  2. Få RÆKKER som KOLONNER (SQL Server dynamisk PIVOT-forespørgsel)

  3. Oracle Database Security:Databaserevision

  4. Er MySQL index_length i bytes?