Die vorliegende Übersetzung wurde maschinell erstellt. Im Falle eines Konflikts oder eines Widerspruchs zwischen dieser übersetzten Fassung und der englischen Fassung (einschließlich infolge von Verzögerungen bei der Übersetzung) ist die englische Fassung maßgeblich.
Verwenden der Amazon RDS Delegated Extension Support für Postgre SQL
Mit Amazon RDS Delegated Extension Support für Postgre SQL können Sie die Erweiterungsverwaltung an einen Benutzer delegieren, der kein Benutzer sein muss. rds_superuser
Mit dieser delegierten Erweiterungsunterstützung rds_extension
wird eine neue Rolle namens erstellt. Sie müssen diese einem Benutzer zuweisen, um andere Erweiterungen zu verwalten. Mit dieser Rolle können Erweiterungen erstellt, aktualisiert und gelöscht werden.
Sie können die Erweiterungen angeben, die auf Ihrer RDS DB-Instance installiert werden können, indem Sie sie im rds.allowed_extensions
Parameter auflisten. Weitere Informationen finden Sie unter Verwenden von SQL Postgre-Erweiterungen mit Amazon RDS for SQL Postgre.
Sie können die Liste der verfügbaren Erweiterungen einschränken, die vom Benutzer mithilfe des Parameters rds_extension
role using rds.allowed_delegated_extensions
verwaltet werden können.
Die Unterstützung delegierter Erweiterungen ist in den folgenden Versionen verfügbar:
-
Alle höheren Versionen
-
16.4 und höhere 16-Versionen
-
15.8 und höhere 15 Versionen
-
14.13 und höhere 14-Versionen
-
13.16 und höhere 13 Versionen
-
12.20 und höhere 12 Versionen
Themen
- Die Unterstützung für Delegate-Erweiterungen für einen Benutzer aktivieren
- Konfiguration, die bei der Unterstützung RDS delegierter Erweiterungen für Postgre verwendet wird SQL
- Die Unterstützung für die delegierte Erweiterung ausschalten
- Vorteile der Nutzung von Amazon RDS Delegated Extension Support
- Einschränkung der Unterstützung von Amazon RDS Delegated Extension für Postgre SQL
- Für bestimmte Erweiterungen sind Berechtigungen erforderlich
- Sicherheitsüberlegungen
- Die Kaskade der Drop-Erweiterung ist deaktiviert
- Beispielerweiterungen, die mithilfe der Unterstützung delegierter Erweiterungen hinzugefügt werden können
Die Unterstützung für Delegate-Erweiterungen für einen Benutzer aktivieren
Sie müssen die folgenden Schritte ausführen, um die Delegate-Erweiterungsunterstützung für einen Benutzer zu aktivieren:
-
Einem Benutzer eine
rds_extension
Rolle zuweisen — Connect zur Datenbank her alsrds_superuser
und führen Sie den folgenden Befehl aus:Postgres => grant rds_extension to
user_name
; -
Liste der Erweiterungen festlegen, die delegierten Benutzern zur Verwaltung zur Verfügung stehen —
rds.allowed_delegated_extensions
Mit dieser Option können Sierds.allowed_extensions
im DB-Cluster-Parameter eine Teilmenge der verfügbaren Erweiterungen angeben. Sie können dies auf einer der folgenden Ebenen durchführen:-
Im Cluster oder in der Instanzparametergruppe über den Befehl AWS Management Console oderAPI. Weitere Informationen finden Sie unter Parametergruppen für Amazon RDS.
-
Verwenden Sie den folgenden Befehl auf Datenbankebene:
alter database
database_name
set rds.allowed_delegated_extensions = 'extension_name_1
,extension_name_2
,...extension_name_n
'; -
Verwenden Sie den folgenden Befehl auf Benutzerebene:
alter user
user_name
set rds.allowed_delegated_extensions = 'extension_name_1
,extension_name_2
,...extension_name_n
';
Anmerkung
Sie müssen die Datenbank nicht neu starten, nachdem Sie den
rds.allowed_delegated_extensions
dynamischen Parameter geändert haben. -
-
Erlauben Sie dem delegierten Benutzer den Zugriff auf Objekte, die während der Erstellung der Erweiterung erstellt wurden — Bestimmte Erweiterungen erstellen Objekte, für die zusätzliche Berechtigungen erteilt werden müssen, bevor der Benutzer mit der
rds_extension
Rolle auf sie zugreifen kann. Sierds_superuser
müssen dem delegierten Benutzer Zugriff auf diese Objekte gewähren. Eine der Optionen besteht darin, einen Ereignisauslöser zu verwenden, um dem delegierten Benutzer automatisch die Erlaubnis zu erteilen. Weitere Informationen finden Sie im Beispiel für einen Ereignisauslöser unterDie Unterstützung für die delegierte Erweiterung ausschalten.
Konfiguration, die bei der Unterstützung RDS delegierter Erweiterungen für Postgre verwendet wird SQL
Name der Konfiguration | Beschreibung | Standardwert | Hinweise | Wer kann die Erlaubnis ändern oder erteilen |
---|---|---|---|---|
|
Dieser Parameter schränkt die Erweiterungen ein, die eine rds_extension-Rolle in einer Datenbank verwalten kann. Es muss sich um eine Teilmenge von rds.allowed_extensions handeln. |
leere Zeichenfolge |
Weitere Informationen zum Einrichten dieses Parameters finden Sie unterDie Unterstützung für Delegate-Erweiterungen für einen Benutzer aktivieren. |
rds_superuser |
|
Mit diesem Parameter kann der Kunde die Erweiterungen einschränken, die in der DB-Instance installiert werden können. RDS Weitere Informationen finden Sie unter Einschränken der Installation von SQL Postgre-Erweiterungen |
"*" |
Standardmäßig ist dieser Parameter auf „*“ gesetzt, was bedeutet, dass alle Erweiterungen, die RDS für Postgre SQL und Aurora Postgre unterstützt SQL werden, von Benutzern mit den erforderlichen Rechten erstellt werden dürfen. Leer bedeutet, dass keine Erweiterungen in der RDS DB-Instance installiert werden können. |
Administrator |
|
Dieser Parameter steuert, ob Benutzer die Erweiterung mithilfe einer Kaskadenoption löschen können. |
aus |
Um diese Fähigkeit zu gewähren, sollte der |
rds_superuser |
Die Unterstützung für die delegierte Erweiterung ausschalten
Teilweise ausschalten
Die delegierten Benutzer können keine neuen Erweiterungen erstellen, aber trotzdem bestehende Erweiterungen aktualisieren.
-
Auf
rds.allowed_delegated_extensions
den Standardwert in der DB-Cluster-Parametergruppe zurücksetzen. -
Verwenden Sie den folgenden Befehl auf Datenbankebene:
alter database
database_name
reset rds.allowed_delegated_extensions; -
Verwenden Sie den folgenden Befehl auf Benutzerebene:
alter user
user_name
reset rds.allowed_delegated_extensions;
Vollständig ausschalten
Wenn Sie einem Benutzer die rds_extension
Rolle entziehen, erhält der Benutzer wieder die Standardberechtigungen. Der Benutzer kann keine Erweiterungen mehr erstellen, aktualisieren oder löschen.
postgres => revoke rds_extension from
user_name
;
Beispiel für einen Ereignisauslöser
Wenn Sie einem delegierten Benutzer die Verwendung von Erweiterungen ermöglichen möchten, für die Berechtigungen für seine bei der Erstellung der Erweiterung erstellten Objekte erforderlich sind, können Sie das folgende Beispiel für einen Ereignisauslöser anpassen und nur die Erweiterungen hinzufügen, für die die delegierten Benutzer Zugriff auf die gesamte Funktionalität haben sollen. rds_extension
Dieser Ereignistrigger kann auf Template1 (der Standardvorlage) erstellt werden, sodass alle mit Template1 erstellten Datenbanken über diesen Ereignistrigger verfügen. Wenn ein delegierter Benutzer die Erweiterung installiert, gewährt dieser Trigger automatisch das Eigentum an den von der Erweiterung erstellten Objekten.
CREATE OR REPLACE FUNCTION create_ext() RETURNS event_trigger AS $$ DECLARE schemaname TEXT; databaseowner TEXT; r RECORD; BEGIN IF tg_tag = 'CREATE EXTENSION' and current_user != 'rds_superuser' THEN RAISE NOTICE 'SECURITY INVOKER'; RAISE NOTICE 'user: %', current_user; FOR r IN SELECT * FROM pg_event_trigger_ddl_commands() LOOP CONTINUE WHEN r.command_tag != 'CREATE EXTENSION' OR r.object_type != 'extension'; schemaname = ( SELECT n.nspname FROM pg_catalog.pg_extension AS e INNER JOIN pg_catalog.pg_namespace AS n ON e.extnamespace = n.oid WHERE e.oid = r.objid ); databaseowner = ( SELECT pg_catalog.pg_get_userbyid(d.datdba) FROM pg_catalog.pg_database d WHERE d.datname = current_database() ); RAISE NOTICE 'Record for event trigger %, objid: %,tag: %, current_user: %, schema: %, database_owenr: %', r.object_identity, r.objid, tg_tag, current_user, schemaname, databaseowner; IF r.object_identity = 'address_standardizer_data_us' THEN EXECUTE format('GRANT SELECT, UPDATE, INSERT, DELETE ON TABLE %I.us_gaz TO %I WITH GRANT OPTION;', schemaname, databaseowner); EXECUTE format('GRANT SELECT, UPDATE, INSERT, DELETE ON TABLE %I.us_lex TO %I WITH GRANT OPTION;', schemaname, databaseowner); EXECUTE format('GRANT SELECT, UPDATE, INSERT, DELETE ON TABLE %I.us_rules TO %I WITH GRANT OPTION;', schemaname, databaseowner); ELSIF r.object_identity = 'dict_int' THEN EXECUTE format('ALTER TEXT SEARCH DICTIONARY %I.intdict OWNER TO %I;', schemaname, databaseowner); ELSIF r.object_identity = 'pg_partman' THEN EXECUTE format('GRANT SELECT, UPDATE, INSERT, DELETE ON TABLE %I.part_config TO %I WITH GRANT OPTION;', schemaname, databaseowner); EXECUTE format('GRANT SELECT, UPDATE, INSERT, DELETE ON TABLE %I.part_config_sub TO %I WITH GRANT OPTION;', schemaname, databaseowner); EXECUTE format('GRANT SELECT, UPDATE, INSERT, DELETE ON TABLE %I.custom_time_partitions TO %I WITH GRANT OPTION;', schemaname, databaseowner); ELSIF r.object_identity = 'postgis_topology' THEN EXECUTE format('GRANT SELECT, UPDATE, INSERT, DELETE ON ALL TABLES IN SCHEMA topology TO %I WITH GRANT OPTION;', databaseowner); EXECUTE format('GRANT USAGE, SELECT ON ALL SEQUENCES IN SCHEMA topology TO %I WITH GRANT OPTION;', databaseowner); EXECUTE format('GRANT EXECUTE ON ALL FUNCTIONS IN SCHEMA topology TO %I WITH GRANT OPTION;', databaseowner); EXECUTE format('GRANT USAGE ON SCHEMA topology TO %I WITH GRANT OPTION;', databaseowner); END IF; END LOOP; END IF; END; $$ LANGUAGE plpgsql SECURITY DEFINER; CREATE EVENT TRIGGER log_create_ext ON ddl_command_end EXECUTE PROCEDURE create_ext();
Vorteile der Nutzung von Amazon RDS Delegated Extension Support
Durch die Verwendung von Amazon RDS Delegated Extension Support für Postgre SQL delegieren Sie die Erweiterungsverwaltung auf sichere Weise an Benutzer, die diese Rolle nicht haben. rds_superuser
Diese Funktion bietet die folgenden Vorteile:
-
Sie können die Erweiterungsverwaltung ganz einfach an Benutzer Ihrer Wahl delegieren.
-
Dafür ist keine
rds_superuser
Rolle erforderlich. -
Bietet die Möglichkeit, verschiedene Erweiterungen für verschiedene Datenbanken im selben DB-Cluster zu unterstützen.
Einschränkung der Unterstützung von Amazon RDS Delegated Extension für Postgre SQL
-
Objekte, die während der Erstellung der Erweiterung erstellt wurden, benötigen möglicherweise zusätzliche Rechte, damit die Erweiterung ordnungsgemäß funktioniert.
-
Einige Erweiterungen können standardmäßig nicht vom delegierten Erweiterungsbenutzer verwaltet werden, darunter die folgenden:
log_fdw
,,pg_cron
,pg_tle
,pgactive
,pglogical
,postgis_raster
postgis_tiger_geocoder
,postgis_topology
.
Für bestimmte Erweiterungen sind Berechtigungen erforderlich
Um die folgenden Erweiterungen zu erstellen, zu verwenden oder zu aktualisieren, sollte der delegierte Benutzer über die erforderlichen Rechte für die folgenden Funktionen, Tabellen und Schemas verfügen.
Erweiterungen, für die Eigentum oder Berechtigungen erforderlich sind | Funktion | Tabellen | Schema | Wörterbuch für die Textsuche | Kommentar |
---|---|---|---|---|---|
address_standardizer_data_us |
Keine |
us_gaz, us_lex, us_lex, i.US_Regeln |
Keine |
Keine |
Keine |
amcheck |
bt_index_check, bt_index_parent_check |
Keine |
Keine |
Keine |
Keine |
dict_int |
Keine |
Keine |
Keine |
verbieten |
Keine |
pg_partman |
Keine |
custom_time_partitions, part_config, part_config_sub |
Keine |
Keine |
Keine |
pg_stat_statements |
Keine |
Keine |
Keine |
Keine |
Keine |
Beitrag GIS |
st_tileenvelope |
spatial_ref_sys |
Keine |
Keine |
Keine |
postgis_raster |
Keine |
Keine |
Keine |
Keine |
Keine |
postgis_topology |
Keine |
Topologie, Schicht |
Topologie |
Keine |
der delegierte Benutzer muss der Datenbankbesitzer sein |
log_fdw |
create_foreign_table_for_log_file |
Keine |
Keine |
Keine |
Keine |
rds_tools |
Verschlüsselungstyp für role_password_ |
Keine |
Keine |
Keine |
Keine |
postgis_tiger_geocoder |
Keine |
geocode_settings_default, geocode_settings |
Tiger |
Keine |
Keine |
pg_freespacemap |
pg_freespace |
Keine |
Keine |
Keine |
Keine |
pg_visibility |
pg_visibility |
Keine |
Keine |
Keine |
Keine |
Sicherheitsüberlegungen
Denken Sie daran, dass ein Benutzer mit rds_extension
Rolle Erweiterungen für alle Datenbanken verwalten kann, für die er die Verbindungsberechtigung hat. Wenn beabsichtigt ist, dass ein delegierter Benutzer die Erweiterung für eine einzelne Datenbank verwaltet, empfiehlt es sich, alle öffentlichen Rechte für jede Datenbank zu entziehen und dann dem delegierten Benutzer explizit die Connect-Berechtigung für diese spezifische Datenbank zu gewähren.
Es gibt mehrere Erweiterungen, mit denen ein Benutzer auf Informationen aus mehreren Datenbanken zugreifen kann. Stellen Sie sicher, dass die Benutzer, die Sie gewähren, rds_extension
über datenbankübergreifende Funktionen verfügen, bevor Sie diese Erweiterungen hinzufügenrds.allowed_delegated_extensions
. dblink
Stellen Sie beispielsweise postgres_fdw
Funktionen für datenbankübergreifende Abfragen auf derselben Instanz oder auf Remote-Instances bereit. log_fdw
liest die Protokolldateien der Postgres-Engine, die für alle Datenbanken in der Instanz gelten und möglicherweise langsame Abfragen oder Fehlermeldungen von mehreren Datenbanken enthalten. pg_cron
ermöglicht die Ausführung von geplanten Hintergrundjobs auf der DB-Instance und kann Jobs so konfigurieren, dass sie in einer anderen Datenbank ausgeführt werden.
Die Kaskade der Drop-Erweiterung ist deaktiviert
Die Möglichkeit, die Erweiterung mit der Option „Kaskade“ durch einen Benutzer mit dieser rds_extension
Rolle zu löschen, wird durch einen rds.delegated_extension_allow_drop_cascade
Parameter gesteuert. rds-delegated_extension_allow_drop_cascade
ist standardmäßig auf off
festgelegt. Das bedeutet, dass Benutzer mit der rds_extension
Rolle eine Erweiterung nicht mithilfe der Kaskadenoption löschen dürfen, wie in der folgenden Abfrage gezeigt.
DROP EXTENSION CASCADE;
Dadurch werden automatisch Objekte gelöscht, die von der Erweiterung abhängen, und wiederum alle Objekte, die von diesen Objekten abhängen. Der Versuch, die Cascade-Option zu verwenden, führt zu einem Fehler.
Um diese Fähigkeit zu gewähren, sollte der rds.delegated_extension_allow_drop_cascade
Parameter auf on
gesetzt werden.
Das Ändern des rds.delegated_extension_allow_drop_cascade
dynamischen Parameters erfordert keinen Neustart der Datenbank. Sie können dies auf einer der folgenden Ebenen tun:
-
Im Cluster oder in der Instanzparametergruppe über den Befehl AWS Management Console oderAPI.
-
Verwenden Sie den folgenden Befehl auf Datenbankebene:
alter database
database_name
set rds.delegated_extension_allow_drop_cascade = 'on'; -
Verwenden Sie den folgenden Befehl auf Benutzerebene:
alter role tenant_user set rds.delegated_extension_allow_drop_cascade = 'on';
Beispielerweiterungen, die mithilfe der Unterstützung delegierter Erweiterungen hinzugefügt werden können
-
rds_tools
extension_test_db=> create extension rds_tools; CREATE EXTENSION extension_test_db=> SELECT * from rds_tools.role_password_encryption_type() where rolname = 'pg_read_server_files'; ERROR: permission denied for function role_password_encryption_type
-
amcheck
extension_test_db=> CREATE TABLE amcheck_test (id int); CREATE TABLE extension_test_db=> INSERT INTO amcheck_test VALUES (generate_series(1,100000)); INSERT 0 100000 extension_test_db=> CREATE INDEX amcheck_test_btree_idx ON amcheck_test USING btree (id); CREATE INDEX extension_test_db=> create extension amcheck; CREATE EXTENSION extension_test_db=> SELECT bt_index_check('amcheck_test_btree_idx'::regclass); ERROR: permission denied for function bt_index_check extension_test_db=> SELECT bt_index_parent_check('amcheck_test_btree_idx'::regclass); ERROR: permission denied for function bt_index_parent_check
-
pg_freespacemap
extension_test_db=> create extension pg_freespacemap; CREATE EXTENSION extension_test_db=> SELECT * FROM pg_freespace('pg_authid'); ERROR: permission denied for function pg_freespace extension_test_db=> SELECT * FROM pg_freespace('pg_authid',0); ERROR: permission denied for function pg_freespace
-
pg_visibility
extension_test_db=> create extension pg_visibility; CREATE EXTENSION extension_test_db=> select * from pg_visibility('pg_database'::regclass); ERROR: permission denied for function pg_visibility
-
postgres_fdw
extension_test_db=> create extension postgres_fdw; CREATE EXTENSION extension_test_db=> create server myserver foreign data wrapper postgres_fdw options (host 'foo', dbname 'foodb', port '5432'); ERROR: permission denied for foreign-data wrapper postgres_fdw