Iemand stelt voor een klant een PostgreSQL-login te geven zodat een declaratie versleuteld van begin tot eind reist. Een databasebeheerder heeft een echte SQL-sessie nodig, en iemand anders stelt in plaats daarvan een webformulier voor. Beide voorstellen lossen het verkeerde probleem op, omdat geen van beide begon bij de handeling die de klant werkelijk uitvoert. Loop de drie beslissingen in volgorde door en de vraag of TLS een VPN kan vervangen beantwoordt zichzelf.

Begin bij de handeling die de klant nodig heeft

Schrijf op wat de klant moet bereiken. Een declaratie indienen, één regel van een rapport lezen en een ad-hocquery uitvoeren zijn drie verschillende handelingen met drie verschillende risicoprofielen.

Schrijf daarna op wie het verzoek doet. Een klant, een supportmedewerker en een beheerder zijn niet uitwisselbaar, ook niet als ze dezelfde tabel aanraken. Het verschil bepaalt hoeveel van de querytaal de klant ooit zou moeten zien.

Het antwoordenpaar bepaalt de interface. Alles daarna is implementatie, en de meeste discussies over versleuteling zijn eigenlijk discussies over welke interface is gekozen.

Drie controles, drie beslissingen

Geauthenticeerde TLS beschermt de verbinding en bepaalt welke TLS-identiteiten worden geaccepteerd. Netwerktoegang bepaalt welke bronnen de listener überhaupt kunnen bereiken. Databaseautorisatie bepaalt welke objecten en acties een rol mag gebruiken.

Geen van de drie vervangt de andere, wat de tabel expliciet maakt.

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

Lees de rij waarop u vertrouwt voordat u een andere verwijdert. De meeste van deze ontwerpen falen omdat een controle werd aangenomen in plaats van geconfigureerd.

Directe SQL laat het databasebeleid de baas blijven

Houd bij een goedgekeurde directe verbinding zowel de verificatie van de dienstidentiteit als het bedoelde toegangsbeleid. TLS aanzetten maakt versleutelde verbindingen beschikbaar; het weigert niet-versleutelde niet, tenzij de toegangsconfiguratie dat via hostssl-regels vereist.

Dat onderscheid is het waard om in de draaiende configuratie te controleren en niet in een sjabloon. Een server die TLS aanbiedt en platte tekst accepteert, is niet het ontwerp waarvan de meeste mensen denken dat ze het hebben uitgerold. Lees de toegangsregels en kijk welke regels het echt vereisen. Die ene controle scheidt een server die kan versleutelen van een alleen versleutelde.

Gebruik rollen met alleen de rechten die het werk nodig heeft, en beoordeel eigendom, geërfde lidmaatschap en breed toegekende machtigingen. Het PostgreSQL-rechtenmodel is de autoriteitsgrens voor databaseobjecten.

Een VPN kan beperken welke apparaten de dienst bereiken voordat databaseauthenticatie plaatsvindt, en een toegangsgateway kan iets soortgelijks doen. Geen van beide haalt de noodzaak weg om het blootgestelde onderdeel te onderhouden, inloggegevens te beheren en resourcegebruik te beperken.

Clientcertificaten zijn een inloggegeven, geen ACL

Een clientcertificaat kan bij het verbinden een eis toevoegen. De instelling clientcert kan een vertrouwd certificaat eisen en, in de strengere modus, een relatie tussen de certificaatnaam en de databasegebruiker.

Dat is een sterker inloggegeven. Het is geen autorisatielijst, en het maakt de server niet onzichtbaar, omdat het onderdeel dat de verbinding accepteert nog steeds netwerkverkeer en een handdruk verwerkt. Een certificaat als toegangslijst behandelen laat de werkelijke machtigingen ongemoeid. Het heeft ook de neiging de certificaatdistributie te verbreden, wat het volgende probleem schept.

Een sterk certificaat aan een te ruime rol levert een goed geauthenticeerde beheerder op. Controleer de rol voordat u het certificaat viert.

Kies de nauwere interface wanneer die past

Voor een declaratie vertegenwoordigt een applicatie-eindpunt dat de declaratie accepteert, de bedrijfsregels afdwingt en het toegestane resultaat van die gebruiker teruggeeft de handeling beter dan een algemeen SQL-account.

De applicatie gebruikt dan zijn eigen beperkte database-identiteit, en de klant krijgt nooit een querytaal als functie. Dat is een kleiner oppervlak met minder manieren om fout te gaan.

Dit is een ontwerpkeuze en niet de bewering dat applicatiecode automatisch veiliger is. Die code moet zijn aanroepers authenticeren, elke actie autoriseren en zijn invoer valideren, en de eigen databaserechten blijven van belang.

Directe SQL blijft juist voor mensen en hulpmiddelen wier goedgekeurde werk het vereist. Kwalificeer dat ontwerp met rollen, netwerkbereik en operationele grenzen, en laat de andere klanten de nauwere interface houden. De twee groepen in één rol mengen is waar de discussies beginnen.

Gerelateerde artikelen