MariaDB prek VPN: kateri user@host vidi strežnik?
Račun se izbere po uporabniku in gostitelju skupaj. Poiščite vir, ki ga je strežnik videl, preberite CURRENT_USER() in nato popravite tisto vrstico, ne dovoljenja.
Vnesite isto uporabniško ime po dveh različnih poteh in MariaDB vas lahko overi kot dva različna računa. Računi so vezani na uporabnika in gostitelja skupaj, zato sta 'reporter'@'localhost' in 'reporter'@'10.90.0.23' ločeni vrstici z ločenima gesloma in ločenimi dovoljenji. Prek VPN ni zanimivo vprašanje, katero ime je uporabnik vnesel, ampak kateri izvorni naslov je strežnik videl.
Ugotovite vir, ki ga strežnik resnično vidi
Delajte vzvratno od gostitelja podatkovne baze, ne od prenosnika. Naslov, za katerega odjemalec misli, da ga ima, je le ena od več možnosti:
| Path | Source MariaDB sees |
|---|---|
| Routed tunnel, no translation | The client's inner VPN address |
| Gateway source translation | The gateway's translated address |
| SSH local forward | The SSH server's address |
| Public exit, no tunnel | Whatever the ISP handed out |
Za odločitev uporabite dokaze na strani strežnika. Dnevnik povezav, seznam aktivnih sej ali začasen vnos v splošnem dnevniku pokažejo naslov, ki ga je strežnik sprejel. Javni IP prenosnika iz brskalnika je drugo dejstvo in pogosto zavajajoče.
Ujemite račun, ki ga je izbrala MariaDB
Izbira računa sledi dokumentiranemu vrstnemu redu in ne združitvi dovoljenj. Natančno ujemanje gostitelja ima prednost pred nadomestnim znakom, vrstice anonimnega uporabnika pa sodelujejo pri ujemanju na načine, ki presenetijo ljudi, ki domnevajo, da odloča samo ime. Strežnik izbere eno vrstico; ne združi privilegijev vsake istoimenske vrstice. Enkratno branje referenčne dokumentacije je vredno več kot popoldne preizkušanja ugibanj.
To pomeni, da dodajanje dovoljenja na 'reporter'@'%' morda ne spremeni ničesar, če se je seja overila kot 'reporter'@'10.90.0.23'. Popravek mora pristati na vrstici, ki je bila izbrana, zato identifikacija računa pride pred urejanjem dovoljenj.
Preberite račun, ki ga seja dejansko uporablja
SELECT USER(), CURRENT_USER();
SHOW GRANTS;
CURRENT_USER() imenuje račun, ki je overil sejo; USER() poroča, kaj je odjemalec zahteval, in se lahko razlikuje. Izvajajte jih kot običajne poizvedbe najvišje ravni, ne iz shranjene rutine s kontekstom določevalca, sicer bodo odgovori opisali lastnika rutine namesto vaše seje.
Neuspešna prijava ne more izvesti ničesar od tega in to je primer, ko mora skrbnik pregledati definicije računov in dokaze o povezavi strežnika. Načrtujte to: oseba, ki razhroščuje zavrnjeno prijavo, običajno nima seje SQL za poizvedovanje.
Ločite dosegljivost od overjanja
Besedilo napake vam pove, v katerem sloju ste. Zavrnjena povezava ali potekla časovna omejitev pomeni, da odjemalec nikoli ni dosegel poslušalca, zato račun in njegovo geslo še nista vprašljiva. Odgovor o zavrnjenem dostopu pomeni, da je strežnik odgovoril, kar dokazuje dosegljivost in kaže na račun, ujemanje gostitelja ali poverilnico.
Omrežni pogoji so svoj seznam: poslušalec, vezan na predvideni naslov in ne le na loopback, dovoljen promet do konfiguriranih vrat in povratna pot za odgovor. Vsak lahko odpove neodvisno, delujoč tunel pa ne pomeni nobenega od njih. Poslušalec na loopbacku sprejema lokalne povezave in zavrača vsako oddaljeno, kar ustvari zavrnjeno povezavo, ki je videti kot blokada požarnega zidu.
Preverite naslov vezave, preden odprete zahtevek pri omrežni ekipi. ss -lntp na gostitelju podatkovne baze pokaže, kateri naslov in vrata dejansko poslušajo, in ta ena vrstica izključi celo kategorijo ugibanj.
Popravite ozko, nato preizkusite obe smeri
Ustvarite predvideni račun, kvalificiran z gostiteljem, po odobrenem postopku organizacije, s poverilnico iz podprtega skladišča in ne s skupno, prilepljeno v zahtevek. Dodelite samo operacije s shemo, ki jih naloga potrebuje. Pretvorba neuspešne oddaljene prijave v root račun, politiko dodelitve vsega ali splošnega nadomestnega gostitelja naredi, da test uspe, in odstrani nadzor, ki ste ga preizkušali. Dovoljenje, dodano v naglici, je tisto, ki ga kasneje nihče ne odstrani.
Znova preizkusite s svežo sejo po predvideni poti in nato preverite negativne primere. Pot, ki bi morala biti blokirana, mora ostati blokirana, operacija, ki ni bila dodeljena, pa mora ostati zavrnjena. Ta dva preverjanja ločita popravljen račun od razširjenega.
Nazadnje zabeležite opaženi izvorni naslov in ime računa skupaj. Tunel zagotavlja dosegljivost; MariaDB še vedno izbere in avtorizira svoj račun, naslednja oseba pa potrebuje obe dejstvi, da reproducira vaš rezultat.