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:
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. 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:
|
<<: Tutorial zum Bereitstellen von JDK und Tomcat auf CentOS7 ohne Schnittstelle
>>: Natives JS implementiert regelmäßige Validierung des Formulars (Senden erst nach Validierung)
Jeden Tag ein jQuery-Plugin – um einen Suchverlau...
Schauen wir uns zunächst den Code an <form id=...
Standardmäßig werden Breite und Höhe der Zelle au...
Ich persönlich bin der Meinung, dass das Entwickl...
Über Docker Swarm Docker Swarm besteht aus zwei T...
Inhaltsverzeichnis 1.1 Java-Umgebung als Vorausse...
Vorwort Das langsame Abfrageprotokoll ist eine se...
1. Zusammenfassung der Standortnutzung Der Stando...
1. Funktion : Ermöglicht der übergeordneten Kompo...
Wie können Sie das Lamaging von Routen vergessen,...
Der spezifische Code lautet wie folgt: Der HTML-C...
1. Spiegelbilder verschwinden in 50 und 93 [root@...
Diese Frage ist sehr seltsam, deshalb gehe ich di...
1. Hilfe-Befehl 1. Aktuelle Docker-Version anzeig...
Szenario 1: Aufgrund von Serverbeschränkungen ist...