Diese Frage ist eine Diskussion unter Internetnutzern in einer WeChat-Gruppe über MySQL-Berechtigungen. Es gibt eine solche Geschäftsanforderung (unten sind seine Originalworte): Da viele Funktionen von MySQL auf Primärschlüsseln basieren, möchte ich den Zabbix-Benutzer verwenden, um alle Tabellen in der Geschäftsdatenbank zu überwachen und festzustellen, ob Primärschlüssel festgelegt wurden. Die Monitoring-Erklärung lautet: VON information_schema.tables t1 LINKER ÄUSSERER JOIN information_schema.table_constraints t2 EIN t1.table_schema = t2.table_schema UND t1.Tabellenname = t2.Tabellenname UND t2.constraint_name IN ( 'PRIMARY' ) Wobei t2.table_name NULL ist UND t1.table_schema NICHT IN ( 'information_schema', 'myawr', 'mysql', 'Leistungsschema', 'langsamlog', 'sys', 'test') UND t1.table_type = 'BASISTABELLE' Ich möchte jedoch nicht, dass der Zabbix-Benutzer die Daten in der Geschäftsdatenbank lesen kann. Wenn dem Zabbix-Benutzer die Berechtigung zum Lesen der Geschäftsdatenbankdaten verweigert wird, enthalten information_schema.TABLES und information_schema.TABLE_CONSTRAINTS nicht die Tabelleninformationen der Geschäftsdatenbank und es lässt sich nicht ermitteln, ob die Geschäftsdatenbanktabelle einen Primärschlüssel besitzt. Gibt es eine Möglichkeit, Zabbix daran zu hindern, die Daten der Geschäftsdatenbank zu lesen, während überwacht wird, ob für die Tabelle der Geschäftsdatenbank kein Primärschlüssel festgelegt ist ? Zunächst müssen wir eine Tatsache wissen: Die Ansicht unter „information_schema“ kann einem bestimmten Benutzer nicht autorisiert werden. Wie unten gezeigt mysql> GRANT SELECT ON information_schema.TABLES TO test@'%'; FEHLER 1044 (42000): Dem Benutzer „root“@„localhost“ wurde der Zugriff auf die Datenbank „information_schema“ verweigert. Weitere Informationen zu diesem Problem finden Sie in diesem Artikel auf mos: Warum das Festlegen von Berechtigungen für INFORMATION_SCHEMA nicht funktioniert (Dokument-ID 1941558.1) GILT FÜR: MySQL Server – Version 5.6 und höher Die Informationen in diesem Dokument gelten für alle Plattformen. ZIEL Um zu bestimmen, wie MySQL-Berechtigungen für INFORMATION_SCHEMA funktionieren. LÖSUNG Eine einfache GRANT-Anweisung würde etwa so aussehen: mysql> grant select,execute auf information_schema.* an 'dbadm'@'localhost'; FEHLER 1044 (42000): Dem Benutzer „root“@„localhost“ wurde der Zugriff auf die Datenbank „information_schema“ verweigert. Der Fehler weist darauf hin, dass der Superuser nicht über die Berechtigung zum Ändern der Zugriffsberechtigungen für das Informationsschema verfügt. Dies scheint im Widerspruch zu stehen zu dem, was normalerweise für das Root-Konto mit SUPER-Berechtigungen gilt. Der Grund für diesen Fehler liegt darin, dass es sich bei der Datenbank information_schema eigentlich um eine virtuelle Datenbank handelt, die beim Starten des Dienstes erstellt wird. Es besteht aus Tabellen und Ansichten, die dazu dienen, die Server-Metadaten, d. h. Details aller Tabellen, Prozeduren usw. im Datenbankserver, zu verfolgen. Wenn man sich also speziell den obigen Befehl ansieht, sieht man dort einen Versuch, dieser spezialisierten Datenbank die Berechtigungen SELECT und EXECUTE hinzuzufügen. Die Option „SELECT“ ist jedoch nicht erforderlich, da alle Benutzer die Möglichkeit haben, die Tabellen in der Datenbank „information_schema“ zu lesen. Daher ist diese Option redundant. Die Option EXECUTE ist nicht sinnvoll, da Sie in dieser speziellen Datenbank keine Prozeduren erstellen dürfen. Es besteht auch keine Möglichkeit, die Tabellen hinsichtlich INSERT, UPDATE, DELETE usw. zu ändern, sodass die Berechtigungen fest codiert und nicht pro Benutzer verwaltet werden. Wie lässt sich also dieses Autorisierungsproblem lösen? Eine direkte Autorisierung funktioniert nicht, daher können wir dieses Problem nur umgehen und die Autorisierung indirekt implementieren. Die Idee ist folgende: Erstellen Sie zuerst eine gespeicherte Prozedur (Benutzerdatenbank), die die Anzahl der Tabellen ohne Primärschlüssel ermittelt, und gewähren Sie sie dann dem Testbenutzer. TRENNUNGSZEICHEN // CREATE DEFINER=`root`@`localhost` PROCEDURE `monitor_ohne_primärschlüssel`() BEGINNEN ANZAHL AUSWÄHLEN(*) VON information_schema.tables t1 LINKER ÄUSSERER JOIN information_schema.table_constraints t2 EIN t1.table_schema = t2.table_schema UND t1.Tabellenname = t2.Tabellenname UND t2.constraint_name IN ( 'PRIMARY' ) Wobei t2.table_name NULL ist UND t1.table_schema NICHT IN ( 'information_schema', 'myawr', 'mysql', 'Leistungsschema', 'langsamlog', 'sys', 'test') UND t1.table_type = 'BASISTABELLE'; ENDE // TRENNUNGSZEICHEN ; mysql> GRANT EXECUTE ON PROCEDURE moitor_without_primarykey TO 'test'@'%'; Abfrage OK, 0 Zeilen betroffen (0,02 Sek.) An diesem Punkt kann der Test Objekte unter information_schema indirekt abfragen. mysql> wähle aktuellen_Benutzer(); +----------------+ | aktueller_Benutzer() | +----------------+ | Test@% | +----------------+ 1 Zeile im Satz (0,00 Sek.) mysql> rufe monitor_without_primarykey auf; +----------+ | ANZAHL(*) | +----------+ | 6 | +----------+ 1 Zeile im Satz (0,02 Sek.) Abfrage OK, 0 Zeilen betroffen (0,02 Sek.) Überprüfen Sie die Berechtigungen des Testbenutzers. mysql> Berechtigungen für Test@'%' anzeigen; +----------------------------------------------------------------------------------+ | Zuschüsse für test@% | +----------------------------------------------------------------------------------+ | GRANT USAGE ON *.* TO `test`@`%` | | GRANT EXECUTE ON PROCEDURE `zabbix`.`moitor_without_primarykey` TO `test`@`%` | +----------------------------------------------------------------------------------+ 2 Zeilen im Satz (0,00 Sek.) Dies ist das Ende dieses Artikels über MySQL, das die Objektzuweisung im Informationsschema umgeht und FEHLER 1044 (4200) meldet. Weitere relevante Inhalte zu MySQL FEHLER 1044 (4200) finden Sie in den vorherigen Artikeln von 123WORDPRESS.COM oder in den folgenden verwandten Artikeln. Ich hoffe, dass jeder 123WORDPRESS.COM in Zukunft unterstützen wird! Das könnte Sie auch interessieren:
|
<<: Docker-Verbindung – MongoDB-Implementierungsprozess und Codebeispiele
>>: Beispielanalyse der Verwendung von Dockerfile-Textdateien
Inhaltsverzeichnis npm herunterladen Schritt (1) ...
Vorwort MySQL bezeichnet die Schritte Vorbereiten...
Dieser Artikel fasst einige gängige MySQL-Optimie...
Inhaltsverzeichnis Vorne geschrieben Vorsichtsmaß...
In MySQL häufig verwendete Abfragebefehle: mysql&...
Inhaltsverzeichnis 1. Weltkarte 1. Installieren S...
IE10 bietet eine Schaltfläche zum schnellen Lösche...
Das Festlegen der Schriftart für die gesamte Site...
In diesem Artikel wird die spezifische Methode zu...
Windows Server 2019 ist das neueste Server-Betrie...
In meiner Verzweiflung dachte ich plötzlich: Wie i...
Inhaltsverzeichnis 1 Was ist eine Container-Cloud...
Der Code sieht folgendermaßen aus: // Linienstil ...
Wie installiere ich Nginx an einem bestimmten Ort...
Inhaltsverzeichnis Schritt 1: Installation Schrit...