2

我在Amazon RDS上的PostgreSQL數據庫上擁有用戶abc。該用戶是超級用戶,只要我可以告訴:Amazon RDS上的pg_terminate_backend的權限

=> grant rds_superuser to abc; 
NOTICE: role "abc" is already a member of role "rds_superuser" GRANT ROLE 

我試圖殺死一些交易,但是我得到:

=> select pg_terminate_backend(pid) from pg_stat_activity; 
ERROR: must be superuser or have the same role to terminate other server processes 

我通過亞馬遜RDS文檔廣泛搜索,但我還是不要沒辦法。我在哪裏犯錯誤?

回答

2

亞馬遜爲他們的數據庫管理員角色選擇了一個令人困惑的名字。它不是,事實上,一個超級用戶儘可能的PostgreSQL而言,你可以驗證與:

SHOW is_superuser; 

實際的PostgreSQL的超級用戶權限級別不RDS用,因爲它會讓你「突圍「,通過加載自己的代碼,直接修改文件等。

因此,除非Amazon爲其提供SECURITY DEFINER包裝函數,否則您不能在RDS中使用僅限超級用戶的功能,或者將AWS API調用暴露給讓您間接調用該功能。

然而,在這種情況下,你只讀了一半的錯誤消息:

ERROR: must be superuser or have the same role to terminate other server processes

你的SQL試圖終止連接到數據庫,因爲它沒有WHERE條款。其中一些連接必須具有不同的用戶角色,但您不是超級用戶,因此您無法做到這一點。

儘管如此,您仍然可以終止來自您自己的用戶名的連接。

+0

哦,快點。事實上,我確認問題在於試圖終止其他用戶擁有的交易,而不是'abc'。 – julkiewicz