sql >> Database >  >> RDS >> Mysql

MySQL-server beveiligen

MySQL

MySQL is een open-source relationeel databasebeheersysteem. Deze handleiding laat u zien hoe u een MySQL-server kunt beveiligen en controleren. De naam is een combinatie van "My", de naam van de dochter van mede-oprichter Michael Widenius, en "SQL", de afkorting voor Structured Query Language.

Voordat u begint

  1. Zorg ervoor dat u de handleidingen Aan de slag en Uw server beveiligen hebt gevolgd. Zorg ervoor dat de hostnaam van de Linode is ingesteld.

    Controleer de hostnaam van uw Linode. De eerste opdracht moet uw korte hostnaam tonen en de tweede uw volledig gekwalificeerde domeinnaam (FQDN).

    hostname
    hostname -f
    
    Opmerking Als u een geregistreerde domeinnaam voor uw website heeft, voeg dan het domein toe aan de Linode-server waarop u de LAMP-stack wilt installeren. Als je geen geregistreerde domeinnaam hebt, vervang dan example.com met het IP-adres van de Linode-server in de volgende instructies.
  2. Werk uw systeem bij:

    sudo yum update
    
    Opmerking Deze handleiding is geschreven voor een niet-rootgebruiker. Opdrachten die verhoogde bevoegdheden vereisen, worden voorafgegaan door sudo . Als je niet bekend bent met de sudo commando, kunt u onze handleiding voor gebruikers en groepen raadplegen.
  3. Om MySQL te beveiligen en te controleren, moet u een Linux-server hebben met de MySQL Server diensten lopen. Zie MySQL installeren

    . voor informatie over het installeren van MySQL
    Opmerking De instructies in deze handleiding zijn gebaseerd op Ubuntu 18.04, hoewel alle stappen distributie-agnostisch zijn, met uitzondering van pakketnamen en pakketbeheerders.

Het veilige MySQL-installatieprogramma gebruiken

Het mysql-server-pakket is vooraf geconfigureerd met een hulpprogramma genaamd mysql_secure_installation dat wordt gebruikt om een ​​veilig startpunt voor de MySQL-server in te stellen, door anonieme gebruikers te verwijderen en u het gewenste wachtwoordsterktebeleid te laten specificeren.

mysql_secure_installation is een shellscript dat beschikbaar is op Unix-systemen en waarmee u de MySQL-installatie kunt beveiligen door:

  • stel een wachtwoord in voor root-accounts
  • verwijder root-accounts die toegankelijk zijn van buiten de lokale host
  • verwijder accounts van anonieme gebruikers
  • verwijder de testdatabase, die standaard toegankelijk is voor anonieme gebruikers

Start het beveiligingsproces door dit hulpprogramma onmiddellijk na het installeren van mysql-server uit te voeren.

  1. Roep het hulpprogramma op door de volgende opdracht uit te voeren:

     sudo mysql_secure_installation
    
  2. Het installatieproces begint en het hulpprogramma vraagt ​​u om op te geven of u de plug-in voor het valideren van wachtwoorden wilt inschakelen die wordt gebruikt om wachtwoorden te testen en de beveiliging te verbeteren. Het wordt aanbevolen om deze functie in te schakelen.

    Securing the MySQL server deployment.
    
    Connecting to MySQL using a blank password.
    
    VALIDATE PASSWORD PLUGIN can be used to test passwords
    and improve security. It checks the strength of password
    and allows the users to set only those passwords which are
    secure enough. Would you like to setup VALIDATE PASSWORD plugin?
    
    Press y|Y for Yes, any other key for No: y

  3. Nadat u de wachtwoord-plug-in heeft ingeschakeld, specificeert u uw wachtwoordvalidatiebeleid op basis van de sterkte van de gewenste wachtwoorden.

    There are three levels of password validation policy:
    
    LOW    Length >= 8
    MEDIUM Length >= 8, numeric, mixed case, and special characters
    STRONG Length >= 8, numeric, mixed case, special characters and dictionary                  file
    
    Please enter 0 = LOW, 1 = MEDIUM and 2 = STRONG: 2
    Please set the password for root here.
    
    New password:
    
    Re-enter new password:
    
    Estimated strength of the password: 100
    Do you wish to continue with the password provided?(Press y|Y for Yes, any other key for No) : y

  4. Anonieme gebruikers verwijderen. Dit is een belangrijke beveiligingsoptie omdat aanvallers anonieme gebruikers kunnen gebruiken om toegang te krijgen tot de databaseserver.

    By default, a MySQL installation has an anonymous user,
    allowing anyone to log into MySQL without having to have
    a user account created for them. This is intended only for
    testing, and to make the installation go a bit smoother.
    You should remove them before moving into a production
    environment.
    
    Remove anonymous users? (Press y|Y for Yes, any other key for No) : y

  5. Schakel root-login op afstand uit, dit is een uiterst belangrijke beveiligingsconfiguratie omdat het voorkomt dat aanvallers zich op afstand authenticeren bij de MySQL-server als root of brute-force-aanvallen met wachtwoorden uitvoeren. Externe authenticatie kan ook volledig worden uitgeschakeld, we zullen in de volgende sectie bekijken hoe u dat kunt doen.

    Normally, root should only be allowed to connect from
    'localhost'. This ensures that someone cannot guess at
    the root password from the network.
    
    Disallow root login remotely? (Press y|Y for Yes, any other key for No) : y

  6. Verwijder de testdatabase die is gemaakt tijdens het installatieproces van mysql-server. Deze database is gemaakt voor testdoeleinden. Als goede gewoonte wordt aanbevolen om deze database te verwijderen.

    By default, MySQL comes with a database named 'test' that
    anyone can access. This is also intended only for testing,
    and should be removed before moving into a production
    environment.
    
    
    Remove test database and access to it? (Press y|Y for Yes, any other key for No) : y

  7. Laad de privilegetabellen opnieuw om ervoor te zorgen dat alle wijzigingen worden toegepast en van kracht zijn.

    Reloading the privilege tables will ensure that all changes
    made so far will take effect immediately.
    
    Reload privilege tables now? (Press y|Y for Yes, any other key for No) : y
    Success.
    
    All done!
    U hebt nu een veilige basis om mee te werken. In het volgende gedeelte vindt u de instructies om de standaard root te wijzigen gebruikersnaam en wachtwoord.

De “root”-gebruiker wijzigen

Standaard wordt de MySQL-server voorgedefinieerd geleverd met een superuser/admin account dat toegang heeft tot alle privileges en functionaliteit van de databases en databasegebruikers. Gezien deze ongeëvenaarde controle en toegang, is het belangrijk om het root-account te vergrendelen en te beveiligen, aangezien aanvallers zich gewoonlijk richten op het root-account op een MySQL-server, omdat het de potentie heeft om volledige toegang te bieden tot de databases en databasegebruikers.

De eerste stap bij het beveiligen van de "root"-gebruiker is het wijzigen van de gebruikersnaam van root tot iets onverzettelijkers, het doel is om de root-gebruikersnaam zo moeilijk te raden te maken of brute-force voor aanvallers. Daarna wordt het ook aanbevolen om de root . te wijzigen accountwachtwoord regelmatig als een goede gewoonte.

  1. Log in op de MySQL-server met het volgende commando:

     sudo mysql -u root
    
  2. Wijzig de gebruikersnaam van de "root"-account door de volgende zoekopdracht uit te voeren:

     rename user 'root'@'localhost' to '<new-username>'@'localhost';
    
  3. Wijzig de root accountwachtwoord naar iets sterks en moeilijk te raden, wordt het aanbevolen om een ​​wachtwoordgenerator te gebruiken. Als je de plug-in voor het verifiëren van wachtwoorden hebt ingeschakeld tijdens het beveiligde installatieproces, moet je een wachtwoord opgeven dat qua sterkte voldoet aan de beleidsvereisten.

     ALTER USER 'example_username'@'localhost' IDENTIFIED BY '<new-password>';
    
  4. Laad de privilegetabel opnieuw om ervoor te zorgen dat alle wijzigingen worden opgeslagen en geactiveerd door de volgende opdracht uit te voeren:

     flush privileges;
    
  5. Om te bevestigen of de root gebruikersnaam en wachtwoord zijn gewijzigd, voert u de volgende query uit:

     use mysql;
     select user,host,authentication_string from mysql.user;
    

Dit toont de gebruikerstabellen die zijn opgeslagen onder de mysql-database en zouden de gemaakte wijzigingen moeten weerspiegelen.

+------------------+-----------+-------------------------------------------+
| user             | host      | authentication_string                     |
+------------------+-----------+-------------------------------------------+
| example_user     | localhost | *A2550B00C6DF81DACE33551E8293462F6CAE33DA |
| mysql.session    | localhost | *THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE |
| mysql.sys        | localhost | *THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE |
| debian-sys-maint | localhost | *241DC5A20F017D55EE82E46E7996784ED4A5CD8A |
+------------------+-----------+-------------------------------------------+
4 rows in set (0.00 sec)

Een nieuwe gebruiker aanmaken

Een goede beveiligingspraktijk is het concept van scheiding door taken of rol. Dit betekent dat voor elke database of toepassing die de database gebruikt, een nieuwe gebruiker moet worden gemaakt met CRUD-machtigingen voor die specifieke database. Dit zorgt ervoor dat slechts één gebruiker op elk moment toegang heeft tot één database en dat gebruikers geen toegang hebben tot andere databases.

  1. Maak een Test database, door de volgende query uit te voeren in MYSQL:

     create database Test;
    
  2. Maak de gebruiker aan die verantwoordelijk is voor het beheer van deze testdatabase:

     CREATE USER '<username>'@'localhost' IDENTIFIED BY '<password>';
    
  3. Wijs de juiste CRUD-machtigingen toe aan de gebruiker voor de Test databank:

     GRANT SELECT,UPDATE,DELETE ON Test.* TO '<username>'@'localhost';
    
  4. Het is belangrijk op te merken dat deze privileges alleen van toepassing zijn op de Test database, als u een gebruiker aanmaakt voor een toepassing zoals phpMyAdmin , moet u de gebruiker root . geven machtigingen.

  5. Als u besluit een bepaalde gebruiker te verwijderen, voert u de volgende zoekopdracht uit:

     drop user '<username>'@'localhost';
    
  6. Laad de privilegetabel opnieuw om ervoor te zorgen dat de aangebrachte wijzigingen worden toegepast en geactiveerd door de volgende query uit te voeren:

     flush privileges;
    

Aangepaste MySQL-configuratie

U kunt nu een veilige aangepaste configuratie voor MySQL instellen die aanvullende beveiligingsconfiguratie-opties biedt.

  1. Het algemene MySQL-configuratiebestand bevindt zich in /etc/mysql/my.cnf , moeten alle aangepaste globale configuraties worden ingesteld in het configuratiebestand.

  2. De aangepaste configuratie moet worden opgegeven voor de mysqld (MySQL-daemon), de opties die in de afbeelding worden weergegeven, zijn aangepaste beveiligingsconfiguraties.

  3. Nadat u de aangepaste configuraties hebt toegevoegd, moet u de mysql . opnieuw starten service om ervoor te zorgen dat alle wijzigingen worden toegepast.

     systemctl restart mysql
    

MySQL-beveiliging controleren

U kunt nu de beveiliging van de MySQL-server controleren met behulp van een tool genaamd MySAT. MySAT voert verschillende tests uit om databaseconfiguraties en beveiligingsbeleid te analyseren. MySAT helpt bij het beoordelen en dus verhogen van de beveiliging van de MySQL-database. MySAT is een eenvoudig SQL-script, het is gemakkelijk te begrijpen en gemakkelijk te onderhouden. MySAT-resultaten worden uitgevoerd in HTML-indeling.

  1. Kloon de MySAT Github-repository door de volgende opdracht uit te voeren:

     git clone https://github.com/meob/MySAT.git
    
  2. Na het klonen van de directory navigeert u naar de MySAT-directory, waar de mysat.sql bestand zich bevindt en wordt gebruikt in combinatie met de MySQL-server om de resultaten uit te voeren in een MySAT.htm bestand.

  3. Controleer de beveiliging door de volgende opdracht uit te voeren:

     mysql --user=<root-user> -p<password> --skip-column-names -f < mysat.sql > MySAT.htm
    
  4. Zoals aangegeven vereist MySAT root-toegang tot MySQL om de vereiste tests uit te voeren. Na het uitvoeren van de opdracht wordt het MySAT.htm-bestand gegenereerd, kopieer het MySAT.htm-bestand en de mysat.css bestand naar een Apache- of NGINX-server, of download ze lokaal met scp , zodat u de resultaten van de audit kunt analyseren.

  5. De resultaten zijn geformatteerd in een eenvoudig te lezen en te begrijpen formaat, waarbij configuraties worden gecontroleerd en de resultaten een kleurcode krijgen op basis van hun huidige configuratie en hoe dit de beveiliging van de mysql-server beïnvloedt. Een mislukte configuratiecontrole heeft bijvoorbeeld een oranje kleurcode en een geslaagde controle heeft een groene kleurcodering.

  6. Het auditrapport onthult welke configuraties moeten worden gewijzigd of aangepast en geeft u een beeld op het hoogste niveau van de algehele beveiliging van de MySQL-server.


  1. Hoe krijg ik een Oracle SCHEMA als DDL-scripts met DBMS_METADATA (en SCHEMA_EXPORT)

  2. Alle uitgeschakelde CHECK-beperkingen in SQL Server retourneren (T-SQL-voorbeeld)

  3. Referentie:wat is een perfect codevoorbeeld met de MySQL-extensie?

  4. DROP TABEL INDIEN BESTAAT in SQLite