sql >> Database >  >> RDS >> Mysql

Het ProxySQL-auditlogboek begrijpen

ProxySQL werd een zeer belangrijk stukje infrastructuur in de database-omgevingen. Het werkt als een load balancer, het helpt de verkeersstroom vorm te geven en de downtime te verminderen. Met grote macht komt grote verantwoordelijkheid. Hoe kunt u op de hoogte blijven van wie toegang heeft tot de ProxySQL-configuratie? Wie maakt verbinding met de database via ProxySQL? Die vragen kunnen worden beantwoord met behulp van ProxySQL Audit Log, dat beschikbaar is vanaf ProxySQL 2.0.5. In deze blogpost bekijken we hoe je deze functie kunt inschakelen en hoe de inhoud van het log eruitziet.

De eerste stappen zijn het implementeren van ProxySQL. We kunnen dat gemakkelijk doen met ClusterControl - zowel MySQL-replicatie als Galera Cluster-typen ondersteunen ProxySQL-implementatie.

Ervan uitgaande dat we een cluster in gebruik hebben, kunnen we ProxySQL implementeren vanuit Manage -> LoadBalancers:

We moeten beslissen op welk knooppunt ProxySQL moet worden geïnstalleerd, de versie ( we behouden de standaard 2.x) en definiëren inloggegevens voor ProxySQL-beheerders en gebruikers die toezicht houden.

Hieronder kunnen we bestaande applicatiegebruikers uit de database importeren of een nieuwe één door naam, wachtwoord, schema en MySQL-rechten toe te wijzen. We kunnen dan configureren welke knooppunten in ProxySQL moeten worden opgenomen en beslissen of we impliciete transacties gebruiken of niet. Zodra alles klaar is, kunnen we ProxySQL inzetten. Voor hoge beschikbaarheid wil je waarschijnlijk een tweede ProxySQL toevoegen en er dan bovenop blijven leven. Keepalive kan ook eenvoudig worden ingezet vanuit ClusterControl:

Hier moeten we nodes kiezen waarop ProxySQL wordt geïmplementeerd, de virtuele IP en netwerkinterface VIP moeten worden toegewezen aan. Zodra dit is gebeurd, kan ClusterControl Keepalive voor u inzetten.

Laten we nu eens kijken naar het controlelogboek. Alle configuraties moeten worden uitgevoerd op beide ProxySQL-knooppunten. Als alternatief kunt u een optie gebruiken om de knooppunten te synchroniseren:

Er zijn twee instellingen die bepalen hoe het controlelogboek moet werken:

De eerste definieert het bestand waar de gegevens moeten worden opgeslagen, de tweede vertelt hoe groot het logbestand moet zijn voordat het wordt geroteerd. Laten we het inloggen configureren in de ProxySQL-gegevensmap:

Nu kunnen we de gegevens bekijken die we in de controle zien logbestand. Allereerst is het formaat waarin gegevens worden opgeslagen JSON. Er zijn twee soorten gebeurtenissen, één gerelateerd aan MySQL-connectiviteit en tweede gerelateerd aan ProxySQL-beheerdersinterface-connectiviteit.

Hier is een voorbeeld van items die worden geactiveerd door MySQL-verkeer:

  "client_addr": "10.0.0.100:40578",

  "event": "MySQL_Client_Connect_OK",

  "proxy_addr": "0.0.0.0:6033",

  "schemaname": "sbtest",

  "ssl": false,

  "thread_id": 810,

  "time": "2020-01-23 14:24:17.595",

  "timestamp": 1579789457595,

  "username": "sbtest"

}

{

  "client_addr": "10.0.0.100:40572",

  "event": "MySQL_Client_Quit",

  "proxy_addr": "0.0.0.0:6033",

  "schemaname": "sbtest",

  "ssl": false,

  "thread_id": 807,

  "time": "2020-01-23 14:24:17.657",

  "timestamp": 1579789457657,

  "username": "sbtest"

}

{

  "client_addr": "10.0.0.100:40572",

  "creation_time": "2020-01-23 14:24:17.357",

  "duration": "299.653ms",

  "event": "MySQL_Client_Close",

  "extra_info": "MySQL_Thread.cpp:4307:process_all_sessions()",

  "proxy_addr": "0.0.0.0:6033",

  "schemaname": "sbtest",

  "ssl": false,

  "thread_id": 807,

  "time": "2020-01-23 14:24:17.657",

  "timestamp": 1579789457657,

  "username": "sbtest"

}

Zoals je kunt zien, worden de meeste gegevens herhaald:clientadres, ProxySQL-adres, schemanaam, of SSL is gebruikt in verbindingen, gerelateerd threadnummer in MySQL, gebruiker die de verbinding heeft gemaakt. De gebeurtenis "MySQL_Client_Close" bevat ook informatie over het tijdstip waarop de verbinding is gemaakt en de duur van de verbinding. U kunt ook zien welk deel van de ProxySQL-code verantwoordelijk was voor het sluiten van de verbinding.

Beheerdersverbindingen zijn vrij gelijkaardig:

{

  "client_addr": "10.0.0.100:52056",

  "event": "Admin_Connect_OK",

  "schemaname": "information_schema",

  "ssl": false,

  "thread_id": 815,

  "time": "2020-01-23 14:24:19.490",

  "timestamp": 1579789459490,

  "username": "proxysql-admin"

}

{

  "client_addr": "10.0.0.100:52056",

  "event": "Admin_Quit",

  "schemaname": "information_schema",

  "ssl": false,

  "thread_id": 815,

  "time": "2020-01-23 14:24:19.494",

  "timestamp": 1579789459494,

  "username": "proxysql-admin"

}

{

  "client_addr": "10.0.0.100:52056",

  "creation_time": "2020-01-23 14:24:19.482",

  "duration": "11.795ms",

  "event": "Admin_Close",

  "extra_info": "MySQL_Thread.cpp:3123:~MySQL_Thread()",

  "schemaname": "information_schema",

  "ssl": false,

  "thread_id": 815,

  "time": "2020-01-23 14:24:19.494",

  "timestamp": 1579789459494,

  "username": "proxysql-admin"

}

De verzamelde gegevens lijken erg op elkaar, het belangrijkste verschil is dat het verband houdt met verbindingen met de ProxySQL-beheerinterface.

Conclusie

Zoals u kunt zien, kunt u op een zeer eenvoudige manier auditing van de toegang tot ProxySQL inschakelen. Dit, met name de administratieve toegang, is iets dat vanuit het oogpunt van beveiliging moet worden gecontroleerd. Audit-plug-in maakt het vrij eenvoudig te bereiken.


  1. Wijzig de prioriteit van een account binnen een database-e-mailprofiel (SSMS)

  2. Inleiding tot PL/SQL-functies in Oracle Database

  3. Wat zijn de verschillen tussen SQL en MySQL

  4. Meerdere kolommen tegelijk WIJZIGEN in SQL Server?