Heim  >  Artikel  >  php教程  >  Sicherheitsprobleme bei MySQL-Datenbanken erklärt

Sicherheitsprobleme bei MySQL-Datenbanken erklärt

高洛峰
高洛峰Original
2016-12-02 14:02:191460Durchsuche

Die Sicherheit von Datenbanksystemen umfasst viele Aspekte. Da der Datenbankserver in vielen Fällen Clients die Verbindung über das Netzwerk ermöglicht, hat die Sicherheit von Clientverbindungen einen sehr wichtigen Einfluss auf die Sicherheit der MySQL-Datenbank.

Geben Sie in der Befehlszeile des Clients kein Passwort ein.

Wenn Sie einen Client wie MySQL, MySQLadmin usw. verwenden, um mit einer Benutzeridentität eine Verbindung zum MySQL-Server herzustellen, müssen Sie ein Passwort angeben Passwort für die Verbindung.

1. Sie können das Passwort in der Befehlszeile eingeben

shell>mysql –u root –pmypass

Beachten Sie, dass zwischen der Option -p und kein Leerzeichen stehen darf Andernfalls werden Sie zur Eingabe Ihres Passworts aufgefordert und es wird ein Fehler gemeldet.

Sie können auch das Langformat

shell>mysql –user=root –password=mypass

verwenden. Jetzt können Sie die Konsequenzen dieser Vorgehensweise untersuchen:

Unter Unix $ps –aux |. grep mysql

Unter Win9x können Sie die Tasten Strg+Alt+Entf gedrückt halten und unter NT können Sie den Task-Manager öffnen.

Was haben Sie gefunden? Sie haben festgestellt, dass das Passwort deutlich vor Ihnen angezeigt wurde. Tun Sie dies also auf keinen Fall.

Sie müssen also den Client bitten, Sie zur Eingabe Ihres Passworts aufzufordern:

shell>mysql –u root –p

Sie können auch eine Optionsdatei verwenden, um eine bereitzustellen Passwort, aber seien Sie aus Sicherheitsgründen vorsichtig, Passwörter können nicht in der Optionsdatei gespeichert werden. Sie können nur die Passwortoption angeben und sich vom Client zur Eingabe eines Passworts auffordern lassen.

Verwenden Sie SSH, um Client-Verbindungen zu verschlüsseln.

Dies ist ein Hinweis zur Verwendung von SSH, um eine sichere Verbindung zu einem Remote-MySQL-Server herzustellen (David Carlson).

Installieren Sie einen SSH-Client auf Ihrem Windows-Rechner – ich habe einen kostenlosen SSH-Client von verwendet. Weitere nützliche Links:

 

 .

SSH starten. Legen Sie Hostname = Ihren MySql-Servernamen oder Ihre IP-Adresse fest, legen Sie userid = Ihren Benutzernamen fest, um sich bei Ihrem Server anzumelden.

Klicken Sie auf „Lokale Forwords“. Lokalen Port festlegen: 3306, Host: localhost, Remote-Port: 3306

Speichern Sie alles, sonst müssen Sie es beim nächsten Mal erneut tun.

Melden Sie sich über SSH bei Ihrem Server an.

Starten Sie einige ODBC-Anwendungen (z. B. Access).

Erstellen Sie eine neue Datei und stellen Sie mithilfe des ODBC-Treibers eine Verbindung zu mySQL her, genau wie Sie es normalerweise tun würden, außer dass Sie den Benutzer „localhost“ für den Server verwenden.

Fertig. Mit einer direkten Internetverbindung funktioniert es einwandfrei.

Führen Sie den MySQL-Daemon nicht als Root-Benutzer unter Unix aus.

Führen Sie den MySQL-Daemon nicht als Root-Benutzer unter Unix aus. mysqld kann unter jedem beliebigen Benutzer ausgeführt werden. Sie können auch einen neuen Unix-Benutzer mysql erstellen, um alles sicherer zu machen. Wenn Sie mysqld als ein anderer Unix-Benutzer ausführen, müssen Sie den Root-Benutzernamen in der Benutzertabelle nicht ändern, da der MySQL-Benutzername nichts mit dem Unix-Benutzernamen zu tun hat.

Sie können das mysql.server-Startskript mysqld als ein anderer Unix-Benutzer bearbeiten. Oder verwenden Sie eine Optionsdatei. Einzelheiten zum Starten des MySQL-Servers als Nicht-Root-Benutzer finden Sie in Kapitel 2.

Sicherheit des Datenbankverzeichnisses

Der MySQL-Server bietet über die Autorisierungstabelle in der MySQL-Datenbank ein sehr flexibles Berechtigungssystem und gewährleistet so die Sicherheit der Daten, auf die über das Netzwerk zugegriffen wird. Wenn jedoch andere Benutzer auf dem Server-Host direkten Zugriff auf das Serververzeichnis haben, sind die Daten Ihres Servers immer noch unsicher.

Normalerweise würden Sie den Daemon als unprivilegierter Unix-Benutzer ausführen. Stellen Sie sicher, dass der Unix-Benutzer, der mysqld ausführt, der einzige Benutzer mit Lese-/Schreibberechtigungen im Datenbankverzeichnis ist.

Mögliche Sicherheitslücken

Natürlich würden Sie anderen Benutzern auf dem Server-Host keinen Schreibzugriff auf die Datenbankverzeichnisdateien gewähren, aber auch nur Lesezugriff ist sehr gefährlich.

Da Abfragen wie GRANT und SET PASSWORD protokolliert werden, enthalten die regulären und Update-Protokolldateien vertraulichen Abfragetext zu Passwörtern. Wenn ein Angreifer Lesezugriff auf diese Protokolle hat, kann er den Klartext des Passworts leicht finden, indem er in den Protokolldateien nach sensiblen Wörtern wie GRANT oder PASSWORD sucht.

Auch der Lesezugriff auf Tabellendateien ist gefährlich, und es ist trivial, die Datei zu stehlen und MySQL dazu zu bringen, den Inhalt der Tabelle im Klartext anzuzeigen. Sie können die folgenden Schritte ausführen:

1. Installieren Sie eine neue MySQL-Distribution, entweder auf einem anderen Host oder auf dem aktuellen Server-Host, und verwenden Sie dabei einen anderen Port und ein anderes Paket als die offiziellen Serverschnittstellen und Datendateien.

2. Kopieren Sie die entsprechenden Dateien der gestohlenen Tabelle in das Testverzeichnis im neuen Dienstdatenbankverzeichnis

3. Anschließend können Sie den Crime-Server starten und auf den Inhalt der gestohlenen Tabelle zugreifen Wille.

Legen Sie in Unix entsprechende Datenbankverzeichnisberechtigungen fest.

Wenn Sie diese Sicherheitslücken beseitigen möchten, müssen Sie den Besitz des Datenbankverzeichnisses und aller darin enthaltenen Dateien und Verzeichnisse regeln. Ja, nur das dedizierte Konto Dadurch kann der Server gestartet werden. Auf sie kann zugegriffen werden. Die Schritte sind wie folgt:

1. Wechseln Sie zum Root-Benutzer

$su

 2. Legen Sie den Besitz des Datenbankverzeichnisses und aller darin enthaltenen Dateiverzeichnisse auf das Konto fest, auf dem der Server ausgeführt wird. In diesem Buch wird davon ausgegangen, dass es sich bei diesem Konto immer um MySQL handelt, und alle Gruppen werden auf die Stammgruppe

festgelegt

 % chown –R mysql:root DATADIR

3. Ändern Sie die Berechtigungen des Datenbankverzeichnisses und aller Dateiverzeichnisse darin, sodass nur der Besitzer lesen und schreiben kann

%chmod –R go-rwx DATADIR

Legen Sie geeignete Datenbankverzeichnisberechtigungen im NT-System fest

Die Sicherheit des Datenbankverzeichnisses im NT-System kann relativ einfach sein:

Leser denken vielleicht darüber nach Ändern aller Verzeichnisdateien auf nur bestimmte Ein Konto, z. B. Administrator, kann gelesen und geschrieben werden. Dabei gibt es jedoch ein Problem: Sie können einen unabhängigen Server manuell im Administratorkonto starten. Wenn die Methode, den MySQL-Systemdienst automatisch starten zu lassen, nicht möglich ist, besteht die Lösung darin, das Datenbankverzeichnis auch lesbar zu machen Beschreibbar durch Benutzer in der Administratorengruppe. Auf diese Weise kann der MySQL-Server automatisch mit der Systemdienstmethode oder in einem beliebigen Konto mit net start mysql gestartet werden.

Ein weiteres Problem besteht darin, dass Sie als Nicht-Administratorgruppenbenutzer oder aus dem Netzwerk keine Datenbankverbindung herstellen können, da Sie keine Leserechte für das Datenbankverzeichnis haben. Wenn Sie es normal verwenden möchten, Sie benötigen außerdem Schreibrechte. Die Lösung besteht darin, Benutzern in der SYSTEM-Gruppe das Lesen und Schreiben im Datenbankverzeichnis zu ermöglichen.

Aus Lizenz- und Kostengründen wird normalerweise empfohlen, MySQL auf einem Linux-Server zu verwenden und es für Test- oder Dateneingabearbeiten auf einer Windows-Plattform zu verwenden. Wenn Sie es jedoch unter Windows verwenden möchten, können Sie einige Inhalte in diesem Abschnitt beachten.

MySQL-Optionen, die sich auf die Sicherheit auswirken

Die folgenden MySQL-Optionen wirken sich auf die Sicherheit aus:

--secure

Die vom Systemaufruf gethostbyname() zurückgegebene IP-Nummer wird überprüft, um sicherzustellen, dass sie wieder zum ursprünglichen Hostnamen aufgelöst werden. Dadurch wird es für Außenstehende schwieriger, sich Zugriff zu verschaffen, indem sie sich als andere Hosts ausgeben. Diese Option fügt auch eine clevere Überprüfung des Hostnamens hinzu. In MySQL 3.21 ist die Auswahl standardmäßig deaktiviert, da die umgekehrte Analyse manchmal lange dauert. MySQL 3.22 speichert Hostnamen zwischen und hat diese Option standardmäßig aktiviert.

--skip-grant-tables

Diese Option führt dazu, dass der Server das Berechtigungssystem überhaupt nicht verwendet. Dadurch erhält jeder vollen Zugriff auf alle Datenbanken! (Sie können einen laufenden Server anweisen, erneut Grant-Tabellen zu verwenden, indem Sie einen mysqladmin-Reload ausführen.)

  --skip-name-resolve

Der Hostname ist nicht gelöst. Alle Hostspaltenwerte in der Autorisierungstabelle müssen IP-Nummern oder localhost sein.

  --skip-networking

  Erlaube keine TCP/IP-Verbindungen im Netzwerk. Alle Verbindungen zu mysqld müssen über Unix-Sockets erfolgen. Diese Option ist nicht für Systeme geeignet, die MIT-pthreads verwenden, da das MIT-pthreads-Paket keine Unix-Sockets unterstützt.


Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn