Zusammenfassung der Berechtigungsprobleme bei gespeicherten MySQL-Prozeduren

Zusammenfassung der Berechtigungsprobleme bei gespeicherten MySQL-Prozeduren

Ja, gespeicherte MySQL-Prozeduren scheinen sehr seltene Anwendungsszenarien zu sein. Das Problem entstand bei einem Entwickler, der einen Arbeitsauftrag für einen Berechtigungsantrag übermittelte, für den die Aktivierung bestimmter Berechtigungen erforderlich war.

Dies ist ein ganz normaler Vorgang, aber meiner Meinung nach ist er ziemlich dringend und dringlich. Ehrlich gesagt war ich so sehr mit der Richtungsplanung und -entwicklung beschäftigt, dass ich diese grundlegende Betriebsfunktion übersehen habe. Nachdem ich einige der aktuellen Implementierungsmethoden gesehen habe, hoffe ich immer noch, einige kleine Dinge tun zu können, um diese sich wiederholenden Aufgaben freizugeben.

Natürlich habe ich beschlossen, einen Teil der grundlegenden Arbeit zu übernehmen. Einerseits, um den Druck auf meine Kollegen zu verringern, und andererseits, um ein umfassendes Erlebnis zu schaffen. Denn viele Bedürfnisse und Schmerzpunkte lassen sich durch Übung leicht erfassen. Wenn ich es für unvernünftig halte, wird es in diesem Prozess zwangsläufig einige Verbesserungen geben. Beispielsweise Bereitstellung und Installation sowie Berechtigungsaktivierung. Das Aktivieren von Datenbankberechtigungen ist ein relativ typischer Fall, und das Aktivieren von Berechtigungen für gespeicherte Prozeduren kann sogar dazu führen, dass Menschen ihr Leben hinterfragen.

Das Szenario des Problems ist immer noch sehr einfach. Entwickler müssen einige grundlegende Berechtigungen öffnen und beim Markieren von Berechtigungen die erforderlichen Berechtigungen zum Hinzufügen, Löschen, Ändern und Abfragen sowie DDL-Berechtigungen wie Löschen, Ändern, Erstellen usw. deklarieren. Als ich das sah, hatte ich das Gefühl, dass etwas nicht stimmte. Welche Art von Vorgang würde derart weitreichende Berechtigungen erfordern?

Ich habe einfach meine Position dargelegt. Die Idee des Entwicklers war, das Management zu erleichtern, also habe ich ihn direkt eingestellt. Nach einer kurzen Kommunikation stellte ich fest, dass ihre Anforderungsszenarien tatsächlich sehr routinemäßig waren. Sie mussten einige tägliche Tabellen dynamisch erstellen, sodass die Erstellungsberechtigung nach der Auswertung erteilt werden konnte. Für allgemeine Benutzer wird die Erstellungsberechtigung nicht empfohlen. Der wichtigste Ausgangspunkt ist die Möglichkeit, einige grundlegende Audits für SQL durchzuführen. Selbst manuelle Audits oder Plattform-Audits sind ein notwendiger Prozess. Nach einiger Kommunikation stellten wir fest, dass die aktivierten Berechtigungen schnell gekürzt werden können. Für sie ist es auch notwendig, die Logik der gespeicherten Prozedur zu ändern, da sie sich in bestimmten Szenarien eine flexiblere Kontrolle über die Logik erhoffen.

Okay, das ist die grundlegende Hintergrundeinführung. Erteilen Sie Berechtigungen für Basistabellen und gespeicherte Prozeduren. Ein wichtiger Punkt, den Sie bei gespeicherten Prozeduren beachten sollten, ist die SQL-SICHERHEIT. Die Standarderstellung ist „Definer“. Wenn Sie sie für andere Benutzer öffnen müssen, wird empfohlen, sie auf „Invoker“ festzulegen.

Also ein einfacher Satz:

Ausführung gewähren, Prozedur auf xxx.xxx ändern in xxx@'xxxx';

Leider berichteten Entwickler, dass sie den Inhalt der gespeicherten Prozedur nicht sehen konnten, wenn sie diese über SQLyog oder Navigator öffneten.

Da wir weder die Berechtigung haben, Verfahren auszuwählen, noch Verfahren anzuzeigen, haben wir fast keine Möglichkeit einzugreifen.

Dieses Problem kann mit der Befehlszeile reproduziert werden:

Es gibt keinen wesentlichen Inhalt gespeicherter Prozeduren. Nachdem ich eine Weile damit gekämpft hatte, fand ich heraus, dass es sich um ein altes Problem handelte, das über 10 Jahre alt war.

https://bugs.mysql.com/bug.php?id=20235

Die Lösung des Problems ist eigentlich ganz einfach, man braucht nur diesen Satz:

gewähre select für mysql.proc an xxxx@'xxxx'

Eine feinkörnige Berechtigungskontrolle ist zwar kompliziert, aber dennoch wirksam.

Beispielsweise wissen wir, dass alle Berechtigungen in MySQL sehr umfangreiche Berechtigungen darstellen, aber wir haben möglicherweise keine klare Vorstellung davon, wie viele Arten von Berechtigungen sie enthalten.

Durch eine fein abgestufte Berechtigungskontrolle können wir dies vollständig umkehren.

Erstellen Sie beispielsweise einen Benutzer und erteilen Sie ihm alle Berechtigungen.

mysql> gewähre 'jeanron'@'%', identifiziert durch 'jeanron100', alle Berechtigungen für test.*; 
Abfrage OK, 0 Zeilen betroffen, 1 Warnung (0,00 Sek.)

Die enthaltenen Berechtigungen sind wie folgt:

mysql> Berechtigungen für Jeanron anzeigen; 
+---------------------------------------------------+ 
| Zuschüsse für jeanron@% | 
+---------------------------------------------------+ 
| GRANT USAGE ON *.* TO 'jeanron'@'%' | 
| GEWÄHREN SIE 'jeanron'@'%' ALLE PRIVILEGIEN FÜR `test`.* | 
+---------------------------------------------------+ 
2 Zeilen im Satz (0,00 Sek.)

Lass uns eine Kontraktion machen.

mysql> Einfügen beim Test widerrufen.* von jeanron@'%'; 
Abfrage OK, 0 Zeilen betroffen (0,00 Sek.) 
Nun werden die Berechtigungen aller Privilegien angezeigt.
mysql> Berechtigungen für Jeanron anzeigen; 
| Zuschüsse für jeanron@% 
+-------------------------------------------------------------------------------------------------- 
| GRANT USAGE ON *.* TO 'jeanron'@'%' 
| GRANT SELECT, UPDATE, DELETE, CREATE, DROP, REFERENCES, INDEX, ALTER, CREATE TEMPORARY TABLES, LOCK TABLES, EXECUTE, CREATE VIEW, SHOW VIEW, CREATE ROUTINE, ALTER ROUTINE, EVENT, TRIGGER ON `test`.* TO 'jeanron'@'%' |

In der obigen Frage enthält select on *.* also bereits die feinkörnigen Berechtigungen, die wir brauchen, mysql.proc. Wenn Sie es entschlüsseln möchten, ist es im Grunde diese Routine.

Ergänzung: Werfen wir einen Blick auf das Problem der Berechtigung zur Erstellung gespeicherter MySQL-Prozeduren

Erstens wurden mit dem Erscheinen der gespeicherten MySQL-Prozeduren fünf weitere Benutzerberechtigungen hinzugefügt, von denen sich drei auf gespeicherte Prozeduren bezogen:

  • ALTER ROUTINE Bearbeiten oder Löschen einer gespeicherten Prozedur
  • CREATE ROUTINE Erstellen einer gespeicherten Prozedur
  • EXECUTE führt eine gespeicherte Prozedur aus

Diese drei Berechtigungen werden beim Anlegen eines Benutzers mit GRANT vergeben. Standardmäßig wird eine gespeicherte Prozedur mit den Berechtigungen des Erstellers ausgeführt.

Es ist zu beachten, dass, wenn ein Benutzer die Berechtigung zum Erstellen einer gespeicherten Prozedur hat, er aber nicht über die Berechtigung zum Auswählen, Aktualisieren oder Löschen verfügt, die gespeicherte Prozedur zum Bedienen von Daten zwar erstellt werden kann, der Aufruf der gespeicherten Prozedur aber trotzdem fehlschlägt und ein Berechtigungsfehler zurückgegeben wird, selbst wenn er die Berechtigung zum Ausführen der gespeicherten Prozedur hat. Wenn also jemand für Sie einen Benutzer erstellt, der keine Berechtigungen zum Auswählen, Aktualisieren oder Löschen, sondern nur die Berechtigung CREATE ROUTINE hat, schimpfen Sie mit ihm, denn er hat das mit Absicht getan.

Natürlich sind die von solchen Benutzern erstellten gespeicherten Prozeduren nicht völlig unbrauchbar. Bei der Erstellung gespeicherter Prozeduren gibt es eine Feature-Klausel, die es den gespeicherten Prozeduren ermöglicht, die Berechtigungen des Runners zu verwenden. Fügen Sie nach dem Erstellen der gespeicherten Prozedur einfach die Feature-Klausel SQL SECURITY INVOKER hinzu.

wie folgt.

CREATE PROCEDURE p() SQL SECURITY INVOKER 這können zwei Personengruppen zugewiesen werden: Eine Gruppe erhält die Berechtigung zum Erstellen gespeicherter Prozeduren als Entwickler und die andere Gruppe erhält die Berechtigung zum Ausführen gespeicherter Prozeduren und zum Auswählen, Aktualisieren und Löschen von Berechtigungen als Tester. (Mein Gehirn ist verrückt) Bei dieser Art der Berechtigungszuweisung muss die Sicherheit von MySQL nicht auf Funktionsebene geschützt werden. Ich habe die gespeicherte Prozedur über den Root-Benutzer erstellt, sie aber auf Funktionsebene mit einem Benutzer aufgerufen, der nur die Berechtigung zum Ausführen der gespeicherten Prozedur hat. Selbst wenn Sie also den Datenbankbenutzernamen und das Kennwort von der Funktionsebene erhalten und die IP simulieren, können Sie nicht das erreichen, was Sie möchten. Mit Berechtigungen können wir gespeicherte Prozeduren verwenden, ohne uns um Sicherheitsprobleme sorgen zu müssen.

Zusammenfassen

Oben finden Sie eine Zusammenfassung der Berechtigungsprobleme bei gespeicherten MySQL-Prozeduren, die ich Ihnen vorgestellt habe. Ich hoffe, dass sie Ihnen weiterhelfen. Wenn Sie Fragen haben, hinterlassen Sie mir bitte eine Nachricht und ich werde Ihnen rechtzeitig antworten. Ich möchte auch allen für ihre Unterstützung der Website 123WORDPRESS.COM danken!

Das könnte Sie auch interessieren:
  • Problem mit Berechtigungen zum Ändern gespeicherter Prozeduren in MySQL

<<:  Tutorial zum Bereitstellen von JDK und Tomcat auf CentOS7 ohne Schnittstelle

>>:  Natives JS implementiert regelmäßige Validierung des Formulars (Senden erst nach Validierung)

Artikel empfehlen

jQuery-Plugin zur Implementierung des Suchverlaufs

Jeden Tag ein jQuery-Plugin – um einen Suchverlau...

WeChat-Applet-Entwicklung Formularvalidierung WxValidate-Nutzung

Ich persönlich bin der Meinung, dass das Entwickl...

Docker Swarm von der Bereitstellung bis zum grundlegenden Betrieb

Über Docker Swarm Docker Swarm besteht aus zwei T...

Installieren Sie Kafka unter Linux

Inhaltsverzeichnis 1.1 Java-Umgebung als Vorausse...

Beispiel zum Aktivieren langsamer Abfragen in MySQL

Vorwort Das langsame Abfrageprotokoll ist eine se...

Detaillierte Erklärung der Standort- und Umschreibenutzung in nginx

1. Zusammenfassung der Standortnutzung Der Stando...

Detaillierte Erklärung des Vue-Slots

1. Funktion : Ermöglicht der übergeordneten Kompo...

Zusammenfassung einiger praktischer kleiner Zaubertricks in der Vue-Praxis

Wie können Sie das Lamaging von Routen vergessen,...

Lösen Sie das Problem verschwindender Docker-Images

1. Spiegelbilder verschwinden in 50 und 93 [root@...

Detaillierte Erklärung gängiger Docker-Befehle

1. Hilfe-Befehl 1. Aktuelle Docker-Version anzeig...

Codebeispiel für das Nutzungsszenario der Nginx-Domänenweiterleitung

Szenario 1: Aufgrund von Serverbeschränkungen ist...