Die Hauptfunktion des MySQL-Autorisierungssystems besteht darin, einem authentifizierten Benutzer Berechtigungen für eine Datenbank zuzuweisen, wie z. B. SELECT, INSERT, UPDATE und DELETE. Die Funktionalität des Berechtigungssystems umfasst die Möglichkeit, anonyme Benutzer zu haben und bestimmte Funktionen wie LOAD DATA INFILE und verschiedene Verwaltungsvorgänge zu aktivieren. Diese Berechtigung stellt sicher, dass Benutzer nur die Vorgänge ausführen können, für die ihnen entsprechende Berechtigungen erteilt wurden.
Festlegen geeigneter Benutzerrechte
Sie können einem MySQL-Konto mehrere Arten von Berechtigungen auf verschiedenen Ebenen erteilen:global oder für bestimmte Datenbanken, Tabellen oder Spalten. Beispielsweise können Sie einem Benutzer die Möglichkeit geben, aus jeder Tabelle in jeder Datenbank auszuwählen, indem Sie dem Benutzer das SELECT-Privileg auf globaler Ebene erteilen.
Sie können einem Konto vollständige Kontrolle über eine bestimmte Datenbank geben, ohne über Berechtigungen für andere Datenbanken zu verfügen. Das Konto kann dann die Datenbank erstellen, Tabellen und andere Datenbankobjekte erstellen, aus den Tabellen auswählen und neue Datensätze hinzufügen, löschen oder aktualisieren.
Gewähren von Administratorrechten
Die folgenden globalen Privilegien gelten für Administratoren:
- DATEI :Ermöglicht Benutzern, den MySQL-Server anzuweisen, Dateien im Dateisystem des Serverhosts zu lesen und zu schreiben.
- PROZESS :Ermöglicht Benutzern die Verwendung der SHOW PROCESSLIST-Anweisung, um alle Anweisungen anzuzeigen, die von Clients ausgeführt werden.
- SUPER :Ermöglicht Benutzern, andere Client-Verbindungen zu beenden oder die Laufzeitkonfiguration des Servers zu ändern.
- ALLE :Gewährt alle Berechtigungen außer der Möglichkeit, anderen Benutzern Berechtigungen zu erteilen.
Der SUPER Administratorrechte geben Benutzern die Möglichkeit, zusätzliche Aufgaben auszuführen, darunter das Festlegen globaler Variablen und das Beenden von Client-Verbindungen. Es gibt auch einige spezielle Privilegienbezeichner:
– Verwenden Sie ALL und ALL PRIVILEGES, um alle Privilegien zu gewähren, mit Ausnahme der Möglichkeit, Privilegien an andere Konten zu vergeben. Verwenden Sie ALLE GEWÄHREN … MIT GRANT-OPTION um alle Privilegien zu gewähren, einschließlich der Fähigkeit, anderen Konten Privilegien zu erteilen.
– Verwenden Sie USAGE, um die Fähigkeit zu gewähren, sich mit dem Server zu verbinden. Dieses Privileg erstellt einen Datensatz in der Benutzertabelle für das Konto, jedoch ohne Privilegien. Das Konto kann dann verwendet werden, um für begrenzte Zwecke auf den Server zuzugreifen, wie z. B. das Ausgeben von SHOW VARIABLES- oder SHOW STATUS-Anweisungen. Das Konto kann nicht für den Zugriff auf Datenbankinhalte wie Tabellen verwendet werden, obwohl solche Berechtigungen zu einem späteren Zeitpunkt gewährt werden können.
Andere Administratorrechte umfassen CREATE USER , TEMPORÄRE TABELLEN ERSTELLEN , DATENBANKEN ANZEIGEN , SPERRTABELLE , NACHLADEN und HERUNTERFAHREN . Administratorrechte, einschließlich der auf der Folie, können verwendet werden, um die Sicherheit zu gefährden, auf privilegierte Daten zuzugreifen oder Denial-of-Service-Angriffe auf einen Server durchzuführen. Gewähren Sie Administratorrechte sparsam, da sie von böswilligen oder unvorsichtigen Benutzern missbraucht werden können.
GRANT-Anweisung
Die GRANT-Anweisung erstellt ein neues Konto oder ändert ein vorhandenes Konto.
GRANT-Syntax:
GRANT SELECT ON world_innodb.* TO 'kari'@'localhost' IDENTIFIED BY 'Abc123';
In der obigen Syntax/Beispiel gewährt die Anweisung das SELECT-Privileg für alle Tabellen in der world_innodb-Datenbank einem Benutzer namens kari, der sich vom lokalen Host verbinden und ein Passwort von Abc123 verwenden muss.
Klauseln der Erklärung:
1. Zu gewährende Privilegien
2. Berechtigungsstufe:
- Global:*.*
- Datenbank:[db_name].*
- Tabelle:[Datenbankname].[Tabellenname]
- Gespeicherte Routine:[db_name].[routine_name]
3. Konto, dem Sie das Privileg gewähren.
4. Ein optionales Passwort.
Die Klauseln der GRANT-Anweisung haben folgende Auswirkungen:
- GEWÄHREN Schlüsselwort:Gibt einen oder mehrere Berechtigungsnamen an, die angeben, welche Berechtigungen Sie gewähren. Bei Berechtigungsnamen wird die Groß-/Kleinschreibung nicht beachtet. Um mehrere Berechtigungen aufzulisten, trennen Sie sie durch Kommas.
- EIN -Klausel:Gibt die Ebene der Privilegien an, die Sie gewähren.
- AN -Klausel:Gibt das Konto an, dem Sie die Berechtigungen erteilen. Wenn das Konto noch nicht existiert, erstellt die Anweisung es.
- BEZEICHNET DURCH Klausel:(Optional) Weist dem Konto das angegebene Kennwort zu. Wenn das Konto bereits existiert, ersetzt das Passwort jedes alte.
Das Weglassen der IDENTIFIED BY-Klausel hat folgende Auswirkung:
- Wenn das Konto in der TO-Klausel existiert, bleibt sein Passwort unverändert.
- Wenn das Konto in der TO-Klausel nicht existiert, wird es mit einem leeren Passwort erstellt.
Aktivieren Sie als Sicherheitsmaßnahme NO_AUTO_CREATE_USER SQL-Modus, um zu verhindern, dass die GRANT-Anweisung neue Konten erstellt, wenn Sie keine IDENTIFIED BY-Klausel angeben.
GRANT-Berechtigungen anzeigen
SHOW GRANTS zeigt die Anweisungen an, die die Berechtigungen für den angegebenen Benutzer neu erstellen. Es zeigt Berechtigungen nur für genau das Konto an, das in der Anweisung angegeben ist. Das folgende Beispiel zeigt Privilegien nur für [email protected], nicht für kari@%.
SHOW GRANTS; SHOW GRANTS FOR CURRENT_USER();
Sie können auch einen Kontonamen angeben, für den Zuschüsse angezeigt werden sollen:
mysql>SHOW GRANTS FOR 'kari'@'myhost.example.com'; +----------------------------------------------------------------+ | Grants for [email protected] | +----------------------------------------------------------------+ | GRANT FILE ON *.* TO 'kari'@'myhost.example.com' | | GRANT SELECT ON `world_innodb`.* TO 'kari'@'myhost.example.com‘| | IDENTIFIED BY PASSWORD | | '*E74858DB86EBA20BC33D0AECAE8A8108C56B17FA' | +----------------------------------------------------------------+
Die oben angezeigte Ausgabe besteht aus zwei GRANT-Anweisungen. Ihre ON-Klauseln zeigen Berechtigungen auf globaler bzw. Datenbankebene an. Wenn das Konto ein Passwort hat, zeigt SHOW GRANTS eine IDENTIFIED BY PASSWORD-Klausel am Ende der GRANT-Anweisung an; Diese Klausel listet die globalen Privilegien des Kontos auf. Das Wort PASSWORD nach IDENTIFIED BY gibt an, dass der angezeigte Passwortwert der verschlüsselte Wert ist, der in der Benutzertabelle gespeichert ist, und nicht das tatsächliche Passwort. Da das Passwort mit Einwegverschlüsselung gespeichert wird, hat MySQL keine Möglichkeit, das unverschlüsselte Passwort anzuzeigen.
Wenn das Konto einige oder alle seiner Berechtigungen anderen Konten erteilen kann, zeigt die Ausgabe WITH GRANT OPTION am Ende jeder GRANT-Anweisung an, auf die es sich bezieht.
Einschränkungen der Benutzerrechte
Sie können einem bestimmten Benutzer den Zugriff nicht explizit verweigern. Sie können ein Passwort nicht mit einem bestimmten Objekt wie einer Datenbank, Tabelle oder Routine verknüpfen.
Grant-Tabellen
Der MySQL-Server liest beim Start die Grant-Tabellen aus der MySQL-Datenbank in den Arbeitsspeicher und stützt alle Zugriffssteuerungsentscheidungen auf diese Tabellen. Tabellen entsprechen den Berechtigungsstufen:
Privilegienstufe/Tabelle | Inhalte und Berechtigungen |
---|---|
Benutzer | Enthält einen Datensatz für jedes dem Server bekannte Konto |
db | Datenbankspezifische Berechtigungen |
tables_priv | Tabellenspezifische Privilegien |
columns_priv | Spaltenspezifische Berechtigungen |
procs_priv | Privilegien für gespeicherte Prozeduren und Funktionen |
Der Benutzer Die Tabelle enthält einen Datensatz für jedes dem Server bekannte Konto sowie seine globalen Berechtigungen. Es gibt auch andere Informationen über das Konto an, wie zum Beispiel:
- Alle Ressourcenbeschränkungen, denen es unterliegt
- Ob Client-Verbindungen, die das Konto verwenden, über eine sichere Verbindung mit SSL hergestellt werden müssen
Jedes Konto muss einen Benutzertabellendatensatz haben; Der Server bestimmt, ob er jeden Verbindungsversuch akzeptiert oder ablehnt, indem er den Inhalt dieser Tabelle liest. Jedes Konto hat auch Einträge in den anderen Berechtigungstabellen, wenn es Berechtigungen auf einer anderen Ebene als der globalen Ebene hat.
Verwendung von Grant-Tabellen
Der Server bestimmt anhand der Spalten Host, Benutzer und Kennwort der Benutzertabelle, ob ein Client eine Verbindung herstellen kann. Um erfolgreich eine Verbindung herzustellen, muss MySQL einen Eintrag in der Benutzertabelle mit dem Host abgleichen, von dem aus sich der Client verbindet, dem vom Client angegebenen Benutzernamen und dem im übereinstimmenden Eintrag aufgeführten Passwort.
Nachdem sich ein Client verbunden hat, prüft MySQL die Zugriffsrechte für jede Anweisung, indem es die Identität des Kontos mit den Host- und Benutzerspalten der Berechtigungstabellen abgleicht.
- Privilegien in jeder Zeile der Benutzertabelle gelten global für das Konto, das durch seine Host- und Benutzerspalten identifiziert wird.
- Die Berechtigungen in den übereinstimmenden Datensätzen der Tabellen db, tables_priv, column_priv und procs_priv gelten auf der Ebene, die durch den Namen der spezifischen Berechtigungstabelle identifiziert wird.
Zum Beispiel gelten Berechtigungen in einem db-Tabelleneintrag für die im Eintrag genannte Datenbank, aber nicht für andere Datenbanken. Der MySQL-Installationsprozess erstellt die Grant-Tabellen.
- Grant-Tabellen verwenden die MyISAM-Speicher-Engine.
- MyISAM ist garantiert verfügbar.
Vornahme von Berechtigungsänderungen
Der Server liest die Berechtigungstabellen während seiner Startsequenz in den Arbeitsspeicher und verwendet die Kopien im Arbeitsspeicher, um den Client-Zugriff zu prüfen. Der Server aktualisiert seine In-Memory-Kopien der Grant-Tabellen unter den folgenden Bedingungen:
- Sie ändern ein Benutzerkonto, indem Sie eine Kontoverwaltungsanweisung wie CREATE USER, GRANT, REVOKE oder SET PASSWORD ausgeben.
- Sie laden die Tabellen explizit neu, indem Sie eine FLUSH PRIVILEGES-Anweisung ausgeben oder einen mysqladmin flush-privileges- oder mysqladmin reload-Befehl ausführen.
Vermeiden Sie es aus folgenden Gründen, Änderungen direkt an den Grant-Tabellen vorzunehmen:
- Die Syntax von Kontoauszügen ist klar und einfach gestaltet.
- Wenn Sie in einem Kontoverwaltungsauszug einen Fehler machen, schlägt der Auszug fehl und es werden keine Einstellungen geändert.
- Wenn Sie beim direkten Ändern von Grant-Tabellen einen Fehler machen, können Sie alle Benutzer aus dem System sperren.
Wann werden die Änderungen angewendet
- Änderungen an globalen Berechtigungen und Passwörtern gelten nur für nachfolgende Verbindungen dieses Kontos.
- Änderungen an Berechtigungen auf Datenbankebene gelten nach der nächsten USE db_name-Anweisung des Clients.
- Änderungen an Tabellen- und Routineberechtigungen gelten sofort.
Kontoberechtigungen widerrufen
Verwenden Sie die REVOKE-Anweisung, um bestimmte Berechtigungen für SQL-Anweisungen zu widerrufen:
REVOKE DELETE, INSERT, UPDATE ON world_innodb.* FROM 'Amon'@'localhost';
Verwenden Sie die REVOKE-Anweisung, um Berechtigungen von einem Konto zu widerrufen. Sie können Berechtigungen aus verschiedenen Gründen widerrufen, z. B. um den erforderlichen Zugriff eines Benutzers zu verringern. Die Syntax der REVOKE-Anweisung hat die folgenden Klauseln:
- WIDERRUFEN Schlüsselwort:Gibt die Liste der zu entziehenden Berechtigungen an.
- EIN -Klausel:Gibt die Ebene an, auf der Berechtigungen widerrufen werden sollen.
- VON -Klausel:Gibt den Kontonamen an.
Das oben gezeigte Beispiel geht davon aus, dass Amon die Berechtigungen SELECT, DELETE, INSERT und UPDATE für die Datenbank world_innodb hat, aber Sie möchten das Konto so ändern, dass er nur SELECT-Zugriff hat. Das erste Beispiel widerruft die Privilegien, die es ihm ermöglichen, Änderungen vorzunehmen.
So entziehen Sie das Privileg, anderen Benutzern Privilegien zu erteilen:
REVOKE GRANT OPTION ON world_innodb.* FROM 'Jan'@'localhost';
Das obige Beispiel entzieht Jan die Möglichkeit, anderen Benutzern alle Berechtigungen zu erteilen, die er für die world_innodb-Datenbank besitzt, indem er die GRANT OPTION-Berechtigung von seinem Konto entzieht.
So entziehen Sie alle Privilegien, einschließlich der Gewährung von Privilegien an andere:
REVOKE ALL PRIVILEGES, GRANT OPTION FROM 'Sasha'@'localhost';
Das obige Beispiel widerruft alle Privilegien von Sashas Konto (auf jeder Ebene), indem ALLE PRIVILEGIEN und GRANT OPTION von ihrem Konto widerrufen werden.
Hinweis :Verwenden Sie die SHOW GRANTS-Anweisung, bevor Sie REVOKE ausgeben, um zu bestimmen, welche Berechtigungen widerrufen werden sollen, und danach erneut, um das Ergebnis zu bestätigen.Anfängerhandbuch zur MySQL-BenutzerverwaltungVerständnis der Pluggable-Authentifizierung von MySQL