Detaillierte Erläuterung des Prozesses zum Abfragen von Benutzerberechtigungen mithilfe von MySQL-Anweisungen

Detaillierte Erläuterung des Prozesses zum Abfragen von Benutzerberechtigungen mithilfe von MySQL-Anweisungen

Wie können Sie in MySQL die Berechtigungen anzeigen, die einem Benutzer erteilt wurden? Die den Benutzern gewährten Berechtigungen können in Berechtigungen auf globaler Ebene, Berechtigungen auf Datenbankebene, Berechtigungen auf Tabellenebene, Berechtigungen auf Spaltenebene und Berechtigungen auf Unterprogrammebene unterteilt werden. Die spezifischen Kategorien sind wie folgt:

Globale Ebene

Globale Berechtigungen gelten für alle Datenbanken auf einem bestimmten Server. Diese Berechtigungen werden in der Tabelle mysql.user gespeichert. GRANT ALL ON *.* und REVOKE ALL ON *.* erteilen und widerrufen nur globale Privilegien.

Datenbankebene

Datenbankberechtigungen gelten für alle Objekte in einer bestimmten Datenbank. Diese Berechtigungen werden in den Tabellen mysql.db und mysql.host gespeichert. GRANT ALL ON db_name.* und REVOKE ALL ON db_name.* erteilen und entziehen nur Datenbankberechtigungen.

Tabellenebene

Tabellenberechtigungen gelten für alle Spalten einer bestimmten Tabelle. Diese Berechtigungen werden in der Tabelle mysql.tables_priv gespeichert. Mit den Befehlen GRANT ALL ON db_name.tbl_name und REVOKE ALL ON db_name.tbl_name können nur Tabellenberechtigungen gewährt und widerrufen werden.

Spaltenebene

Spaltenberechtigungen gelten für eine einzelne Spalte in einer bestimmten Tabelle. Diese Berechtigungen werden in der Tabelle mysql.columns_priv gespeichert. Wenn Sie REVOKE verwenden, müssen Sie dieselben Spalten angeben, die gewährt werden sollen.

Unterprogrammebene

Die Berechtigungen CREATE ROUTINE, ALTER ROUTINE, EXECUTE und GRANT gelten für gespeicherte Routinen. Diese Berechtigungen können auf globaler Ebene oder auf Datenbankebene gewährt werden. Außerdem können diese Berechtigungen, mit Ausnahme von CREATE ROUTINE, auf Unterprogrammebene gewährt werden und werden in der Tabelle mysql.procs_priv gespeichert.

1: Lassen Sie uns dann ein Testkonto erstellen und Berechtigungen auf globaler Ebene erteilen . Wie unten dargestellt:

mysql> grant select,insert auf *.* an test@'%', identifiziert durch 'test';
Abfrage OK, 0 Zeilen betroffen (0,01 Sek.)
mysql> Berechtigungen leeren;
Abfrage OK, 0 Zeilen betroffen (0,00 Sek.)
MySQL>

Anschließend können Sie mit den folgenden beiden Methoden die zum Test erteilten Berechtigungen abfragen. Wie unten dargestellt:

mysql> Berechtigungen für Test anzeigen;
+-----------------------------------------------------------------------------------------------------------+
| Zuschüsse für test@% |
+-----------------------------------------------------------------------------------------------------------+
| GRANT SELECT, INSERT ON *.* TO 'test'@'%' IDENTIFIZIERT DURCH PASSWORT '*94BDCEBE19083CE2A1F959FD02F964C7AF4CFC29' |
+-----------------------------------------------------------------------------------------------------------+
1 Zeile im Satz (0,00 Sek.)
mysql> wähle * aus mysql.user, wobei Benutzer='test'\G;
*************************** 1. Reihe ***************************
Gastgeber: %
Benutzer: test
Passwort: *94BDCEBE19083CE2A1F959FD02F964C7AF4CFC29
Select_priv: Ja
Insert_priv: Y
Update_priv: N
Löschpriv: N
Create_priv: N
Drop_priv: N
Reload_priv: N
Shutdown_priv: N
Prozesspriv: N
File_priv: N
Grant_priv: N
Referenzen_priv: N
Index_priv: N
Alter_priv: N
Show_db_priv: N
Super_priv: N
Create_tmp_table_priv: N
Lock_tables_priv: N
Execute_priv: N
Repl_slave_priv: N
Repl_client_priv: N
Create_view_priv: N
Show_view_priv: N
Create_routine_priv: N
Alter_routine_priv: N
Create_user_priv: N
Event_priv: N
Trigger_priv: N
Create_tablespace_priv: N
SSL-Typ: 
ssl_chiffre: 
x509_issuer: 
x509_Betreff: 
max_fragen: 0
max_updates: 0
max_Verbindungen: 0
Max_Benutzerverbindungen: 0
plugin:mysql_native_password
Authentifizierungszeichenfolge: 
password_expired: N
1 Zeile im Satz (0,04 Sek.)
FEHLER: 
Keine Abfrage angegeben
MySQL> 

2: Lassen Sie uns dann ein Testkonto erstellen und Berechtigungen auf Datenbankebene erteilen. Wie unten dargestellt:

mysql> Benutzertest löschen;
Abfrage OK, 0 Zeilen betroffen (0,00 Sek.)
mysql> gewähre select,insert,update,delete auf MyDB.* an test@'%', identifiziert durch 'test';
Abfrage OK, 0 Zeilen betroffen (0,01 Sek.)
MySQL> 
mysql> select * from mysql.user where user='test'\G; --Sie sehen, dass keine Autorisierung vorliegt.
mysql> wähle * aus mysql.db, wobei Benutzer='test'\G;
*************************** 1. Reihe ***************************
Gastgeber: %
Datenbank: MeineDB
Benutzer: test
Select_priv: Ja
Insert_priv: Y
Update_priv: J
Delete_priv: J
Create_priv: N
Drop_priv: N
Grant_priv: N
Referenzen_priv: N
Index_priv: N
Alter_priv: N
Create_tmp_table_priv: N
Lock_tables_priv: N
Create_view_priv: N
Show_view_priv: N
Create_routine_priv: N
Alter_routine_priv: N
Execute_priv: N
Event_priv: N
Trigger_priv: N
1 Zeile im Satz (0,04 Sek.)
FEHLER: 
Keine Abfrage angegeben
MySQL> 
mysql> Berechtigungen für Test anzeigen;
+------------------------------------------------------------------------------------------------------------------+
| Zuschüsse für test@% |
+------------------------------------------------------------------------------------------------------------------+
| GRANT USAGE ON *.* AN 'test'@'%' IDENTIFIZIERT DURCH PASSWORT '*94BDCEBE19083CE2A1F959FD02F964C7AF4CFC29' |
| GRANT SELECT, INSERT, UPDATE, DELETE ON `MyDB`.* TO 'test'@'%' |
+------------------------------------------------------------------------------------------------------------------+
2 Zeilen im Satz (0,00 Sek.)
MySQL>

3: Lassen Sie uns dann ein Testkonto erstellen und Berechtigungen auf Tabellenebene erteilen. Wie unten dargestellt:

mysql> Benutzertest löschen;
Abfrage OK, 0 Zeilen betroffen (0,00 Sek.)
mysql> Berechtigungen leeren;
Abfrage OK, 0 Zeilen betroffen (0,00 Sek.)
mysql> gewähre alles auf MyDB.kkk an test@'%', identifiziert durch 'test';
Abfrage OK, 0 Zeilen betroffen (0,01 Sek.)
MySQL> 
mysql> Berechtigungen für Test anzeigen;
+------------------------------------------------------------------------------------------------------------------+
| Zuschüsse für test@% |
+------------------------------------------------------------------------------------------------------------------+
| GRANT USAGE ON *.* AN 'test'@'%' IDENTIFIZIERT DURCH PASSWORT '*94BDCEBE19083CE2A1F959FD02F964C7AF4CFC29' |
| GEWÄHREN SIE 'test'@'%' ALLE PRIVILEGIEN FÜR `MyDB`.`kkk` |
+------------------------------------------------------------------------------------------------------------------+
2 Zeilen im Satz (0,00 Sek.)
mysql> wähle * aus mysql.tables_priv\G;
*************************** 1. Reihe ***************************
Gastgeber: %
Datenbank: MeineDB
Benutzer: test
Tabellenname: kkk
Gewährer: root@localhost
Zeitstempel: 0000-00-00 00:00:00
Table_priv: Auswählen, Einfügen, Aktualisieren, Löschen, Erstellen, Löschen, Verweise, Index, Ändern, Ansicht erstellen, Ansicht anzeigen, Trigger
Column_priv: 
1 Zeile im Satz (0,01 Sek.)
FEHLER: 
Keine Abfrage angegeben
MySQL> 

4: Lassen Sie uns dann ein Testkonto erstellen und Berechtigungen auf Spaltenebene erteilen. Wie unten dargestellt:

mysql> Benutzertest löschen;
Abfrage OK, 0 Zeilen betroffen (0,00 Sek.)
mysql> Berechtigungen leeren;
Abfrage OK, 0 Zeilen betroffen (0,00 Sek.)
mysql> grant select (id, col1) auf MyDB.TEST1 für test@'%', identifiziert durch 'test';
Abfrage OK, 0 Zeilen betroffen (0,01 Sek.)
mysql> Berechtigungen leeren;
Abfrage OK, 0 Zeilen betroffen (0,00 Sek.)
MySQL> 
mysql> wähle * aus mysql.columns_priv;
+------+------+------+------------+----------+---------------------+-------------+
| Host | Db | Benutzer | Tabellenname | Spaltenname | Zeitstempel | Spaltenpriv |
+------+------+------+------------+----------+---------------------+-------------+
| % | MeineDB | Test | TEST1 | ID | 0000-00-00 00:00:00 | Auswählen |
| % | MeineDB | test | TEST1 | col1 | 0000-00-00 00:00:00 | Auswählen |
+------+------+------+------------+----------+---------------------+-------------+
2 Zeilen im Satz (0,00 Sek.)
mysql> Berechtigungen für Test anzeigen;
+------------------------------------------------------------------------------------------------------------------+
| Zuschüsse für test@% |
+------------------------------------------------------------------------------------------------------------------+
| GRANT USAGE ON *.* AN 'test'@'%' IDENTIFIZIERT DURCH PASSWORT '*94BDCEBE19083CE2A1F959FD02F964C7AF4CFC29' |
| GRANT SELECT (id, col1) ON `MyDB`.`TEST1` TO 'test'@'%' |
+------------------------------------------------------------------------------------------------------------------+
2 Zeilen im Satz (0,00 Sek.)
MySQL> 

5: Lassen Sie uns dann ein Testkonto namens „Test“ erstellen und ihm Berechtigungen auf Unterprogrammebene erteilen. Wie unten dargestellt:

mysql> VERFAHREN LÖSCHEN, WENN PRC_TEST VORHANDEN IST;
Abfrage OK, 0 Zeilen betroffen (0,00 Sek.)
mysql> TRENNUNGSZEICHEN //
mysql> PROZEDUR ERSTELLEN PRC_TEST()
-> BEGIN
-> AUSWÄHLEN * VON kkk;
-> ENDE //
Abfrage OK, 0 Zeilen betroffen (0,00 Sek.)
mysql> TRENNUNGSZEICHEN ;
mysql> gewähre die Ausführung der Prozedur MyDB.PRC_TEST an test@'%', identifiziert durch 'test';
Abfrage OK, 0 Zeilen betroffen (0,01 Sek.)
mysql> Berechtigungen leeren;
Abfrage OK, 0 Zeilen betroffen (0,00 Sek.)
MySQL> 
mysql> Berechtigungen für Test anzeigen;
+------------------------------------------------------------------------------------------------------------------+
| Zuschüsse für test@% |
+------------------------------------------------------------------------------------------------------------------+
| GRANT USAGE ON *.* AN 'test'@'%' IDENTIFIZIERT DURCH PASSWORT '*94BDCEBE19083CE2A1F959FD02F964C7AF4CFC29' |
| GRANT EXECUTE ON PROCEDURE `MyDB`.`prc_test` TO 'test'@'%' |
+------------------------------------------------------------------------------------------------------------------+
2 Zeilen im Satz (0,00 Sek.)
mysql> wähle * aus mysql.procs_priv, wobei Benutzer='test';
+------+------+------+--------------+--------------+----------------+-----------+--------------------+
| Host | Db | Benutzer | Routinename | Routinetyp | Gewährer | Proc_priv | Zeitstempel |
+------+------+------+--------------+--------------+----------------+-----------+--------------------+
| % | MyDB | Test | PRC_TEST | VERFAHREN | root@localhost | Ausführen | 0000-00-00 00:00:00 |
+------+------+------+--------------+--------------+----------------+-----------+--------------------+
1 Zeile im Satz (0,00 Sek.)
MySQL> 

Wenn Sie also die einem Benutzer erteilten Berechtigungen anzeigen müssen, müssen Sie die erteilten Berechtigungen dieser fünf Ebenen anzeigen. Überprüfen Sie von oben nach unten oder von klein nach hoch nacheinander die den einzelnen Ebenen erteilten Berechtigungen.

Das Obige ist der vollständige Inhalt dieses Artikels. Ich hoffe, er wird für jedermanns Studium hilfreich sein. Ich hoffe auch, dass jeder 123WORDPRESS.COM unterstützen wird.

Das könnte Sie auch interessieren:
  • SQL-Abfrageanweisung zum Ermitteln der Anzahl aufeinanderfolgender Anmeldetage eines Benutzers
  • MySql legt die angegebenen Benutzerdatenbankansichtsabfrageberechtigungen fest
  • Detaillierte Erläuterung der Idee der Hive-SQL-Abfrage kontinuierlich aktiver angemeldeter Benutzer

<<:  Vue integriert Tencent Map zur Implementierung der API (mit DEMO)

>>:  Mounten Sie die Festplatte in einem Verzeichnis unter Ubuntu 18.04

Artikel empfehlen

Detailliertes Tutorial zur Installation von Docker auf CentOS 7.5

Einführung in Docker Docker ist eine Open-Source-...

Kompilieren Sie CPP-Dateien mit G++ in Ubuntu

Als ich die CPP-Datei zum ersten Mal mit G++ komp...

JavaScript verwendet Canvas zum Zeichnen von Koordinaten und Linien

In diesem Artikel wird der spezifische Code zur V...

MySQL-Methode zur Sperrensteuerung für Parallelität

Inhaltsverzeichnis Vorwort 1. Optimistisches Sper...

Memcached-Methode zum Erstellen eines Cache-Servers

Vorwort Viele Webanwendungen speichern Daten in e...

Erste Schritte Tutorial für Anfänger ⑨: So erstellen Sie eine Portal-Website

Darüber hinaus wird eine mit einem Blog-Programm e...

React implementiert eine mehrkomponentige Wertübertragungsfunktion über Conetxt

Die Wirkung dieser Funktion ist ähnlich wie vue的p...

Verwendung der MySQL DATE_FORMAT-Funktion

Angenommen, Taobao animiert die Leute zum Einkauf...

impress.js Präsentationsschicht-Framework (Demonstrationstool) - erste Erfahrungen

Ich habe ein halbes Jahr lang nicht gebloggt, wofü...

Ein Artikel zum Verständnis von MySQL Index Pushdown (ICP)

Inhaltsverzeichnis 1. Einleitung 2. Grundsatz Pra...

W3C Tutorial (2): W3C Programme

Der W3C-Standardisierungsprozess ist in 7 verschi...

Detaillierte Erklärung der JS-Ereignisdelegation

1. Jede Funktion ist ein Objekt und belegt Speich...