簡體   English   中英

Azure PostgreSQL即服務-為每個數據庫創建單獨的用戶將提供“權限被拒絕”

[英]Azure PostgreSQL as service - Create separate user per database gives “Permission denied”

我的應用程序是多租戶的。 我正在為每個租戶/用戶創建一個數據庫。 到目前為止,我正在使用c#代碼中的以下命令創建所有數據庫。

CREATE DATABASE @userDBName WITH OWNER = @dbOwner ENCODING = 'UTF8';

這樣,我看到所有數據庫都具有相同的所有者,並且該所有者可以訪問所有數據庫中的所有表。

現在,根據新的安全性要求,我們要實現的是每個數據庫只能由一個用戶訪問,而一個數據庫的用戶則不能訪問另一個數據庫。

由於我是第一次處理Postgres中角色/用戶的概念,所以到目前為止我所做的一切都無法找到運氣。

我創建了用戶,並嘗試向他們授予對單個數據庫的訪問權限

CREATE USER test WITH ENCRYPTED PASSWORD '123456';
GRANT ALL PRIVILEGES ON DATABASE userdb1 TO test;

現在,當在c#中的連接字符串中,如上所述給用戶Id ='test'和Password時,出現權限被拒絕錯誤。

另外,從PgAdmin,當我進入數據庫並嘗試將所有者更改為我在上面創建的新用戶時,出現此錯誤

ERROR:  must be member of role test

到底需要做什么? 我已經探索了互聯網上所有可能的解決方案,並嘗試了幾乎所有內容,但是沒有什么幫助很大。

那很簡單。

以超級用戶身份連接到數據庫,然后運行(假設newowner是應擁有數據庫的角色):

REASSIGN OWNED BY oldowner TO newowner;
REVOKE CONNECT, TEMPORARY ON DATABASE mydb FROM PUBLIC;

您得到的錯誤是因為您不是超級用戶。

雖然與您如何創建新數據庫的問題沒有直接關系。 您可能需要重新考慮每個客戶使用一個數據庫的方法,在擴展到成千上萬的租戶時可能會出現一些問題-https: //www.citusdata.com/blog/2018/06/28/scaling-從一到一十萬租客/

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM