Dieser Artikel wurde von der Huawei Cloud Community „ GaussDB (DWS) 3A Security Capabilities “ geteilt, Autor: yd_281561943.
1. Einleitung
- Anwendbare Version: [8.0.0 (und höher)]
Datenbanksicherheit bezieht sich auf die Technologie, die Datenbanken schützt, um zu verhindern, dass unbefugte Benutzer Dateninformationen in der Datenbank stehlen, manipulieren und zerstören. Die Datenbanksicherheitstechnologie kann einfach in drei A’s unterteilt werden:
- Authentifizierung: Die Authentifizierung löst das Problem, wer Zutritt hat.
- Autorisierung: Autorisierung zur Lösung des Problems dessen, was getan werden kann (Arbeit)
- Audit: Audit löst das Problem dessen, was getan wurde (Überwachung)
2. Authentifizierung – Authentifizierung
Die Verbindungsauthentifizierung löst das Problem, ob sich Benutzer bei der Datenbank anmelden können. Dieses Produkt unterstützt die folgenden Authentifizierungsmethoden:
- Hostbasierte Authentifizierung: Der Server überprüft die Konfigurationsdatei anhand der IP-Adresse des Clients, des Benutzernamens und der Datenbank, auf die zugegriffen werden soll, um festzustellen, ob der Benutzer die Authentifizierung bestanden hat.
- Passwortauthentifizierung: einschließlich verschlüsselter Passwortauthentifizierung für Remoteverbindungen und unverschlüsselter Passwortauthentifizierung für lokale Verbindungen.
- Zertifikatauthentifizierung: Dieser Modus erfordert eine SSL-Verbindungskonfiguration und der Client muss ein gültiges SSL-Zertifikat bereitstellen, und es ist kein Benutzerkennwort erforderlich.
- Authentifizierung durch Dritte: LDAP, OneAccess usw.
Diese Methoden müssen alle die Datei „pg_hba.conf“ konfigurieren. Das Dateiformat pg_hba.conf besteht aus mehreren Zeilen von HBA-Datensätzen:
Die Bedeutung eines HBA-Eintrags besteht darin, welche Benutzer (USER), von welchen IP-Adressen (ADDRESS), in welchem Verbindungstyp (TYPE), in welcher Authentifizierungsmethode (METHOD) und mit welchen Datenbanken (DATABASE) eine Verbindung hergestellt werden darf.
Bei der Authentifizierung werden die Datensätze in der HBA-Datei bei jeder Verbindungsanfrage von unten nach unten überprüft. Wenn der aktuelle Datensatz übereinstimmt, wird er zurückgegeben. Die Reihenfolge der HBA-Datensätze ist sehr wichtig. Diese HBA-Logik ist sehr wichtig und sollte nicht einfach geändert werden, da sie sonst zu sehr schwerwiegenden Problemen führt.
Fall: Probleme, die durch Änderungen der HBA-Logik verursacht werden
Es gab ein Problem mit der LDAP-Verbindung. Während des Upgrade-Vorgangs wurden die Datensätze in der Datei pg_hba.conf sortiert, was dazu führte, dass sich die Reihenfolge der LDAP-Konfigurationszeilen vor und nach dem Upgrade zum Ende der sha256-Konfigurationszeile änderte. Aufgrund des sequentiellen Durchlaufmechanismus von pg_hba.conf stimmt der LDAP-Benutzer nach dem Upgrade falsch mit der Konfigurationszeile sha256 überein und die Verbindung schlägt fehl.
Um die durch die Auftragsänderung verursachten Probleme zu lösen, besteht die erste Version des Änderungsplans darin, die LDAP-Beurteilungslogik am Anfang des Schleifendurchlaufs zu platzieren: Schauen Sie sich zunächst den Authentifizierungstyp an. Wenn es sich um eine LDAP-Authentifizierung handelt, beurteilen Sie, ob Das Methodenfeld der Konfigurationszeile ist ldap. Wenn nicht, springen Sie zur nächsten Zeile, bis festgestellt wird, dass die Methode ldap ist.
Bei dieser Version des Änderungsplans stimmen LDAP-Authentifizierungsverbindungen mit allen LDAP-HBA-Datensätzen überein. Wenn der Benutzer eine Verbindung zur Datenbank herstellt, kann die Verbindung erfolgreich sein, das Geschäft kann jedoch nicht ausgeführt werden und es wird eine Fehlermeldung angezeigt: „Ungültiger Benutzername/Passwort, Anmeldung verweigert.“ Der Grund dafür ist, dass beim Ausführen von Anweisungen durch interne Knoten eine Authentifizierung zwischen Knoten durchgeführt wird. Der Authentifizierungstyp ist Vertrauen und es wird kein Kennwort bereitgestellt. Nach der Änderung werden nur LDAP-Datensätze abgeglichen, und die LDAP-Methode erfordert ein Kennwort, sodass ein Fehler gemeldet wird.
Vor und nach dem Upgrade lauten die Speicherorte der Konfigurationszeilen ldap und sha256 wie folgt:
Vor dem Upgrade: host all @/etc/ldap/ldap_user 0.0.0.0/0 ldap ldapserver=xxx.xxx.xxx.xxx ldapport=xxx ldapprefix="CN=" ldapsuffix="OU=test_dmj_group,DC=com" Host alle alle 0.0.0.0/0 sha256 Nach dem Upgrade: Host alle alle 0.0.0.0/0 sha256 host all @/etc/ldap/ldap_user 0.0.0.0/0 ldap ldapserver=xxx.xxx.xxx.xxx ldapport=xxx ldapprefix="CN=" ldapsuffix="OU=test_dmj_group,DC=com"
TYP : Typ ist einer von vier Typen: lokal, Host, Hostssl und Hostnossl.
Jeweils:
lokal: Es sind nur Unix-Domain-Socket-Verbindungen zulässig.
Host: Ermöglicht TCP/IP-Verbindungen und kann SSL- und Nicht-SSL-Verbindungsanfragen abgleichen.
hostssl: Ermöglicht TCP/IP-Verbindungen und entspricht nur SSL-Verbindungsanfragen.
hostnossl: TCP/IP-Verbindungen zulassen und nur Nicht-SSL-Verbindungsanfragen erfüllen.
DATENBANK : Sie können alle verwenden, um alle Datenbanken darzustellen, oder Sie können Datenbanken explizit angeben, indem Sie Kommas verwenden, um sie zu trennen.
USER : Sie können all verwenden, um alle Benutzer darzustellen, oder Sie können Benutzer explizit angeben, indem Sie sie durch Kommas trennen. Kann der Name eines bestimmten Datenbankbenutzers oder ein Gruppenname mit vorangestelltem + sein. Das +-Zeichen bedeutet eigentlich „passt zu jeder Rolle, die direkt oder indirekt zu dieser Rolle gehört“, wohingegen ein Name ohne das +-Zeichen nur dieser spezifischen Rolle entspricht.
ADRESSE : Die Adresse, mit der der Deklarationsdatensatz übereinstimmt und auf die der Zugriff möglich ist. Wenn der Typ „lokal“ ist, bedeutet dies, dass eine lokale Verbindung besteht und keine IP-Adresse angegeben werden muss.
METHODE : Zu den Authentifizierungsmethoden gehören Trust, Reject, MD5, SHA256, LDAP, Cert, OneAccess usw.
Vertrauen: Whitelist, Verbindungen bedingungslos zulassen.
Ablehnen: Blacklist, lehnt Verbindungen bedingungslos ab.
md5: Die Passwort-Authentifizierungsmethode von pg ist nicht sicher.
sha256: Passwortauthentifizierung für gaussdb.
ldap: Verwenden Sie LDAP für die Authentifizierung durch Dritte.
cert: Client-Zertifikat-Authentifizierungsmodus. Dieser Modus erfordert eine SSL-Verbindungskonfiguration und erfordert die Bereitstellung eines gültigen SSL-Zertifikats. Es ist nicht erforderlich, ein Benutzerkennwort anzugeben.
oneaccess: Verwenden Sie oneaccess für die Authentifizierung durch Dritte.3.Autorisierung – Autorisierung
Berechtigungen geben an, ob die Vorgänge eines Benutzers an einem Datenbankobjekt zulässig sind. Berechtigungen in GaussDB (DWS) umfassen drei Szenarien: Systemberechtigungen, Datenobjektberechtigungen und Benutzerberechtigungen.
3.1 Systemberechtigungen
3.1.1 Gewaltenteilung
Standardmäßig haben Systemadministratoren mit dem SYSADMIN-Attribut die höchste Autorität auf dem System. Um in der tatsächlichen Unternehmensführung hohe Risiken zu vermeiden, die durch eine übermäßige Konzentration der Rechte von Systemadministratoren verursacht werden, kann eine Gewaltenteilung eingerichtet werden, und die CREATEROLE-Attribut- und AUDITADMIN-Attributberechtigungen des Systemadministrators werden dem Sicherheitsadministrator bzw. dem Audit-Administrator erteilt .
3.1.2 Systemberechtigungsautorisierung
Systemberechtigungen werden auch als Benutzerattribute bezeichnet, einschließlich SYSADMIN, CREATEDB, CREATEROLE, AUDITADMIN und LOGIN.
Systemberechtigungen können beim Erstellen oder Ändern von Rollen oder Benutzern autorisiert werden. In der Option der Optionsanweisung CREATE/ALTER ROLE/USER user_name [WITH] können die folgenden Felder festgelegt werden, um die Systemberechtigungsautorisierung zu implementieren.
SYSADMIN | NOSYSADMIN
Bestimmen Sie, ob eine neue Rolle ein „Systemadministrator“ ist. Die Rolle mit dem SYSADMIN-Attribut hat die höchste Autorität auf dem System. Der Standardwert ist NOSYSADMIN.
AUDITADMIN | NOAUDITADMIN
Definieren Sie, ob die Rolle über Audit-Management-Attribute verfügt. Der Standardwert ist NOAUDITADMIN.
CREATEDB | NOCREATEDB
Bestimmt, ob eine neue Rolle Datenbanken erstellen kann. Die neue Rolle verfügt nicht über die Berechtigung zum Erstellen von Datenbanken. Der Standardwert ist NOCREATEDB.
CREATEROLE | NOCREATEROL
Bestimmt, ob eine Rolle neue Rollen erstellen kann (d. h. CREATE ROLE und CREATE USER ausführen). Eine Rolle mit CREATEROLE-Berechtigungen kann auch andere Rollen ändern und löschen. Der Standardwert ist NOCREATEROLE.
ANMELDEN | NOLOGIN
Nur Rollen mit dem LOGIN-Attribut können sich bei der Datenbank anmelden. Eine Rolle mit dem LOGIN-Attribut kann als Benutzer betrachtet werden. Der Standardwert ist NOLOGIN.3.2 Datenobjektberechtigungen
Zu den Datenobjekten gehören Tabellen und Ansichten, bestimmte Felder, Datenbanken, Funktionen, Schemata usw. Vorgänge wie das Erstellen, Hinzufügen, Löschen, Ändern und Abfragen von Datenobjekten sind Berechtigungen für Datenobjekte. Das Format der Autorisierungssyntax lautet: GRANT [privileges] ON [objects] TO [users], und das Format der Berechtigungswiderrufssyntax lautet REVOKE [privileges] ON [objects] FROM [users].
3.3 Benutzerberechtigungen
3.3.1 Autorisierung der Benutzerrechte
Gewähren Sie die Berechtigungen einer Rolle oder eines Benutzers einer oder mehreren anderen Rollen oder Benutzern. Eine autorisierte Rolle oder ein autorisierter Benutzer verfügt über die Berechtigungen der autorisierten Rolle oder des autorisierten Benutzers. Wenn WITH ADMIN OPTION deklariert ist, kann der autorisierte Benutzer die Berechtigung erneut anderen Rollen oder Benutzern erteilen und alle von der Rolle oder dem Benutzer geerbten Berechtigungen widerrufen. Wenn eine autorisierte Rolle oder ein autorisierter Benutzer geändert oder widerrufen wird, werden die Berechtigungen aller Benutzer, die die Rolle oder Benutzerberechtigungen erben, entsprechend geändert. Das Syntaxformat lautet GRANT Role TO User.
3.3.2 Voreingestellte Rollen
GaussDB (DWS) bietet eine Reihe voreingestellter Rollen, deren Namen mit „gs_role_“ beginnen. Diese voreingestellten Rollen verfügen über einige feste Berechtigungen. Wenn einige Benutzer verwandte Vorgänge ausführen müssen, müssen sie den Benutzern lediglich die voreingestellten Rollen zuweisen. Die aktuell voreingestellten Rollen von GaussDB (DWS) sind wie folgt:
4. Audit – Audit
Unter Auditing versteht man die Aufzeichnung der Anmeldung und des Beendens des Benutzers sowie des Verhaltens und der Vorgänge in der Datenbank nach der Anmeldung, sodass der Datenbanksicherheitsadministrator diese Protokollinformationen verwenden kann, um den Benutzer, die Zeit und den Inhalt illegaler Vorgänge herauszufinden.
4.1 Audit-Konfigurationselemente festlegen
Damit die Datenbank eine bestimmte Funktion prüfen kann, müssen Sie den Prüfhauptschalter (audit_enabled) und den entsprechenden Prüfelementschalter (audit_operation_exec) aktivieren. Das Ändern des Werts dieses Konfigurationselements wird während des Datenbankbetriebs wirksam Es ist nicht erforderlich, die Datenbank neu zu starten.
Es sind zwei Punkte zu beachten: Erstens müssen Sie audit_system_object so konfigurieren, dass die DDL-Operationen eines bestimmten Objekts überwacht werden. Zweitens hängt es davon ab, ob die Vorgänge innerhalb der Transaktion überwacht werden Es werden bestimmte Konfigurationselemente konfiguriert. Parametersteuerung von Prüfpunkten:
4.2 Audit-Protokolle anzeigen
Der Audit-Abfragebefehl lautet pgxc_query_audit:
Wählen Sie * aus pgxc_query_audit(timestamptz starttime,timestamptz endtime,audit_log);
Startzeit und Endzeit stellen die Startzeit bzw. Endzeit des Prüfprotokolls dar. Wenn audit_log nicht angegeben ist, werden standardmäßig die Prüfprotokollinformationen angezeigt, die mit der aktuellen Instanz verbunden sind. Die Ergebnisse der Prüfabfrage lauten wie folgt:
postgres=# Tabelle erstellen t1(id int); FEHLER: Relation „t1“ existiert bereits postgres=# select * from pgxc_query_audit('2021-03-21','2021-03-30') order by endtime desc limit 1; -[ AUFZEICHNUNG 1 ]---+-------------------------------- Startzeit | 21.03.2021 11:49:41.643+08 Endzeit | 21.03.2021 11:49:41.652+08 operation_type | ddl audit_type | ddl_table Ergebnis | fehlgeschlagen Benutzername | perfadm Datenbank | postgres client_conninfo | gsql@[lokal] Objektname | t1 command_text | Tabelle t1(id int) erstellen; detail_info | Relation „t1“ existiert bereits transaktion_xid | 0 query_id | 1062177 Knotenname | cn_5001 thread_id | 139916885260032@669613657906735 local_port | 6000 remote_port |
5. Andere Data-Warehouse-Sicherheitstechnologien
Datensicherheitsanzeige: Datendesensibilisierung, Zugriffskontrolle auf Zeilenebene.
Datensicherheitsspeicher: Datenspeicherverschlüsselung, transparente Verschlüsselung.