Kažkas siūlo duoti klientui PostgreSQL prisijungimą, kad išlaidų prašymas keliautų užšifruotas nuo pradžios iki pabaigos. Duomenų bazės administratoriui reikia tikros SQL sesijos, o kažkas kitas vietoj to siūlo žiniatinklio formą. Abu pasiūlymai sprendžia ne tą problemą, nes nė vienas neprasidėjo nuo operacijos, kurią klientas iš tikrųjų atlieka. Pereikite tris sprendimus iš eilės ir klausimas, ar TLS gali pakeisti VPN, atsakys pats.

Pradėkite nuo operacijos, kurios reikia klientui

Užrašykite, ką klientas turi pasiekti. Prašymo pateikimas, vienos ataskaitos eilutės skaitymas ir momentinės užklausos vykdymas yra trys skirtingos operacijos su trimis skirtingais rizikos profiliais.

Tada užrašykite, kas teikia užklausą. Klientas, pagalbos agentas ir administratorius nėra pakeičiami, net kai jie liečia tą pačią lentelę. Skirtumas nulemia, kiek užklausų kalbos klientas apskritai turėtų matyti.

Atsakymų pora nulemia sąsają. Visa kita yra įgyvendinimas, o dauguma ginčų dėl šifravimo iš tikrųjų yra ginčai dėl to, kuri sąsaja buvo pasirinkta.

Trys kontrolės, trys sprendimai

Autentifikuotas TLS apsaugo ryšį ir nulemia, kurie TLS tapatumai priimami. Tinklo prieiga nulemia, kurie šaltiniai apskritai gali pasiekti klausytoją. Duomenų bazės autorizacija nulemia, kuriuos objektus ir veiksmus vaidmuo gali naudoti.

Nė viena iš trijų nepakeičia kitų, ką lentelė aiškiai parodo.

ControlWhat it decidesWhat it leaves open
Authenticated TLSConnection protection and which TLS identities are acceptedWhich tables a database user may touch
Restricted network entryWhich sources reach the listenerWhether an authenticated user should run a given statement
Database authorizationWhich objects and actions a role may useWhether the connection arrived by an approved path

Perskaitykite eilutę, kuria remiatės, prieš pašalindami kitą. Dauguma šių projektų žlunga todėl, kad kontrolė buvo numatyta, o ne sukonfigūruota.

Tiesioginis SQL palieka duomenų bazės politiką atsakingą

Su patvirtintu tiesioginiu ryšiu išsaugokite ir paslaugos tapatybės patikrinimą, ir numatytą prieigos politiką. Įjungus TLS, užšifruoti ryšiai tampa prieinami; jis neatmeta neužšifruotų, nebent prieigos konfigūracija to reikalauja per hostssl įrašus.

Šį skirtumą verta patikrinti veikiančioje konfigūracijoje, o ne šablone. Serveris, kuris siūlo TLS ir priima atvirą tekstą, nėra tas projektas, kurį dauguma mano įdiegę. Perskaitykite prieigos taisykles ir pažiūrėkite, kurie įrašai to tikrai reikalauja. Šis vienas patikrinimas atskiria serverį, galintį šifruoti, nuo tik užšifruoto.

Naudokite vaidmenis tik su teisėmis, kurių reikia darbui, ir peržiūrėkite nuosavybę, paveldėtą narystę ir plačiai suteiktus leidimus. PostgreSQL teisių modelis yra duomenų bazės objektų įgaliojimų riba.

VPN gali apriboti, kurie įrenginiai pasiekia paslaugą prieš duomenų bazės autentifikaciją, o prieigos vartai gali padaryti ką nors panašaus. Nė vienas jų nepanaikina poreikio prižiūrėti atskleistą komponentą, valdyti prisijungimo duomenis ir riboti išteklių naudojimą.

Kliento sertifikatai yra prisijungimo duomenys, o ne ACL

Kliento sertifikatas gali pridėti reikalavimą prisijungimo metu. Nustatymas clientcert gali reikalauti patikimo sertifikato ir griežtesniu režimu ryšio tarp sertifikato pavadinimo ir duomenų bazės naudotojo.

Tai stipresni prisijungimo duomenys. Tai nėra autorizacijos sąrašas ir nepadaro serverio nematomo, nes ryšį priimantis komponentas vis dar apdoroja tinklo srautą ir rankos paspaudimą. Sertifikato traktavimas kaip prieigos sąrašo palieka tikrąsias teises nepaliestas. Jis taip pat linkęs plėsti sertifikatų platinimą, o tai sukuria kitą problemą.

Stiprus sertifikatas, pririštas prie perteklinių teisių vaidmens, duoda gerai autentifikuotą administratorių. Patikrinkite vaidmenį prieš švęsdami sertifikatą.

Pasirinkite siauresnę sąsają, kai ji tinka

Išlaidų prašymui programos galinis taškas, kuris priima prašymą, taiko verslo taisykles ir grąžina to naudotojo leidžiamą rezultatą, atstovauja operacijai geriau nei bendra SQL paskyra.

Tada programa naudoja savo apribotą duomenų bazės tapatybę, o klientas niekada negauna užklausų kalbos kaip funkcijos. Tai mažesnis paviršius su mažiau būdų suklysti.

Tai dizaino variantas, o ne teiginys, kad programos kodas automatiškai saugesnis. Tas kodas turi autentifikuoti savo iškvietėjus, autorizuoti kiekvieną veiksmą ir validuoti savo įvestį, o jo pačios duomenų bazės teisės vis dar svarbios.

Tiesioginis SQL išlieka teisingas žmonėms ir įrankiams, kurių patvirtintas darbas to reikalauja. Apibrėžkite tą dizainą vaidmenimis, tinklo aprėptimi ir operacinėmis ribomis, o kitiems klientams palikite siauresnę sąsają. Dviejų grupių sumaišymas viename vaidmenyje yra vieta, kur prasideda ginčai.

Susiję straipsniai