Vorteile von Paketen
Der Begriff “Paketieren” der Codekomponenten einer Datenbankoperation hat mehrere Vorteile:
- Modularisierung
-
Blöcke von voneinander abhängigem Code werden in logische Module gruppiert, wie es in anderen Programmiersprachen der Fall ist.
In der Programmierung ist bekannt, dass es eine gute Sache ist, Code auf verschiedene Weise zu gruppieren, beispielsweise in Namespaces, Units oder Klassen.Dies ist mit standardmäßigen gespeicherten Prozeduren und Funktionen in der Datenbank nicht möglich.Obwohl sie in verschiedene Skriptdateien gruppiert werden können, bleiben zwei Probleme:
-
Die Gruppierung wird nicht in den Datenbankmetadaten dargestellt.
-
Skriptierte Routinen nehmen alle an einem flachen Namensraum teil und können von jedem aufgerufen werden (wir beziehen uns hier nicht auf Sicherheitsberechtigungen).
-
- Einfachere Verfolgung von Abhängigkeiten
-
Pakete erleichtern das Nachverfolgen von Abhängigkeiten zwischen einer Sammlung verwandter Routinen sowie zwischen dieser Sammlung und anderen gepackten und nicht gepackten Routinen.
Immer wenn eine gepackte Routine feststellt, dass sie ein bestimmtes Datenbankobjekt verwendet, wird eine Abhängigkeit von diesem Objekt in den Systemtabellen von Firebird registriert.Um das Objekt anschließend zu löschen oder möglicherweise zu ändern, müssen Sie zuerst die davon abhängigen Elemente entfernen.Da die Abhängigkeit von anderen Objekten nur für den Paketkörper existiert und nicht für den Paketkörper, kann dieser Paketkörper leicht entfernt werden, selbst wenn ein anderes Objekt von diesem Paket abhängt.Wenn der Körper gelöscht wird, bleibt der Header erhalten, sodass Sie seinen Körper neu erstellen können, sobald die Änderungen in Bezug auf das entfernte Objekt abgeschlossen sind.
- Berechtigungsverwaltung vereinfachen
-
Da Firebird Routinen mit den Anrufer-Privilegien ausführt, ist es auch notwendig, jeder Routine die Ressourcennutzung zu gewähren, wenn diese Ressourcen für den Anrufer nicht direkt zugänglich wären.Die Verwendung jeder Routine muss Benutzern und/oder Rollen gewährt werden.
Gepackte Routinen haben keine individuellen Privilegien.Die Privilegien gelten für das Paket als Ganzes.Den Paketen gewährte Privilegien gelten für alle Paketrumpfroutinen, einschließlich der privaten, werden jedoch für den Paketheader gespeichert.Ein
EXECUTE
-Privileg für ein Paket, das einem Benutzer (oder einem anderen Objekt) gewährt wird, gewährt diesem Benutzer das Privileg, alle im Paket-Header definierten Routinen auszuführen.Zum BeispielGRANT SELECT ON TABLE secret TO PACKAGE pk_secret; GRANT EXECUTE ON PACKAGE pk_secret TO ROLE role_secret;
- Private Bereiche
-
Gespeicherte Prozeduren und Funktionen können privat sein;das heißt, sie werden nur für die interne Verwendung innerhalb des definierenden Pakets verfügbar gemacht.
Alle Programmiersprachen haben den Begriff des Routineumfangs, der ohne irgendeine Form der Gruppierung nicht möglich ist.Firebird-Pakete funktionieren in dieser Hinsicht auch wie Delphi-Einheiten.Wenn eine Routine nicht im Paketheader (Schnittstelle) deklariert und im Rumpf implementiert ist (Implementierung), wird sie zu einer privaten Routine.Eine private Routine kann nur innerhalb ihres Pakets aufgerufen werden.