Serverbeveiliging hangt voornamelijk af van hoe correct u toegangsrechten voor objecten kunt configureren. Als u een gebruiker overmatige machtigingen geeft, kan dit veel problemen veroorzaken. Nee, een gebruiker zal uw fouten niet gebruiken. In plaats daarvan zal elke hacker of ik dit doen. In dit geval kunt u uw tabellen met gegevens of de hele database vergeten.
Om de een of andere reden is de beveiliging van de database bescherming van buitenaf, zoals een hacker. Dit gebeurt echter zeer zelden. Ik ben een programmeur in een groot bedrijf en een beheerder denkt niet eens aan het beschermen van de serverpoorten, waar alles open is. Er is een heleboel databases, programma's en zelfs een FTP-server op een enkele server en deze is de afgelopen 5 jaar nooit gehackt. Gelukkig heb ik de beheerder overgehaald om de WEB-server op een aparte hardware te installeren. Anders, als iemand het IP-adres van onze hoofdserver zou weten, zou elke slacker het kunnen hacken. Noch de database, noch Windows is al jaren gepatcht.
Er ontstaan echter dagelijks interne problemen door een onjuist beveiligingsbeleid. Alle gebruikers loggen in met beheerdersrechten en kunnen alles maken wat ze willen. Dit is een echt probleem omdat de buitensporige machtigingen slackers in staat stellen hun volledige analfabetisme te tonen. Daarom houden we rekening met beveiliging, ongeacht waar de dreiging vandaan komt:van een hacker of van een gebruiker.
In dit artikel gaan we in op alle noodzakelijke basisprincipes van beveiligingsbescherming tegen zowel hackers als gebruikers. Ik koos MS SQL Server als voorbeeld omdat het alles bevat wat beschikbaar is in andere databases (Oracle, MySQL, etc.) en extra beveiligingsbeheermogelijkheden heeft. Iemand zou kunnen denken dat MS hierdoor steiler wordt. Soms kunnen extra functies echter buitensporig zijn en problemen veroorzaken.
Serverrollen
In Windows en andere besturingssystemen zijn er groepen en gebruikers om machtigingen te beheren. We kunnen gebruikers combineren in een groep en ze allemaal tegelijk rechten verlenen, wat veel eenvoudiger is dan rechten toewijzen aan elke gebruiker afzonderlijk. Voor deze doeleinden is er in databases het concept "rol".
Neem aan dat 100 gebruikers de machtigingen moeten hebben om gegevens uit een specifieke tabel te lezen. Het is een hele klus om elke gebruiker deze toestemming te geven. Het is veel eenvoudiger om een rol aan te maken die mag lezen en vervolgens alle vereiste gebruikers eraan toe te voegen. Het resultaat is vergelijkbaar met groeperen.
In SQL Server zijn er twee soorten rollen:server en database. Serverrollen zijn vooraf gedefinieerd en kunnen niet worden gewijzigd.
Open de Security/Server role branch in Enterprise Manager zodat u rechts in het venster een lijst met beschikbare rollen kunt zien. De beschrijving definieert wat de gebruiker kan doen met de bijbehorende rol.
Serverrollen in MS SQL Server en het rolbeheervenster
Dubbelklik op de rij met rollen om een bestaande gebruiker aan een rol toe te voegen. In het venster dat verschijnt, kunt u gebruikers aan de rol toevoegen of verwijderen. Het tabblad Toestemming beschrijft in detail wat elke gebruiker kan doen.
Gebruikers
Om gebruikers te beheren, opent u de tak Beveiliging/Aanmeldingen in Enterprise Manager. In het rechterdeel ziet u een lijst met alle servergebruikers. Standaard wordt de toegang verleend aan domeinbeheerders en ingebouwde login-accounts zoals sa.
Om een nieuwe gebruiker toe te voegen, klikt u met de rechtermuisknop ergens in het lege rechtergedeelte van het venster en selecteert u Nieuwe login in het menu dat verschijnt. Selecteer helemaal bovenaan het venster een gebruikersnaam. Als u een bestaand domein of computergebruiker moet kiezen, klikt u op de (...) knop rechts van het invoerveld en ziet u het gebruikerszoekvak in het domein.
Een nieuwe gebruiker toevoegen
Hieronder kunt u het type authenticatie selecteren:Windows of SQL Server. Als u Windows selecteert, hoeft u geen wachtwoord op te geven omdat de server het van het systeem zal ophalen. U kunt echter schakelen tussen Toegang verlenen (toegang toestaan) of Toegang weigeren (verbieden). In het laatste geval wordt de gebruiker geregistreerd in de database, maar kan hij geen verbinding maken - het is verboden.
Als u SQL Server-authenticatie selecteert, moet u een wachtwoord instellen, omdat dit in dit geval wordt opgeslagen in de systeemtabellen van de databaseserver. Houd er rekening mee dat zelfs als alleen de Windows-authenticatie is opgegeven in de serverinstellingen, u SQL-serverrecords kunt maken, maar u kunt niet inloggen op het systeem met deze records.
Op het tabblad Serverrollen kunt u specificeren welke serverrol aan een gebruiker wordt toegekend. Daarom kunt u, zelfs in de aanmaakfase, gebruikers toevoegen aan de benodigde rollen.
Gebruikerstoegang tot databases
Geef op het tabblad Databasetoegang de databases op waarmee de gebruiker kan werken. Hier is het venster in twee delen verdeeld:in de bovenste helft kunt u de database selecteren waartoe de toegang is toegestaan, en in de onderste lijst kunt u de databaserol selecteren. Deze rol in de database definieert de gebruikersrechten. Aan één gebruiker kunnen meerdere rollen worden toegekend.
Maak een account qq aan, die toegang heeft tot de Northwind-database. Dit is een standaard testdatabase die is gemaakt bij het implementeren van de server.
Sla de wijzigingen op.
Open nu de tak Databases/Northwind/Users en bekijk de lijst met gebruikers die toegang hebben tot de geselecteerde database. Houd er rekening mee dat hier het qq-account is. Er is geen account in andere databases omdat toegang tot deze voor onze nieuwe gebruiker verboden is.
Databaserollen
Elke database kan zijn eigen rollen hebben, die de toegangsrechten voor objecten definiëren. Veel beheerders houden er niet van om zich met deze machtigingen bezig te houden. Zo installeren ze de ingebouwde standaard public, die bijna alles toestaat. Als er onvoldoende machtigingen zijn voor de openbare rol, voegt u eenvoudig een gebruiker toe aan de serverrol Systeembeheerder. In dit geval wordt de database kwetsbaar.
Elke gebruiker moet zijn eigen en noodzakelijke machtigingen krijgen. Wat niet is toegestaan, moet worden verboden. Rollen die al op de server bestaan, mogen niet worden gebruikt omdat hun machtigingen voor iedereen toegankelijk zijn. Het wordt aanbevolen om ze zelfs allemaal te verwijderen, vooral de openbare.
Een rol maken
Als u een nieuwe databaserol wilt maken, klikt u met de rechtermuisknop op de vertakking Databases/Databasenaam/Rollen. Selecteer in het menu dat verschijnt de optie Nieuwe databaserol. Het venster Eigenschappen databaserol – Nieuwe rol wordt geopend. Typ de naam van de rol in het bovenste deel van het venster.
Zo willen we een rol creëren voor accountants. Typ hiervoor Buh in het veld Naam.
Een databaserol maken
Selecteer hieronder een roltype, bijvoorbeeld een standaard standaardtype. In het midden van het venster staat een lijst met gebruikers die aan de rol worden toegevoegd. Tot nu toe is de lijst leeg. Als we echter op Toevoegen klikken, voegen we gebruikers toe aan het eerder aangemaakte qq-account. Er is niets anders te doen in de fase van het creëren van een rol. Sla de wijzigingen op door op OK te klikken.
Toegangsrechten
Nu gaan we kijken hoe we machtigingen kunnen instellen. Dubbelklik op de gemaakte Buh-rol om het venster voor bewerking te openen. Houd er rekening mee dat de knop Toestemming nu beschikbaar is. Alleen wanneer de rol is geregistreerd in de database, kunnen we de rechten ervan wijzigen. Klik op deze knop om het venster Eigenschappen databaserol te openen.
Toegangsrechten voor rollen instellen
Boven aan het venster staat een lijst met databaserollen, zodat u er snel tussen kunt schakelen. Nu is de Buh-rol geselecteerd. In het midden van het venster is er een groot raster met de volgende kolommen:
- Object – namen van objecten;
- Eigenaar – een eigenaar van een object;
- SELECT – toestemming om gegevens te bekijken of de SELECT-instructie uit te voeren. Het is alleen beschikbaar voor tabellen en weergaven;
- INSERT – toestemming om gegevens toe te voegen of het INSERT-statement uit te voeren. Het is alleen beschikbaar voor tabellen en weergaven;
- UPDATE – toestemming om gegevens te wijzigen of de UPDATE-instructie uit te voeren. Het is alleen beschikbaar voor tabellen en weergaven;
- DELETE-machtiging om gegevens te verwijderen of de DELETE-instructie uit te voeren. Het is alleen beschikbaar voor tabellen en weergaven;
- EXEC – toestemming om opgeslagen procedures en functies uit te voeren. Het is alleen beschikbaar voor opgeslagen procedures en functies;
- DRI (declaratieve referentiële integriteit). Het is alleen beschikbaar voor tabellen, weergaven en functies.
Er zijn geen rechten voor de nieuwe rol. Om een tabel te kunnen zien, bijvoorbeeld Categorieën, vinkt u het vakje aan op het snijpunt van de Categorieën-rij en de SELECT-kolom. U ziet een groen vinkje in het vakje, wat een toestemming betekent. De tweede klik verandert het vinkje in het rode kruisteken en betekent verbod. Dit kan nodig zijn als u de gebruiker een machtiging verleent en deze toevoegt aan een andere rol, waarbij toegang tot de geselecteerde actie is toegestaan. De derde klik verwijdert alle machtigingen voor de actie en laat het vak leeg. Dit betekent dat er geen toegang is; het kan echter worden gedelegeerd als de gebruiker wordt toegevoegd aan een andere rol met de machtigingen voor het object of als de machtigingen expliciet zijn opgegeven.
Als u een rij selecteert met het object van de tabel of weergave, wordt de knop Kolommen onder in het venster beschikbaar. Stel dat u de tabel hebt geselecteerd en op deze knop hebt geklikt. Het venster wordt geopend waarin u machtigingen kunt instellen voor afzonderlijke tabelkolommen.
Kolomrechten instellen
Dit is inderdaad een grote mogelijkheid omdat sommige kolommen die verantwoordelijk zijn voor de database-integriteit niet door gebruikers of hackers mogen worden gewijzigd. Het is beter om de UPDATE- of SELECT-bewerkingen (indien mogelijk) voor deze kolommen te verbieden.
Individualisme
Rollen zijn handig om te gebruiken wanneer het nodig is om vergelijkbare gebruikers te combineren. Zo moeten tal van accountants toegang krijgen tot financiële tabellen. Het verlenen van machtigingen aan elke accountant is tijdrovend. Het is veel gemakkelijker om een rol voor de accountant aan te maken, er machtigingen aan te verlenen en vervolgens alle boekhoudaccounts aan deze rol toe te voegen.
Er zijn echter gevallen waarin machtigingen uniek moeten zijn voor een gebruiker, of dat naast de machtigingen die door de rol worden verleend, aanvullende machtigingen moeten worden verleend. Zo moet een van de accountants toegang hebben tot tabellen van de personeelsafdeling. In dit geval is het beter om machtigingen rechtstreeks aan de accountant toe te voegen in plaats van een nieuwe rol aan te maken.
We hebben eerst de rollen verkend om eraan te wennen. In de meeste gevallen is er een apart account voor boekhouders, een apart account voor economen, enz. In dit geval maken de meeste mensen verbinding met de server via één account. Dus om te controleren wie wat doet, is onmogelijk. Het is beter om waar nodig individuele machtigingen te gebruiken, terwijl elke gebruiker een eigen account moet hebben.
Machtigingen op tafels
Laten we eens kijken hoe we machtigingen kunnen verlenen voor bepaalde objecten, bijvoorbeeld voor tabellen.
Selecteer de tak Databases/Northwind/Tables in de objectstructuur. In het rechtergedeelte wordt een lijst met alle tabellen geopend. Klik met de rechtermuisknop op een tabel en selecteer Alle taken/Machtigingen beheren. Het venster Permission Properties wordt geopend, vergelijkbaar met het venster Database Role Properties met de lijst met gebruikers in plaats van de lijst met objecten. Het object is een tabel waarop we hebben geklikt en de naam wordt weergegeven in het vervolgkeuzemenu van het venster. Nu moeten we machtigingen voor dit object instellen voor verschillende gebruikers.
Toestemmingen instellen voor een tafel
De lijst met machtigingen is als volgt:bekijken, bijwerken, toevoegen, verwijderen, uitvoeren en beheren. Als u op de knop Kolommen klikt, wordt het venster geopend voor het instellen van machtigingen voor het object op het niveau van tabelvelden voor een bepaalde gebruiker.
Beelden
We hebben twee tafels. Een daarvan bewaart de lijst met werknemers, terwijl een andere tabel informatie bevat over het aantal gewerkte uren per maand en de ontvangen lonen (officiële en verborgen lonen).
Stel dat een belastingambtenaar naar u toe komt en vraagt om de lonen van arbeiders te tonen. Daarnaast vragen ze of je alle belastingen hebt betaald. Welke acties heb je nodig om aan jouw kant uit te voeren?
Het eerste voorstel kwam van de derde rij – om een nieuwe gebruiker aan te maken die tabellen mag lezen, inclusief een lijst met werknemers en salarissen. Vergeet daarnaast niet de kolom met het verborgen loon af te sluiten. Eigenlijk is de oplossing correct, maar absoluut ineffectief.
De beste optie is om een weergave te maken, een SQL-query die gegevens selecteert. In de database ziet het eruit als een tabel. U kunt SQL-gegevens selecteren met behulp van query's en machtigingen verlenen. Het blijkt dat de query tegen de query wordt uitgevoerd.
Voer de volgende query uit om een weergave te maken:
CREATE VIEW salary AS SELECT fields for a tax official FROM Employees, Wages WHERE joins
Nu is er een nieuw Wage-object in de tak Databases/Northwind/Views. Als u er met de rechtermuisknop op klikt en Alle taken/machtigingen beheren selecteert, wordt het venster voor het verlenen van machtigingen geopend. Stel een machtiging in voor de belastingambtenaar en sla deze op. Voer de volgende zoekopdracht uit om de inhoud van de weergave te bekijken:
SELECT * FROM salary
Zoals u kunt zien, is er toegang tot een eenvoudige tabel. De belastingambtenaar zal ook denken dat hij feitelijke gegevens ziet. In feite bevat deze zoekopdracht echter alleen de gegevens die we nodig hebben.
In het echte leven kan de belastingambtenaar niet zo gemakkelijk worden misleid omdat ze geen dwazen zijn. Dit voorbeeld laat echter zien dat de weergave een perfecte beveiligingsmethode kan zijn. We kunnen de gegevens weergeven die gebruikers nodig hebben en niets anders. Tegelijkertijd hebben we alle tools om de machtigingen voor de weergave te beheren zonder de toegangsrechten voor de tabellen te beïnvloeden.
Verschillende weergaven van dezelfde tabellen kunnen dus verschillende gegevens weergeven. Als u een extra kolom wilt weergeven, voegt u de weergaven toe aan de query. In dit geval is het niet nodig om de rechten te wijzigen.
Systeemweergaven
In elke database kunnen er automatisch systeemweergaven door de server worden gemaakt. Ik raad aan om geen toestemming aan hen te verlenen omdat ze wat aanvullende informatie kunnen tonen, wat een hacker kan helpen bij het instellen van machtigingen of gewoon om gegevens te vernietigen. De systeemweergaven beginnen met het voorvoegsel sys en Systeem wordt gespecificeerd in de kolom Type van de lijst.
Procedures en functies
Moderne databaseservers ondersteunen opgeslagen procedures en functies. Dit is een PL/SQL- of Transact-SQL-code, afhankelijk van de database die op de databaseserver wordt uitgevoerd. Met behulp van deze procedures kunnen we alle bewerkingen op de server uitvoeren of eenvoudig gegevens selecteren, zoals in de weergave. We kunnen machtigingen instellen voor elke procedure.
Bij het beoordelen van rollen hebben we de procedures al gezien in de lijst met objecten waarvoor u machtigingen kunt instellen en alleen de EXEC-kolom is beschikbaar in deze rijen omdat de procedures alleen kunnen worden uitgevoerd.
Opgeslagen procedures en functies worden opgeslagen in een bepaalde database. Om de procedures van de Northwind-database te zien, selecteert u de tak Databases/Northwind/Stored Procedures. Er zijn veel systeemprocedures waarvan de namen beginnen met het voorvoegsel dt_ en Systeem wordt gespecificeerd in de kolom Type. Het wordt aanbevolen om, indien mogelijk, geen toegang te verlenen tot deze procedures. U kunt functies zien in de vertakking Databases/Noordenwind/Door gebruiker gedefinieerde functie.
Om machtigingen voor procedures en functies te wijzigen, klikt u met de rechtermuisknop op de naam en selecteert u Alle taken/Beheer machtigingen in het menu. In het venster dat verschijnt, kunt u alleen de EXEC-kolom voor procedures en de EXEC- en DRI-kolommen voor functies wijzigen.
Toestemmingsbeleid
Sommige beheerders stellen machtigingen in op basis van de bestaande rol, bijvoorbeeld openbaar. Dit is niet waar, omdat er in deze rol mogelijk machtigingen zijn die gebruikers niet nodig hebben. Probeer dus een geheel nieuwe toestemming in te stellen.
Wat mij betreft, ik maak altijd een nieuwe rol aan en verleen een minimale set machtigingen. Als gebruikers om meer rechten vragen en ze zijn ook echt nodig, dan voeg ik meer rechten toe. Als u alles standaard toestaat, is er geen garantie dat in de toekomst onnodige en gevaarlijke rechten worden verwijderd.
Een ander probleem om minder rechten in te stellen is een gewoonte. Gebruikers kunnen wennen aan het feit dat er veel toestemmingen aan hen worden verleend en dan zal het verbod een ernstig schandaal veroorzaken. Niemand vindt het leuk als hun rechten worden geschonden.
Tabellen/Databases
Databases slaan hun instellingen en verborgen eigenschappen op in systeemtabellen en databases. Ze verschillen niet van andere database-objecten en er kunnen machtigingen voor worden ingesteld. Geef gebruikers in geen geval toegang tot deze tabellen zonder speciale noodzaak.
In SQL Server worden belangrijke systeemgegevens opgeslagen in de master- en msdb-databases. Deze databases moeten dus worden beschermd. In Oracle bestaat elke database als een afzonderlijk object en worden systeemtabellen samen met die van de gebruikers opgeslagen.
Bijna alle databaseservers bieden de mogelijkheid om testdatabases te installeren die kunnen worden gebruikt om het systeem te leren of te testen. Als je ze hebt, verwijder ze dan - omdat een openbare toegang tot deze databases is ingesteld. Als een hacker namen of eigenschappen kent van een bestaand object in het systeem, zal dit hun taak aanzienlijk vereenvoudigen.
Wanneer u verbinding maakt met een testdatabase, kunt u enkele opdrachten op de server uitvoeren en het besturingssysteem of een werkende database beschadigen. Er mogen geen extra dingen in het systeem staan. Bovendien hebben dergelijke tabellen/databases behoorlijk hoge rechten, zelfs voor een gast.
Samenvatting
Ondanks het feit dat we MS SQL Server als voorbeeld hebben gebruikt, bestaan de concepten van machtigingen, rollen en authenticatie in alle databases.
Als u alle regels kent die we hebben overwogen, hoeft u alleen maar de eigenaardigheden van hun gebruik in uw database te onderzoeken.