許可權說明
重要 為了保障資料庫的安全和穩定性,RDS PostgreSQL中的資料庫帳號未被授予對pg_authid表的存取權限。您可以通過使用pg_roles視圖來查詢資料庫角色的資訊。
普通帳號
RDS PostgreSQL的普通帳號許可權和社區的非superuser帳號的許可權相同。具體請參見PostgreSQL官方文檔。
高許可權帳號
RDS PostgreSQL的高許可權帳號除了支援普通帳號的所有許可權外,還支援以下許可權:
手動調用VACUUM相關命令,支援清理任何錶。
說明 Vacuum是用於回收已刪除行所佔用的磁碟空間,並更新統計資料的過程。更多資訊,請參見VACUUM。
SQL樣本
執行VACUUM操作,清理當前資料庫中的所有表。在執行VACUUM命令時,會使用預設的VACUUM配置參數。
VACUUM;
執行VACUUM FULL操作,對當前資料庫中的所有表進行徹底的清理。VACUUM FULL操作會重新組織表的實體儲存體並釋放未使用的磁碟空間。它可能需要更長的時間和更多的系統資源。
VACUUM FULL;
針對特定的表進行VACUUM操作。更精確地控制哪些表需要進行VACUUM,對不同的表使用不同的VACUUM配置參數。
VACUUM FULL <table_name>;
table_name指具體表名。
使用CREATE EVENT TRIGGER建立事件觸發程序(Event trigger),或將事件觸發程序的所有者改為自己。
SQL樣本
建立事件觸發程序
樣本情境:建立一個名為test_trigger的事件觸發程序,在DDL命令(CREATE、ALTER、DROP 等)完成時觸發,調用名為test_function()的函數。
CREATE EVENT TRIGGER test_trigger
ON ddl_command_end
EXECUTE FUNCTION test_function();
修改事件觸發程序所有者。
ALTER EVENT TRIGGER test_trigger OWNER TO new_owner;
new_owner:修改後事件觸發程序的所有者。
使用CREATE EXTENSION建立外掛程式。支援的外掛程式請參見支援外掛程式列表。
SQL樣本
CREATE EXTENSION <外掛程式名>;
建立函數時為函數指定LEAKPROOF屬性,或修改函數的LEAKPROOF的屬性。
SQL樣本
CREATE OR REPLACE FUNCTION test_function()
RETURNS void
LANGUAGE sql
LEAKPROOF
AS $$
-- 函數的實現代碼
$$;
使用CREATE PUBLICATION建立發布,或修改一個發布的所有者。
說明 在PostgreSQL中,建立發布(publication)是通過邏輯複製功能來實現的,允許將資料庫的更改操作傳輸到其他資料庫執行個體。
SQL樣本
建立發布。僅為樣本,詳細使用方法,請參見CREATE PUBLICATION。
CREATE PUBLICATION test_publication FOR ALL TABLES;
修改一個發布的所有者。
ALTER PUBLICATION <publication_name> OWNER TO <new_owner>;
使用CREATE SUBSCRIPTION建立訂閱,或修改一個訂閱的所有者。
說明 在PostgreSQL中,您可以通過邏輯複製功能建立訂閱(subscription)。訂閱允許將來自發布(publication)的更改應用到訂閱資料庫。
SQL樣本
建立訂閱。僅為樣本,詳細使用方法,請參見CREATE SUBSCRIPTION。
CREATE SUBSCRIPTION test_subscription
CONNECTION 'host=<發布端串連地址> port=<發布端連接埠> dbname=<資料庫> user=<帳號> password=<密碼>'
PUBLICATION test_publication
WITH (slot_name = <replication_slot_name>, create_slot = false);
test_publication為發布端的發布名稱。
修改一個訂閱的所有者。
ALTER SUBSCRIPTION <subscription_name> OWNER TO <new_owner>;
修改資料類型的所有者。
SQL樣本
ALTER TYPE <type_name> OWNER TO <new_owner>;
建立高許可權帳號,或者修改其他普通帳號為高許可權帳號。
SQL樣本
-- 建立帳號
CREATE USER <user_name> WITH PASSWORD '<帳號密碼>';
-- 修改帳號為高許可權帳號
GRANT pg_rds_superuser TO <user_name>;
查看高許可權帳號和所有普通帳號的後端進程,並支援對進程使用pg_terminate_backend()等函數。
SQL樣本
-- 查詢某個帳號下的所有後端進程
SELECT pid, datname, usename, application_name
FROM pg_stat_activity
WHERE usename = '<高許可權帳號或普通帳號>';
-- 執行pg_terminate_backend()函數,終止進程
SELECT pg_terminate_backend(pid);
從視圖pg_stat_activity中擷取高許可權帳號和所有普通帳號的後端串連資訊。
SQL樣本
SELECT *
FROM pg_stat_activity
WHERE usename = '<高許可權帳號或普通帳號>';
對普通帳號的對象執行GRANT 、REVOKE操作。更多資訊,請參見GRANT、REVOKE。
SQL樣本
-- 使用GRANT命令授權,使普通帳號能夠執行DELETE語句來刪除表中的行資料
GRANT DELETE ON <table_name> TO <user_name>;
-- 使用REVOKE命令撤銷許可權
REVOKE DELETE ON <table_name> FROM <user_name>;
使用SET ROLE將當前會話的帳號(即高許可權帳號)許可權變更為指定普通帳號的許可權。