sql >> Database >  >> RDS >> Mysql

Databasebeveiliging 101:beveiliging in open source-databases

Gegevensbeveiliging is een van de belangrijkste aspecten van het beheer van een database. Afhankelijk van de organisatiestructuur moet u, als u de productiedatabase beheert, controleren op ongeautoriseerde toegang en gebruik. Dit geldt ook voor de onderliggende host. In deze blog gaan we beveiliging in open source databases uitleggen.

Algemene beveiliging

Na het installeren van de databasesoftware, moeten we een aantal controles vooraf uitvoeren om de meest voorkomende beveiligingsfouten te voorkomen.

De algemene richtlijnen zijn als volgt:

  • Geef nooit iemand root/admin-toegang tot anderen! Dit is van cruciaal belang.

  • Leer hoe het privilegesysteem voor toegang tot de database werkt. Geef niet meer rechten dan nodig is. Verleen nooit privileges aan alle hosts.

  • Sla geen leesbare wachtwoorden op in uw database. Gebruik in plaats van SHA2() of een andere eenrichtings-hashfunctie en sla de hash-waarde op.

  • Gebruik geen standaardpoorten en zorg ervoor dat de gekozen poort niet toegankelijk is vanaf een niet-vertrouwde host.

  • Zet de open source database achter een firewall. Dit beschermt je tegen ten minste 50% van alle soorten exploits in welke software dan ook.

Toegangscontrole en accountbeheer

Een van de primaire functies van de database is het authenticeren van een gebruiker die verbinding maakt vanaf een bepaalde host en het koppelen van die gebruiker aan privileges op een database. Om te bepalen welke gebruikers verbinding kunnen maken, kan aan elk account authenticatiegegevens, zoals een wachtwoord, worden toegewezen.
 

Gebruikersrollen 

Een databaserol is een verzameling van een willekeurig aantal rechten die aan een of meer gebruikers kunnen worden toegewezen. In moderne open source databases hebben de meeste gebruikers vooraf gedefinieerde rollen.

Wachtwoordbeheer 

Toegang tot de database vereist dat hun gebruikers zichzelf authenticeren met een gebruikersnaam en wachtwoord. De database past dezelfde hashfunctie toe op het wachtwoord dat de gebruiker heeft ingevoerd en vergelijkt dit met de hash die in de database is opgeslagen. Als ze beide overeenkomen, wordt toestemming verleend. Het verlopen van het wachtwoord is vereist voor alle databasegebruikers om wachtwoorden periodiek te wijzigen. En het genereren van willekeurige wachtwoorden is vereist voor expliciete, door de beheerder gespecificeerde letterlijke wachtwoorden. Een belangrijk ding om te controleren is het volgen van een verkeerd wachtwoord/verificatiefout. Het wordt aanbevolen om tijdelijke accountvergrendeling in te schakelen na te veel opeenvolgende mislukte aanmeldingsfouten met een onjuist wachtwoord.

Omgaan met verlopen wachtwoorden

Zodra het wachtwoord is verlopen, verbreekt de databaseserver een clientverbinding met een verlopen wachtwoord.

Voorbeeld 
[[email protected] vagrant]# mysql -u severalnies -p
Password: ******
ERROR 1862 (HY000): Your password has expired. To log in you must
change it using a client that supports expired passwords.

 

De bronnen beperken 

Beperk het gebruik van databaseserverbronnen door een klant door het aantal gelijktijdige verbindingen te beperken dat door een gebruikersaccount kan worden gemaakt. We kunnen bijvoorbeeld het aantal zoekopdrachten dat een gebruiker per uur kan uitvoeren of het aantal keren dat een gebruiker verbinding kan maken met de server per uur beperken.

Versleutelde verbindingen 

Databases ondersteunen meestal versleutelde verbindingen tussen clients en de server met behulp van bepaalde beveiligingsprotocollen. Met SSL versleutelt het de verbindingen tussen clients en de server. Dit verandert de gegevens in een onleesbaar formaat over de netwerklaag en voorkomt afluisteren van het netwerk. Zodra we SSL op de database hebben ingeschakeld, begint het versleutelde verbindingen te ondersteunen en staan ​​niet-versleutelde verbindingen niet meer toe.

Beveiligingscomponenten en plug-ins

Beveiligingscomponenten zijn eenvoudig te integreren met de database. Mysql bevat bijvoorbeeld verschillende componenten en plug-ins die beveiligingsfuncties implementeren.

Verificatieplug-ins - Deze plug-ins verifiëren pogingen van clients om verbinding te maken met de MySQL-server. We kunnen eenvoudig integreren met onze databaseserver.

Wachtwoord-plug-in - Deze plug-in controleert of het huidige wachtwoord sterk is en weigert wachtwoorden die als zwak worden beschouwd.

Keyring-plug-in - Deze plug-in versleutelt tabelruimten. Deze encryptietechniek werkt op basis van roterende sleutelbestanden. Hier is een voorbeeld van hoe MySQL 8.0 te versleutelen.

Auditlogboek - Auditing is het proces van het bewaken en vastleggen van de activiteit op de databaseserver. Het wordt gebruikt om te loggen wie wat doet, b.v. databasebewerkingen door gebruikers, verbindingen of mislukte inlogpogingen. Als u een load balancer gebruikt om toegang te krijgen tot de database, moet u dat ook controleren. Standaard worden de auditlogbestanden opgeslagen in de mysql-gegevensmap.

Voorbeeldlogboeken 
20210306 02:30:06,centos14,root,localhost,519,1832,QUERY,,'select sleep(5)',0
20210306 02:30:08,centos14,s9smysqlchk,localhost,571,0,DISCONNECT,,,0
20210306 02:30:09,centos14,root,localhost,519,1867,QUERY,,'show schemas',0

Als u de auditlogbestanden op verschillende locaties wilt opslaan, kunt u deze parameter toevoegen aan uw configuratiebestand "server_audit_file_path".

Logboekbewaking - Logboekbewaking biedt het ops-team meer inzicht in de databaseomgeving, die bestaat uit de database-instances maar ook de load balancers. Het helpt bij het identificeren van afwijkingen, wanneer deze afwijkingen optreden en de frequentie waarmee ze voorkomen.

Plugin voor wachtwoordvalidatie

Het wachtwoord is als woorden, cijfers en tekenreeksen. Aan de database- en serverzijde waren de gebruikersnaam en het wachtwoord nodig voor bepaalde toegang. Als het wachtwoord bijvoorbeeld als leesbare waarde wordt geleverd, controleert de plug-in valid_password het wachtwoord aan de hand van het huidige wachtwoordbeleid en verwerpt het het wachtwoord als het zwak is.

Het valid_password_policy heeft drie waarden LOW, MEDIUM of STRONG. De waarde van LOW controleert alleen de wachtwoordlengte, MEDIUM-beleid voegt enkele voorwaarden toe en STRONG-beleid voegt de voorwaarde toe dat wachtwoordsubstrings die uit 4 of meer tekens bestaan, niet overeenkomen met woorden in een woordenboekbestand dat kan worden opgegeven door de variabele valid_password_dictionary_file te wijzigen.

LDAP-plug-in

LDAP-plug-in stelt databaseserver in staat verbindingen te accepteren van gebruikers die zijn gedefinieerd in LDAP-directory's. Bij LDAP-verificatie communiceren de plug-ins aan de client- en serverzijde het wachtwoord als leesbare tekst. Een veilige verbinding tussen de client en de server wordt aanbevolen om blootstelling aan wachtwoorden te voorkomen. Als de gebruikersnaam en hostnaam van de client niet overeenkomen, zal de database de verbinding weigeren.

 De LDAP-configuratie is heel eenvoudig in ClusterControl. In dit bericht hebben we de configuratiestappen uitgelegd met behulp van ClusterControl.

Databaseback-ups beveiligen 

Gegevensback-ups zijn belangrijk als het gaat om het beschermen van uw gegevens. Het is nog belangrijker om ervoor te zorgen dat uw back-ups veilig worden bewaard en beschikbaar zijn voor sneller herstel. ClusterControl biedt uitgebreide ondersteuning voor het back-upbeheerproces, inclusief het versleutelen van de back-upbestanden met behulp van het AES-256-coderingsalgoritme voordat ze offsite worden verzonden.

VPN-toegang tot het jumphost-netwerk 

Om toegang te krijgen tot de open source-database van het privénetwerk vanuit een lokale omgeving, is de beste methode om VPN te gebruiken. VPN biedt gebruikers privacy en veiligheid om een ​​privénetwerkverbinding op te bouwen via een openbaar netwerk. Een jumphost is een intermediaire host of een SSH-gateway om toegang te krijgen tot externe netwerkservers. Jump-server fungeert als een tussenpersoon om beide uiteinden met elkaar te verbinden, waardoor het een "jump"-host wordt voor toegang tot de andere kant. Dit is een van de populaire manieren om de server van de buitenwereld te beveiligen. We kunnen SSH-tunneling gebruiken om op een veilige manier toegang te krijgen tot een extern netwerk, wat minder inspanning kost dan het configureren van een VPN-server.

Databasetoegangsbeheer via Jump-host

Om veiliger toegang te krijgen tot productiedatabaseservers, is een speciale jumpserver vereist. Deze dedicated jump server geeft toegang tot een privé netwerk vanaf een extern of publiek netwerk, zoals het internet. Het biedt een getrapte benadering voor elke gebruiker om uw privénetwerk te bereiken, het minimaliseert de kans op een mogelijke serveraanval.

Hoe kunnen we dit bereiken?

Het beste is om een ​​jumpserver in te stellen om verbinding te maken met uw databases vanaf een Linux-machine, ook al bevindt de DB-instantie zich op een particulier netwerk. Volg na het maken van de Jump-host de onderstaande richtlijnen,

  • Beperk de openbaarheid van uw databases met privésubnetten.

  • Beperk de internetgateway in routetabellen.

  • Maak een nieuwe VPC of voeg uw jumphost toe aan dezelfde VPC als uw database-instantie. Voeg vervolgens een internetgateway toe aan uw jumpserver met openbare subnetten.

  • Sta alleen specifieke databasepoorten toe voor de vereiste IP's.

Dan kunnen we SSH-tunneling maken om op een veilige manier toegang te krijgen tot een databaseserver.

SELinux

SELinux is een set kernelmodificaties en tools voor gebruikersruimte en het heeft enkele beleidsmodules. De beleidsmodules zijn SELinux-contexten om regels te definiëren voor hoe processen, bestanden, poorten en andere systeemobjecten met elkaar omgaan. Interactie tussen systeemobjecten is alleen toegestaan ​​als een beleidsregel dit toestaat.

Systeemgebruikers zullen zich grotendeels niet bewust zijn van SELinux. Alleen systeembeheerders hoeven te overwegen hoe streng een beleid moet worden geïmplementeerd voor hun serveromgeving. Dit detail geeft de SELinux-kernel volledige, gedetailleerde controle over het hele systeem.


  1. converteer datumstring naar mysql datetime-veld

  2. Hoe maak ik een nieuwe database aan na de eerste installatie van Oracle database 11g Express Edition?

  3. Queryresultaten retourneren als een door komma's gescheiden lijst in SQL Server - STRING_AGG()

  4. Limiet voor bestandsgrootte importeren in PHPMyAdmin