Detaillierte Erklärung der MySQL-Berechtigungssteuerung

Detaillierte Erklärung der MySQL-Berechtigungssteuerung

MySQL-Berechtigungskontrolle

Als DBA müssen Sie mit Berechtigungen in MySQL vertraut sein. Die Kontrolle der Berechtigungen in MySQL ist in drei Ebenen unterteilt:

  • Globale Verwaltungsberechtigungen, anwendbar auf die gesamte MySQL-Instanz
  • Berechtigungen auf Datenbankebene gelten für eine bestimmte Datenbank oder für alle Datenbanken.
  • Berechtigungen auf Datenbankobjektebene gelten für bestimmte Datenbankobjekte (Tabellen, Ansichten usw.) oder alle Datenbankobjekte.

Hier listen wir alle Berechtigungen in MySQL auf und geben abschließend einen Sonderfall an, um einen kleinen Fehler in der MySQL-Berechtigungssteuerung widerzuspiegeln. Schauen wir uns zunächst die Berechtigungsliste an. Die Berechtigungen sind in alphabetischer Reihenfolge angeordnet:

•Alle/Alle Privilegien
Diese Berechtigung stellt alle Berechtigungen auf globaler oder datenbankweiter Objektebene dar.
•Ändern
Mit dieser Berechtigung können Sie die Tabellenstruktur ändern. Sie muss jedoch von den Berechtigungen zum Erstellen und Einfügen begleitet werden.
Wenn Sie eine Tabelle umbenennen möchten, müssen Sie über die Berechtigung zum Ändern und Löschen der Originaltabelle sowie zum Erstellen und Einfügen einer neuen Tabelle verfügen.
•Routine ändern
Mit dieser Berechtigung können Sie gespeicherte Prozeduren und Funktionen ändern oder löschen.
•Erstellen
Mit dieser Berechtigung können Sie neue Datenbanken und Tabellen erstellen.
•Routine schaffen
Mit dieser Berechtigung können Sie gespeicherte Prozeduren und Funktionen erstellen.
• Tablespace erstellen
Mit dieser Berechtigung können Sie Tablespaces und Protokollgruppen erstellen, ändern und löschen.
• Temporäre Tabellen erstellen
Mit dieser Berechtigung können Sie eine temporäre Tabelle erstellen.
•Benutzer erstellen
Mit dieser Berechtigung können Sie Benutzer erstellen, ändern, löschen und umbenennen.
•Ansicht erstellen
Mit dieser Berechtigung können Sie eine Ansicht erstellen.
•Löschen
Mit dieser Berechtigung können Sie Zeilendaten löschen.
•Fallen
Mit dieser Berechtigung können Sie Datenbanken, Tabellen und Ansichten löschen, einschließlich des Befehls „truncate table“.
•Ereignis
Mit dieser Berechtigung können Sie MySQL-Ereignisse abfragen, erstellen, ändern und löschen.
•Ausführen
Diese Berechtigung erlaubt die Ausführung gespeicherter Prozeduren und Funktionen.
•Datei
Diese Berechtigung erlaubt das Lesen und Schreiben von Datenträgerdateien in Verzeichnissen, auf die MySQL zugreifen kann.
Zu den verfügbaren Befehlen gehören „Daten in Datei laden“, „... in Ausgabedatei auswählen“ und die Funktion „Datei laden ()“.
• Gewährungsoption
Diese Berechtigung gibt an, ob dieser Benutzer die Berechtigungen, die Sie anderen Benutzern erteilt haben, autorisieren oder widerrufen darf.
•Index
Diese Berechtigung gibt an, ob das Erstellen und Löschen von Indizes zulässig ist.
•Einfügen
Diese Berechtigung gibt an, ob Daten in die Tabelle eingefügt werden können. Die Einfügeberechtigung ist auch beim Ausführen der Anweisungen „Analyze Table“, „Optimize Table“ und „Repair Table“ erforderlich.
•Sperren
Mit dieser Berechtigung können Sie eine Tabelle mit Auswahlberechtigung sperren, um zu verhindern, dass andere Links diese Tabelle lesen oder in sie schreiben.
•Verfahren
Mit dieser Berechtigung können Sie Prozessinformationen in MySQL anzeigen, z. B. die Ausführung von showprocesslist,
•Referenz
Diese Berechtigung wurde nach Version 5.7.6 eingeführt und gibt an, ob die Erstellung von Fremdschlüsseln zulässig ist.
•Neu laden
Diese Berechtigung ermöglicht die Ausführung des Flush-Befehls, der angibt, dass die Berechtigungstabelle erneut in den Systemspeicher geladen wird. Der Aktualisierungsbefehl bedeutet, dass die Protokolldatei geschlossen und erneut geöffnet und alle Tabellen aktualisiert werden.
•Replikationsclient
Diese Berechtigung ermöglicht die Ausführung der Befehle „Show Master Status“, „Show Slave Status“ und „Show Binary Logs“.
•Replikationssklave
Diese Berechtigung ermöglicht es dem Slave-Host, über diesen Benutzer eine Verbindung zum Master herzustellen, um eine Master-Slave-Replikationsbeziehung herzustellen.
•Wählen
Mit dieser Berechtigung können Sie Daten aus der Tabelle anzeigen. Die Auswahlberechtigung ist auch beim Ausführen von Update-/Delete-Anweisungen erforderlich, die Where-Bedingungen enthalten.
•Datenbanken anzeigen
Diese Berechtigung bedeutet, dass Sie alle Datenbanknamen anzeigen können, indem Sie den Befehl „show databases“ ausführen.
•Ansicht anzeigen
Diese Berechtigung bedeutet, dass Sie die von der Ansicht erstellten Anweisungen anzeigen können, indem Sie den Befehl „show create view“, „mysqladmin processlist“, „show engine“ und andere Befehle ausführen.
•Abschalten
Mit dieser Berechtigung können Sie die Datenbankinstanz herunterfahren. Führen Sie Anweisungen aus, einschließlich mysqladmin shutdown
•Super
Mit dieser Berechtigung können Sie eine Reihe von Datenbankverwaltungsbefehlen ausführen, darunter den Kill-Befehl zum erzwungenen Schließen einer Verbindung, den Befehl „Change Master to“ zum Erstellen einer Replikationsbeziehung und den Befehl „Create/Alter/Drop Server“.
•Auslösen
Mit dieser Berechtigung können Sie Trigger erstellen, löschen, ausführen und anzeigen.
•Aktualisieren
Mit dieser Berechtigung können Sie die Daten in der Tabelle ändern.
•Verwendung
Diese Berechtigung ist die Standardberechtigung nach dem Erstellen eines Benutzers, die selbst die Verbindungs-Login-Berechtigung darstellt.

Berechtigungssystemtabelle

Die Berechtigungen werden in den Systemtabellen „MySQL-Datenbankbenutzer“, „db“, „tables_priv“, „columns_priv“ und „procs_priv“ gespeichert, die nach dem Start der MySQL-Instanz in den Speicher geladen werden.

• Benutzertabelle:

Speichert Benutzerkontoinformationen und Berechtigungen auf globaler Ebene (alle Datenbanken), die bestimmen, welche Benutzer von welchen Hosts auf die Datenbankinstanz zugreifen können. Wenn eine globale Berechtigung vorhanden ist, bedeutet dies, dass alle Datenbanken über diese Berechtigung verfügen.
• Db-Tabelle:

Speichert Berechtigungen auf Datenbankebene, die bestimmen, welche Benutzer von welchen Hosts auf diese Datenbank zugreifen können
• Tables_priv-Tabelle:

Speichert Berechtigungen auf Tabellenebene, die bestimmen, welche Benutzer von welchen Hosts auf diese Tabelle in der Datenbank zugreifen können
• Columns_priv-Tabelle:

Speichert Berechtigungen auf Spaltenebene, die bestimmen, welche Benutzer von welchen Hosts auf dieses Feld in der Datenbanktabelle zugreifen können
• Procs_priv-Tabelle:

Speichert Berechtigungen auf gespeicherter Prozedur- und Funktionsebene

So werden MySQL-Berechtigungen nach der Änderung wirksam

• Nach dem Ausführen der Befehle „Grant“, „Revoke“, „setpassword“ oder „renameuser“ zum Ändern von Berechtigungen lädt MySQL die geänderten Berechtigungsinformationen automatisch in den Systemspeicher.
• Wenn Sie Einfüge-/Aktualisierungs-/Löschvorgänge in der obigen Systemberechtigungstabelle durchführen, müssen Sie den Befehl zum Aktualisieren der Berechtigungen ausführen, um sie mit dem Systemspeicher zu synchronisieren. Die Befehle zum Aktualisieren der Berechtigungen umfassen: flush privileges/mysqladmin flush-privileges/mysqladmin reload
• Wenn Sie die Berechtigungen auf Tabellen- und Spaltenebene ändern, werden die neuen Berechtigungen beim nächsten Ausführen des Clients wirksam.
• Wenn Sie Berechtigungen auf Datenbankebene ändern, werden die neuen Berechtigungen wirksam, nachdem der Client den Befehl „use database“ ausgeführt hat.
• Wenn Sie die Berechtigungen auf globaler Ebene ändern, müssen Sie die Verbindung neu erstellen, damit die neuen Berechtigungen wirksam werden
• --skip-grant-tables kann alle Systemberechtigungstabellen überspringen und allen Benutzern die Anmeldung gestatten. Dies wird nur vorübergehend unter besonderen Umständen verwendet.

Erteilen und Entziehen von Berechtigungen

Beim Erteilen von Berechtigungen wird normalerweise die Grant-Anweisung verwendet. Nehmen wir als Beispiel eine Abfrage. Die Details lauten wie folgt:

Gewähren Sie Benutzer@Host die Auswahl von db_name.table_name.

Wenn Sie einem Konto Berechtigungen für alle Tabellen in einer Datenbank erteilen, müssen Sie table_name in der obigen Anweisung in * ändern. Wenn Sie Berechtigungen für alle Tabellen in allen Datenbanken in der Datenbank erteilen, müssen Sie sowohl db_name als auch table_name in * ändern.

Die Widerrufssyntax wird normalerweise zum Widerrufen von Berechtigungen verwendet. Die Verwendung erfolgt wie folgt am Beispiel einer Abfrage:

widerrufen Sie die Auswahl von db_name.table_name von user@host;

Es ist zu beachten, dass der Unterschied zwischen „it“ und „grant“ darin besteht, dass der letzte Teil der Anweisung von „to“ in „from“ geändert wird.

Ein Sonderfall

Als ich heute Online-Geschäfte abwickelte, musste ich Berechtigungen öffnen. Ich wollte die gespeicherte Prozedur vom Workbench-Client aus anzeigen. Meine erste Reaktion bestand darin, direkt Ausführungsberechtigungen zu erteilen. Als Ergebnis konnte der Geschäftspartner die gespeicherte Prozedur nach Erteilung der Ausführungsberechtigungen immer noch nicht anzeigen. Ich ging hinüber, um dies zu überprüfen, und nachdem ich eine Verbindung zur Datenbank hergestellt hatte, wurde Folgendes angezeigt:

mysql> Datenbanken anzeigen;
+--------------------+
| Datenbank |
+--------------------+
| Informationsschema |
|AAA|
+--------------------+
2 Zeilen im Satz (0,00 Sek.)
mysql> AAA verwenden
Datenbank geändert
mysql> Prozedurstatus anzeigen\G
*************************** 1. Reihe ***************************
     Datenbank: CVS
    Name: ba_get_grow
    Typ: VERFAHREN
    Definierer: [email protected]
   Geändert: 26.02.2019 ::
    Erstellt: 26.02.2019 ::
  Sicherheitstyp: DEFINER
    Kommentar:
Zeichensatzclient: utf8
Sortierverbindung: utf8_general_ci
 Datenbanksortierung: utf8_general_ci

mysql> zeige Erstellungsprozedur ba_get_grow\G
*************************** 1. Reihe ***************************
   Prozedur: ba_get_grow
   SQL-Modus:
 Prozedur erstellen: NULL
Zeichensatzclient: utf8
Sortierverbindung: utf8_general_ci
 Datenbanksortierung: utf8_general_ci
 Zeile im Satz (0,00 Sek.)

Es ist ersichtlich, dass der Wert der Prozedur „create“ in Zeile 29 NULL ist und der Inhalt der Prozedur nicht angezeigt wird. Natürlich kann die Prozedur nicht angezeigt werden. Was sollen wir in diesem Fall tun?

Ich dachte, dass die Tabelle mysql.proc Informationen zu gespeicherten Prozeduren enthält, also habe ich der Tabelle mysql.proc mit der folgenden Methode eine Nur-Lese-Berechtigung erteilt:

[email protected]:(keine) 22:35:07>>Grant Select für `mysql`.proc an 'Benutzer'@'Host';
Abfrage OK, 0 Zeilen betroffen (0,00 Sek.)

Melden Sie sich erneut beim Client an. Sie werden feststellen, dass der Inhalt der gespeicherten Prozedur bereits wie folgt sichtbar ist:

mysql> Datenbanken anzeigen;
+--------------------+
| Datenbank |
+--------------------+
| Informationsschema |
|AAA|
+--------------------+
2 Zeilen im Satz (0,00 Sek.)

mysql> Datenbanken anzeigen;
+--------------------+
| Datenbank |
+--------------------+
| Informationsschema |
|AAA|
|mysql |
+--------------------+
3 Zeilen im Satz (0,00 Sek.)

mysql> zeige Erstellungsprozedur ba_get_grow\G
*************************** 1. Reihe ***************************
   Prozedur: ba_get_grow
   SQL-Modus:
 Prozedur erstellen: CREATE DEFINER=`dba_admin`@`127.0.0.1` PROCEDURE `ba_get_grow`(
 in p_table_info varchar(),
 raus out_retmsg varchar()
)
BEGINNEN
 XXXXXXXXX
 XXXXXXXXX
 XXXXXXXXX
 XXXXXXXXX
ENDE
Zeichensatzclient: utf8
Sortierverbindung: utf8_general_ci
 Datenbanksortierung: utf8_general_ci
 Zeile im Satz (0,00 Sek.)

Oben finden Sie den detaillierten Inhalt der MySQL-Berechtigungskontrolle. Weitere Informationen zur MySQL-Berechtigungskontrolle finden Sie in den anderen verwandten Artikeln auf 123WORDPRESS.COM!

Das könnte Sie auch interessieren:
  • Eine kurze Erläuterung der MySQL-Benutzerberechtigungstabelle
  • Implementierung der MySQL-Benutzerrechteverwaltung
  • Detaillierte Erläuterung der MySQL-Benutzerrechteverwaltung
  • Detailanalyse der MySQL-Berechtigungskontrolle
  • Detailliertes Tutorial zum Erstellen eines Benutzers in MySQL und zum Erteilen von Benutzerberechtigungen
  • Problem mit Berechtigungen zum Ändern gespeicherter Prozeduren in MySQL
  • So legen Sie Remotezugriffsberechtigungen in MySQL 8.0 fest
  • Fallstudie zu MySQL-Berechtigungen und Datenbankdesign

<<:  Beispielanalyse für die Farbabstimmung einer Webseite: Analyse der Webseite mit grüner Farbabstimmung

>>:  HTML-strukturierte Implementierungsmethode

Artikel empfehlen

Installations- und Verwendungsschritte für Docker Compose

Inhaltsverzeichnis 1. Was ist Docker Compose? 2. ...

Die Funktionen und Unterschiede zwischen deaktiviert und schreibgeschützt

1: schreibgeschützt dient zum Sperren dieses Steue...

Implementierung der automatischen Vervollständigung von Docker-Befehlen

Vorwort Ich weiß nicht, wie lange dieser Freund D...

Schritte zum Aktivieren von TLS in Docker für eine sichere Konfiguration

Vorwort Ich hatte zuvor die 2375 Remote API von D...

So fügen Sie Nginx dynamisch Module hinzu

Vorne geschrieben Nachdem wir Nginx basierend auf...

Warum ist es langsam, wenn Limit- und Offset-Paging-Szenarien verwendet werden?

Beginnen wir mit einer Frage Als ich vor fünf Jah...

Installationsmethode für komprimierte MySQL 5.6-Pakete

Es gibt zwei Installationsmethoden für MySQL: MSI...

Empfehlen Sie einige nützliche Lernmaterialien für Neulinge im Webdesign

Viele Leute haben mich auch gefragt, welche Büche...

Was ist eine HTML-Datei? So öffnen Sie eine HTML-Datei

HTML steht für Hypertext Markup Language. Heutzut...