Postgres Security Definer

Postgres Security Definer
In dieser fortschrittlichen und automatisierten Ära von Computern und Technologie möchte jeder zusammen mit seinen persönlichen Daten gesichert werden. Gleiches gilt für Datenbanken, um Informationen über viele Dinge zu speichern, einschließlich persönlicher Informationen über Personen. Aufgrund vieler Informationen müssen wir uns auch um unsere Datenbanksicherheit kümmern, um niemanden falsch zu ermöglichen. In der PostgreSQL-Datenbank müssen wir viele integrierte Datenbanken verwenden, um einige Datensätze aus den Tabellen und Datenbank zu holen. Genau wie viele dieser Funktionen ist man die Sicherheitsdefinitionsfunktion. Wie der Titel vorschlägt, muss er etwas mit der Definition der Sicherheit der PostgreSQL -Datenbank zu tun haben. Da dieses Konzept für die meisten PostgreSQL -Benutzer einzigartig, komplex und neu ist, haben wir beschlossen, es in einem ganz neuen Artikel abzudecken. Lassen Sie uns jetzt ein wenig Wissen über die Sicherheitsdefinition von Methoden haben.

Sicherheitsdauer gegen Sicherheitsinvoker

Der Begriff der Sicherheitsdefinition wurde auf einige außergewöhnliche Funktionen bezeichnet. Diese Aufgaben sind so offiziell und privilegiert, dass nicht jeder Benutzer sie ausführen oder verwenden kann, wenn er sicher und fundiert ist. Dies kann als Eigenschaft in der PostgreSQL -Abfrage verwendet werden, während einige Transaktionen aus der PostgreSQL -Datenbank durchgeführt werden. Wenn eine Funktion mit den Berechtigungen des Benutzer, der diese Funktion aufgerufen hat. Auf der anderen Seite soll eine Funktion mit den Rechten seines tatsächlichen Eigentümers (der diese Funktion erstellt hat) als Sicherheitsdefinitionseigentum der Funktion bezeichnet.

Wer kann es benutzen?

Die meiste Zeit kann die Sicherheitsdefinitionsfunktion mit den Rechten seines Eigentümers I ausgeführt werden.e., Der Eigentümer der Sicherheitsdefinitionsfunktion ist die einzige, die sie im Ausführungsteil nutzt. Andererseits können normale integrierte oder benutzerdefinierte Funktionen von jedem Benutzer i ausgeführt werden.e., öffentlich, wenn sie nicht als Sicherheitsdefinition spezifiziert werden. Da die PostgreSQL -Datenbank immer mit der Verwendung von Systemdatenbanken und Tabellen durch die lokalen und Remote PostgreSQL -Arbeitgeber übereinstimmt. Es besteht die Möglichkeit, dass ein externer Benutzer die Möglichkeit erhalten kann, die gesamte PostgreSQL -Datenbank und seine Tabellen zu verwalten oder zu steuern. Fügen Sie beschädigte Daten in der Datenbank mit denselben Rechten wie der Eigentümer der Sicherheitsdefinitionsfunktion hinzu. Auf diese Weise kann dieser Außenseiter -Benutzer Abfragen und Codes ausführen, die er/sie nicht sein sollte. Während wir diese Eigenschaft innerhalb der PostgreSQL -Abfrage verwenden, haben wir den Benutzern die Funktionen ausführen, die mit den Rechten des Benutzer, der sie erstellt hat. Daher müssen wir vorsichtiger sein als zuvor, während wir die Datenbank nach der Verwendung von Sicherheitsdefinierer verwenden. Schauen wir uns jetzt einige Beispiele an.

Beispiel 01

Schauen wir uns ein einfaches Beispiel an, um eine Funktion mit Sicherheitsdefinition zu generieren. Wir werden versuchen, unsere Funktion so sicher wie möglich zu gestalten, aber die in der Sicherheitsdefinitionsfunktion verwenden. Wir haben also mit der Anmeldung im PostgreSQL -Datenbank Pgadmin GUI Tool begonnen. Siehe Registerkarte "Funktionen" in Ihrer spezifischen Datenbank. Klicken Sie mit der rechten Maustaste darauf, schweben Sie über die Option "Erstellen" und wählen Sie "Funktion" aus.

Der Bildschirm namens Create-Funktion wird geöffnet. Fügen Sie den Namen einer Funktion als "harmlos" hinzu, wählen Sie seinen Besitzer und das Schema aus. Da diese Funktion ein Sicherheitsdefinierer sein wird, wird sie nur von den Rechten des Benutzer „aqsayasin“ ausgeführt.

Fügen Sie im Abschnitt Definition den Rückgabetyp und die Sprache hinzu und fügen Sie den Datentyp des Arguments hinzu, der in der Funktion angegeben werden soll.

Schreiben Sie im Codebereich einen einfachen Code. Wie Sie sehen können, verwenden wir hier keine Tabelle, daher scheint es ungeholtet zu sein, wenn es um seine Ausführung geht.

Schalten Sie im Bereich Optionsbereich die „Sicherheit des Definers“ ein, um die Sicherheitsdefinitionseigenschaft zu aktivieren.

Innerhalb des SQL -Abschnitts erhalten Sie Ihre gesamte Abfrage zum Erstellen einer neuen Funktion mit der Immobilie für Sicherheitsdefinition. Der Eigentümer dieser Funktion ist der Benutzer "aqsayasin".

Nachdem wir die Anweisung ausgewählt haben, die harmlose Funktion zu rufen, die 15 als Wert dafür übergeben, haben wir den Wert 25 als Ausgabe. Obwohl es ganz sicher und solide aussieht, können die externen Anhänger/Benutzer mit öffentlichem Schema neue Objekte erstellen und Zugriff auf diese Funktion haben.

Um die Informationen zur neu erstellten Sicherheitsdefinitionsfunktion „harmlos“ zu erhalten. Die Spalte "Proname" zeigt den Namen einer Funktion i an.e., Harmlos, "Nspname" zeigt den Namen eines Schemas i.e., öffentlich und die Spalte "usname" gehört dem Eigentümer für diese Funktion i.e., "Aqsayasin". So erhalten wir die Informationen zur Sicherheitsdefinitionsfunktion.

Beispiel 02

Die Sicherheitsdefinitionsfunktion kann auch verwendet werden, um eine Prozedur durch einen bestimmten Benutzer zu erstellen. Erstellen wir eine neue Prozedur "sec_def" mit der darin enthaltenen Sicherheitsdefinitionseigenschaft. Dieses Verfahren wird verwendet, um Werte aus der Tabelle „Ftest“ mit dem „öffentlichen“ Schema zu erhalten. Sie müssen wissen, dass die Tabelle „FTest“ in der Datenbank „aqsayasin“ gespeichert wurde und sein Eigentümer ist Benutzer "Aqsayasin".

Jetzt müssen Sie sich vom PostgreSQL -Shell -Terminal anmelden, um einige einfache Befehle hinzuzufügen. Also haben wir uns zuerst aus der Datenbank „Aqsayasin“ angemeldet. Danach haben wir versucht, die Datenbank "aqsayasin" mit dem Benutzer "Outsider" mit dem Befehl "\ c" zusammen mit dem Datenbanknamen und dem zu verbundenen Benutzer mit dem Befehl "\ c" zu verbinden. Der Benutzer „Außenseiter“ ist mit der Datenbank „Aqsayasin“ verbunden.

Jetzt ist es an der Zeit, die Prozedur „Sec_def ()“ mithilfe der integrierten Call () -Funktion in der Terminal Shell aufzurufen. Es wird eine Ausnahme ausgeben, die zeigt, dass die „Öffentlichkeit.Fest “gibt es für unseren Benutzer Außenseiter nicht. Dies liegt daran.

Wenn Sie die Fehlfunktionen der Außenstehenden und nicht vertrauenswürdigen Benutzer der PostgreSQL -Datenbank in Ihrem System vermeiden möchten, müssen Sie möglicherweise die Rechte „Schreiben“ für diese Benutzer einschränken oder verbieten. Mit dieser Weise können die externen Benutzer nicht fehlerhafte Objekte generieren, um Ihr Datenbanksystem, seine Daten und Rechte zu manipulieren. Sie können das temporäre Schema „PG_Temp“ zuletzt verwenden, um durch die Suche nach dem sicher.

Abschluss

Die Verwendung von Sicherheitsdefinitionseigenschaften in den Funktionen, um eine besondere Aufgabe zu erledigen. Damit unsere Benutzer das Konzept des Sicherheitsdefiners verstehen können, haben wir versucht, eine Funktion und eine Prozedur mit einer Sicherheitsdefinitionsfunktion als Eigenschaft zu erstellen. Wir haben festgestellt, wie ein Fehler auftritt, wenn ein Benutzer ohne Sicherheitsanbieter -Eigentümerrechte versucht, die Funktion oder eine Prozedur aufzurufen. Zusammenfassend bevorzugen wir es normalerweise, sie nicht häufig in der Datenbank zu verwenden.