Iemand stel voor om ’n kliënt ’n PostgreSQL-aanmelding te gee sodat ’n onkosterekening van begin tot end versleutel reis. ’n Databasisadministrateur het ’n regte SQL-sessie nodig, en iemand anders stel eerder ’n webvorm voor. Beide voorstelle los die verkeerde probleem op, want nie een het by die werking begin wat die kliënt werklik uitvoer nie. Gaan die drie besluite in volgorde na, en die vraag of TLS ’n VPN kan vervang, antwoord homself.

Begin by die werking wat die kliënt nodig het

Skryf neer wat die kliënt moet bereik. Om ’n eis in te dien, een ry van ’n verslag te lees en ’n ad-hoc-navraag te hardloop, is drie verskillende werksaamhede met drie verskillende risikoprofiele.

Skryf dan neer wie die versoek maak. ’n Kliënt, ’n ondersteuningsagent en ’n administrateur is nie uitruilbaar nie, selfs wanneer hulle dieselfde tabel aanraak. Die verskil bepaal hoeveel van die navraagtaal die kliënt ooit moet sien.

Die paar antwoorde bepaal die koppelvlak. Alles daarna is implementering, en die meeste argumente oor versleuteling is eintlik argumente oor watter koppelvlak gekies is.

Drie kontroles, drie besluite

Gemagtigde TLS beskerm die verbinding en bepaal watter TLS-identiteite aanvaar word. Netwerktoegang bepaal watter bronne die luisteraar hoegenaamd kan bereik. Databasisgemagtiging bepaal watter objekte en aksies ’n rol mag gebruik.

Geen van die drie vervang die ander nie, wat die tabel duidelik maak.

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 die ry waarop jy staatmaak voordat jy ’n ander een verwyder. Die meeste van hierdie ontwerpe misluk omdat ’n kontrole aangeneem is eerder as opgestel.

Direkte SQL hou die databasbeleid in beheer

Met ’n goedgekeurde direkte verbinding, hou beide diensidentiteitverifikasie en die beoogde toegangsbeleid. Om TLS aan te skakel maak versleutelde verbindings beskikbaar; dit verwerp nie onversleutelde nie, tensy die toegangskonfigurasie dit deur hostssl-inskrywings sê.

Daardie onderskeid is die moeite werd om in die lopende konfigurasie na te gaan eerder as in ’n sjabloon. ’n Bediener wat TLS bied en gewone teks aanvaar, is nie die ontwerp wat die meeste mense dink hulle het ontplooi nie. Lees die toegangsreëls en kyk watter inskrywings dit werklik vereis. Daardie een kontrole skei ’n versleuteling-vermoënde bediener van ’n slegs-versleutelde een.

Gebruik rolle met net die bevoegdhede wat die werk nodig het, en hersien eienaarskap, geërfde lidmaatskap en wyd toegekende regte. Die PostgreSQL-bevoegdheidsmodel is die gesagsgrens vir databasisobjekte.

’n VPN kan beperk watter toestelle die diens bereik voordat databasis-verifikasie plaasvind, en ’n toegangsportaal kan iets soortgelyks doen. Nie een verwyder die noodsaak om die blootgestelde komponent te onderhou, geloofsbriewe te bestuur en hulpbronverbruik te beperk nie.

Kliëntsertifikate is ’n geloofsbrief, nie ’n ACL nie

’n Kliëntsertifikaat kan ’n vereiste by verbindingstyd byvoeg. Die clientcert-instelling kan ’n vertroude sertifikaat vereis en, in die strenger modus, ’n verhouding tussen die sertifikaatnaam en die databasisgebruiker.

Dit is ’n sterker geloofsbrief. Dit is nie ’n magtigingslys nie, en dit maak die bediener nie onsigbaar nie, want die komponent wat die verbinding aanvaar, verwerk steeds netwerkverkeer en ’n handdruk. Om ’n sertifikaat as ’n toegangslys te behandel, laat die werklike regte onaangeraak. Dit is ook geneig om die sertifikaatverspreiding te verbreed, wat die volgende probleem skep.

’n Sterk sertifikaat wat aan ’n oorbemagtigde rol gekoppel is, lewer ’n goed-verifieerde administrateur. Kyk na die rol voordat jy die sertifikaat vier.

Kies die smaller koppelvlak wanneer dit pas

Vir ’n onkosterekening verteenwoordig ’n toepassing-eindpunt wat die eis aanvaar, die besigheidsreëls afdwing en daardie gebruiker se toegelate resultaat terugstuur die werking beter as ’n algemene SQL-rekening.

Die toepassing gebruik dan sy eie beperkte databasisidentiteit, en die kliënt kry nooit ’n navraagtaal as ’n kenmerk nie. Dit is ’n kleiner oppervlak met minder maniere om verkeerd te wees.

Dit is ’n ontwerpopsie eerder as ’n bewering dat toepassingskode outomaties veiliger is. Daardie kode moet sy oproepers verifieer, elke aksie magtig en sy invoer valideer, en sy eie databasisregte bly steeds belangrik.

Direkte SQL bly korrek vir mense en gereedskap wie se goedgekeurde werk dit vereis. Kwalifiseer daardie ontwerp met rolle, netwerkomvang en operasionele perke, en laat die ander kliënte die smaller koppelvlak hou. Om die twee bevolkings in een rol te meng, is waar die argumente begin.

Verwante artikels