sql >> Databasteknik >  >> RDS >> Mysql

Hur du ser till att din MySQL-databas är säker

En del grundläggande information innan vi börjar:

Källa:Center for Internet Securitys (CIS) Oracle MySQL Community Server 5.7

Operativsystem: Windows 10

Var du ska köra: kommandoraden

mysql -u USERNAME -p

Målapplikation: Oracle MySQL Community Server 5.7

Revision och loggning för informationssystem

Loggar spelar en avgörande roll för säkerheten när det finns en misstänkt cyberattack. En manuell granskning av loggar är mödosam för säkerhetspersonal, och de måste använda verktyg för logggranskning för att extrahera information och analysera den. Loggar bör använda en WORM (skriv en gång läst många) lagringsteknik och kryptering för att undvika korruption och att förlora loggdata. Loggar bör också ha ett standardiserat format för att underlätta underhåll, åtkomst och jämförelse.

Se till att "log_error" inte är tomt

kommando:

SHOW variables LIKE ‘log_error’;

Felloggar innehåller data om händelser när mysqld startar eller stoppar. Den visar också när en tabell behöver bedömas eller repareras. Det måste generera ett "värde". Anledningen till att felloggning aktiveras är att det hjälper till att öka förmågan att upptäcka skadliga försök mot MySQL och andra viktiga meddelanden.

Se till att loggfiler lagras på en icke-systempartition

kommando:

SELECT @@global.log_bin_basename;

Loggfiler av MySQL kan lagras var som helst i filsystemet och ställas in med MySQL-konfigurationen. Det är också en bästa praxis att se till att loggarna i filsystemet inte är belamrade med andra loggar som applikationsloggar. Du måste se till att värdet som returneras inte indikerar att det finns i roten "('/')", "/var" eller "/usr". Anledningen till detta är att partitionering kommer att minska sannolikheten för denial of service om det tillgängliga diskutrymmet till operativsystemet är uttömt.

Se till att "log_error_verbosity" inte är satt till "1"

kommando:

SHOW GLOBAL VARIABLES LIKE ‘log_error_verbosity’;

Denna kontroll ger ytterligare information om vilka funktioner MySQL-loggen har eller har aktiverat på felmeddelanden. Ett värde på 1 möjliggör loggning av felmeddelanden. Ett värde på 2 möjliggör både loggning av fel- och varningsmeddelanden. Ett värde på 3 möjliggör loggning av fel-, varnings- och anteckningsmeddelanden. Detta hjälper till att upptäcka skadligt beteende genom att logga kommunikationsfel och avbrutna anslutningar.

Se till att revisionsloggning är aktiverad

Att aktivera revisionsloggning är avgörande för produktionsmiljön för interaktiva användarsessioner och applikationssessioner. Med revisionsloggning hjälper det att identifiera vem som ändrade vad och när. Det kan också hjälpa till att identifiera vad en angripare har gjort och kan till och med användas som bevis i utredningar.

kommando:

SELECT NAME FROM performance_schema.setup_instruments WHERE NAME LIKE ‘%/alog/%’;

kommando:

SET GLOBAL general_log = ‘ON’ ;

kommando: SKAPA ANVÄNDARE 'user1'@'localhost' IDENTIFIERAD MED LÖSENORD 'inte-så-hemligt';

Loggens sökväg i Windows 10 kan hittas genom att använda applikationen Services, se om MySQL körs och högerklicka på egenskaper.

Loggen i författarens system fanns i:C:\ProgramData\MySQL\MySQL Server 5.7\Data\DJ-JASON-CLARK.log

Autentisering för informationssystem

Autentisering säkerställer att användaruppgifterna som tillhandahålls av användaren eller maskinen matchas med databasen över auktoriserade användare i ett lokalt operativsystem eller i en autentiseringsserver. Autentisering följs sedan av auktorisering, som ges av en administratör till användare eller maskiner. En autentisering som vanligtvis används i både privata och offentliga nätverk är lösenordsbaserad autentisering.

Se till att lösenord inte lagras i den globala konfigurationen

[klient]-sektionen i en MySQL-konfigurationsfil tillåter skapandet av en användare och lösenord. Kontrollen är viktig eftersom att tillåta en användare och lösenord i konfigurationsfilen påverkar sekretessen för användarens lösenord negativt.

För att granska, öppna MySQL-konfigurationsfilen och undersök avsnittet [klient] - det får inte ha något lösenord lagrat. Inget lösenord har angetts i författarens system (se bilden nedan). Om ett lösenord angavs i konfigurationsfilen, använd mysql_config_editor för att lagra lösenord i krypterad form i .mylogin.cnf.

Se till att 'sql_mode' innehåller 'NO_AUTO_CREATE_USER'

"no_auto_create_user" är ett alternativ för att förhindra automatiskt skapande av användare när autentiseringsinformation inte tillhandahålls.

kommando:

SELECT @@global.sql_mode;

kommando:

SELECT @@session.sql_mode;

Se till att lösenord är inställda för alla MySQL-konton

En användare kan skapa ett tomt lösenord. Att ha ett tomt lösenord är riskabelt eftersom vem som helst bara kan anta användarens identitet, ange användarens inloggnings-ID och ansluta till servern. Detta kringgår autentisering, vilket är dåligt.

kommando:

SELECT User,host FROM mysql.user WHERE authentication_string=’’;

Se till att "default_password_lifetime" är mindre än eller lika med "90"

Om du ändrar lösenordets livslängd till 90 dagar minskar den tid som är tillgänglig för angriparen att äventyra lösenordet, och därmed minskar sannolikheten för att bli attackerad.

kommando:

SHOW VARIABLES LIKE ‘default_password_lifetime’;

kommando:

SET GLOBAL default_password_lifetime=90;

Se till att lösenordskomplexiteten är på plats

Lösenordskomplexitet ger säkerhetsstyrka till autentiseringar och inkluderar tillägg eller ökning av längd, skiftläge, siffror och specialtecken. Ju mer komplext lösenordet är, desto svårare för angripare att använda brute force för att få lösenordet. Svaga lösenord erhålls enkelt i en lösenordsordbok.

kommando:

SHOW VARIABLES LIKE ‘validate_password%’;

Se till att inga användare har jokertecken värdnamn

Användare med jokertecken värdnamn (%) ges tillstånd till vilken plats som helst. Det är bäst att undvika att skapa jokertecken värdnamn. Skapa istället användare och ge dem specifika platser från vilka en given användare kan ansluta till och interagera med databasen.

kommando:

SELECT user, host FROM mysql.user WHERE host = ‘%’;

Se till att inga anonyma konton finns

Användare kan ha ett anonymt (tomt eller tomt) användarnamn. Dessa anonyma användarnamn har inga lösenord och alla andra användare kan använda det anonyma användarnamnet för att ansluta till MySQL-servern. Borttagning av dessa anonyma konton säkerställer att endast identifierade och betrodda användare kan komma åt MySQL-servern.

kommando:

SELECT user,host FROM mysql.user WHERE user = ‘’;

Nätverksanslutning till MySQL-server

Nätverksanslutningen spelar en viktig roll för kommunikationen mellan användaren och MySQL-servern. Osäkra nätverksanslutningar är mycket sårbara för attacker. Följande är kontroller för nätverksanslutningssäkerhet.

Se till att 'have_ssl' är inställt på 'JA'

För att undvika att illvilliga angripare tittar in i ditt system är det bäst att använda SLL/TLS för all nätverkstrafik när du använder opålitliga nätverk.

kommando:

WHERE variable_name = ‘have_ssl’;

Se till att 'ssl_type' är inställd på 'ANY', 'X509', eller "SPECIFICERAD" för alla fjärranvändare

SSL/TLS bör konfigureras per användare. Detta förhindrar ytterligare avlyssning av illvilliga angripare.

kommando:

SELECT user, host, ssl_type FROM mysql.user WHERE NOT HOST IN (‘::1’, ‘127.0.0.1’, ‘localhost’);

Replikering

Genom att leta efter replikeringsstatus kan du övervaka prestanda och säkerhetsbrister. Microsoft SQL Server Management Studio har följande verktyg för att övervaka replikering:

  1. visa agentstatus för ögonblicksbild,
  2. visa loggläsaragentens status och
  3. visa synkroniseringsstatus.

Se till att replikeringstrafiken är säker

Replikering trafik mellan servrar måste säkras. Under replikeringsöverföringar kan lösenord läcka.

För att granska, kontrollera om de använder:ett privat nätverk, en VPN, SSL/TLS eller en SSH-tunnel. Förhoppningsvis använder författarens system ett privat nätverk. Rätta om annat, och säkra genom att använda det privata nätverket, en VPN, SSL/TLS eller en SSH-tunnel.

Se till att 'MASTER_SSL_VERIFY_SERVER_CERT' är inställt på 'YES' eller '1'

'MASTER_SSL_VERIFY_SERVER_CERT' kontrollerar om repliken ska verifiera den primära certifikatet eller inte. Repliken bör verifiera den primära certifikatet för att autentisera den primära innan anslutningen fortsätter.

kommando:

SELECT ssl_verify_server_cert FROM mysql.slave_master_info;

Se till att 'master_info_repository' är inställt på 'TABELL'

"master_info_repository" bestämmer var repliken loggar primärens status och anslutningsinformation. Lösenordet lagras i det primära informationsarkivet som är en vanlig textfil. Att lagra lösenordet i TABLE master_info är säkrare.

kommando:

SHOW GLOBAL VARIABLES LIKE ‘master_info_repository’;

Se till att "super_priv" inte är inställt på "Y" för replikeringsanvändare

"SUPER"-privilegiet ('super_priv') som finns i tabellen "mysql.user" har funktioner som "CHANGE", "MASTER TO", "KILL", "mysqladmin kill", "PURGE BINARY LOGS", "SET GLOBAL", "mysqladmin debug" och andra loggningskontroller. Genom att ge en användare "SUPER"-privilegiet kan användaren se och avsluta SQL-satser som körs för närvarande, även för lösenordshantering. Om angriparen utnyttjar och får "SUPER"-privilegiet kan de inaktivera, ändra eller förstöra loggdata.

kommando:

SELECT user, host FROM mysql.user WHERE user=’repl’ and Super_priv = ‘Y’;

Se till att inga replikeringsanvändare har jokerteckenvärdnamn

MySQL låter dig ge behörigheter till jokerteckenvärdnamn. Jokerteckenvärdnamn bör undvikas, och du bör skapa eller ändra användare och ge dem specifika platser från vilka en given användare kan ansluta till och interagera med databasen.

Slutsats

Följande kontroller görs för en enskild arbetsmiljö med MySQL som informationssystem på både applikationssidan och användarsidan.

Bedömningen är absolut nödvändig för att kontrollera om det finns standardloggning av MySQL och aktivera ytterligare loggningsfunktioner (det möjliggör också kontroll av autentiseringssårbarheter). Nätverkskontroller är viktiga för att förhindra andra användare med uppsåt från att kika in i ditt nätverk. Implementera alltid SSL/TLS för att kryptera. Det är nödvändigt att säkra envägsöverföring. Säkra replikeringstrafik lägger till ett defensivt lager.

Resultatet av bedömningen kan informera dig om systemet kan fungera på en nivå av förtroende.

Tack för att du läser min blogg! Du har nu startat vägen till att säkra din MySQL-databas.=)



  1. Hur ändrar jag positionen för en kolumn i en PostgreSQL-databastabell?

  2. Lagra filer i SQL-databas med FILESTREAM – Del 2

  3. Kan vi omfördela Oracle tools.jar?

  4. Tips för att övervaka PostgreSQL för Moodle