返回部落格

如何在 PostgreSQL 中使用角色與管理權限

如何在 PostgreSQL 中使用角色與管理權限

PostgreSQL 是一款開源的 DBMS,它進一步使用 SQL。這是一個非常強大的工具,用於在 VPS 上管理應用程式和託管網頁數據。在本教學中,您將學習如何在 PostgreSQL 中管理權限。它將幫助您為您的應用程式角色提供所需的權限。我們將在 Ubuntu 18.04 雲端伺服器 在 CloudSigma 上。

安裝 PostgreSQL

要下載並安裝 PostgreSQL,請執行以下命令:

安裝程式將建立一個預設使用者 – “Postgres” 來進行操作。在本教學的大部分內容中,我們都將使用此使用者。您可以使用此命令登入該使用者:

現在 PostgreSQL 已經安裝完畢,您將學習它如何處理權限。您也可以參考我們的 在 Ubuntu 上設定 PostgreSQL 的教學 ,以獲取安裝過程的詳細逐步指南。

PostgreSQL 權限概念

Postgres 透過 “角色” 的概念來管理權限。使用角色時,使用者和群組之間沒有區別。角色比傳統 Unix 系統的使用者和群組更具彈性。例如,一個角色可以作為另一個角色的成員,並繼承其權限。

在 PostgreSQL 中檢視角色

要檢視 PostgreSQL 中的角色,您需要先使用以下命令登入提示字元:

然後,執行以下命令以檢視角色:

show roles manage permissions in PostgreSQL

目前,只有一個具有所有權限的預設角色。

如何在 PostgreSQL 中建立角色

您可以從命令列或在 Postgres 終端機中為 Postgres 建立角色。您可以嘗試以下兩種方法,隨後您將了解如何在 PostgreSQL 中管理權限和存取。

如何從 PostgreSQL 內部建立角色

建立角色最簡單的方法是在 Postgres 的提示字元中進行。您可以使用以下命令來執行此操作:

要檢查它是否已建立,請執行命令:

create role from prompt

它指出新角色沒有登入權限。您將在稍後的教學中學習如何變更該設定。

如何從命令列建立角色

上述方法的替代方案是從命令列建立使用者。要退出 PostgreSQL 提示字元,請輸入以下內容:

您可以使用以下命令建立一個名為 “test” 的角色:

執行上述命令後,登入 psql,並使用以下命令列出角色:

creating user from commandline

您可以觀察到,以此方式建立的使用者不具有相同的屬性。

如何在 PostgreSQL 中刪除角色

您可以使用以下語法輕鬆刪除 PostgreSQL 中的角色:

您可以使用以下命令刪除我們之前建立的示範角色:

drop role

如果我們嘗試刪除一個不存在的角色,它只會拋出錯誤。要查看此情況,您可以嘗試再次刪除同一個角色:

drop role fail

如果您希望在角色不存在時命令不拋出錯誤,可以在命令中加入 ‘IF EXISTS’:

您可以使用此命令重新嘗試刪除該角色:

drop role if exists

如何在建立角色時定義權限

到目前為止,您已經建立並刪除了角色。在本節中,您將建立具有不同權限的角色。您可以透過在 create 命令中指定角色的權限來執行此操作:

要查看此選項,您可以使用此命令開啟說明:

help create user

如果您想建立一個具有登入權限的角色,可以像這樣建構命令:

create role with login manage permissions in PostgreSQL

正如我們前面所見,如果您想建立具有登入權限的角色,您也可以使用以下命令:

這兩個命令之間唯一的區別在於,‘CREATE USER’ 預設會賦予該角色登入權限。

如何在 PostgreSQL 中變更角色的權限

到目前為止,您已經嘗試了在建立使用者時如何賦予權限。在本節中,您將修改已建立使用者的權限。修改命令的語法為:

例如,如果需要,您可以使用此命令將 demo_role 的登入權限變更為 ‘log in’:

alter nologin

若要允許使用者再次登入,您可以使用以下命令修改權限:

如何在 PostgreSQL 中以不同的使用者身分登入

預設情況下,如果您的使用者名稱與系統使用者名稱相符,PostgreSQL 僅允許您在本地登入。為了解決這個問題,您可以變更登入類型,或者將 PostgreSQL 設定為使用環回網路介面。即使連線是本地的,該介面也會將連線類型變更為遠端。

在本節中,您將嘗試第二種方法。首先,您可以設定使用者的密碼,以便進行驗證。

使用以下命令設定 ‘demo_user’ 的密碼:

出現提示時,輸入並確認密碼。完成後,您可以退出 PostgreSQL 介面並返回到您一般的機器使用者:

PostgreSQL 要求您使用與作業系統使用者名稱相符的使用者名稱進行登入,並且使用相同的使用者名稱連接資料庫。由於在此情況下您並非如此操作,因此您必須明確指定要使用的選項。您可以使用以下語法:

user:您想要用來連線的使用者名稱
DB:您有權限存取的現有資料庫
-h 127.0.0.1:向 PostgreSQL 指定您將透過網路介面連線到本機。即使使用者名稱與系統使用者名稱不符,此選項也允許我們進行驗證。
-W:指示 PostgreSQL 您將輸入密碼

要使用我們的 “test_user” 登入,我們可以發布以下命令:

postgresql login through network interface manage permissions in PostgreSQL

輸入密碼後,您將登入到 shell。在我們的範例中,我們使用資料庫 ‘postgres’,這是安裝過程中自動設定的預設資料庫。

在此工作階段中,根據您選擇登入的使用者,您將面臨沒有適當權限來執行各種操作的問題。此問題的原因在於您尚未給予該使用者足夠的權限來管理事務。

在下一節中,您將向使用者授予所需的權限。首先,您需要將使用者切換回管理員使用者:

在 PostgreSQL 中管理權限:如何在 PostgreSQL 中授予權限

在 PostgreSQL 中,如果資料庫或資料表是由特定角色建立的,則只有該角色有權限對其進行修改。例外情況是具有超級使用者權限的角色。在本節中,您將向其他角色授予權限。您可以使用 ‘GRANT’ 陳述式向其他角色授予權限。語法為:

您可以建立一個簡單的資料表來執行該命令:

若要查看已建立的資料表,請執行以下命令:

create table manage permissions in PostgreSQL

現在您有了一個 demo 資料表,您可以將 ‘demo’ 資料表的權限授予 ‘demo_role’。您可以使用此命令給予該角色 ‘UPDATE’ 權限:

您可以透過將權限指定為 ‘ALL’ 來授予角色所有權限:

如果您想將特定權限授予系統上的所有角色,可以使用關鍵字 ‘public’ 代替角色,如下列命令所示:

您可以使用以下命令查看所有已授予的權限:

granted permissions

在 PostgreSQL 中管理權限:如何在 PostgreSQL 中移除權限

您可以使用 ‘REVOKE’ 命令輕鬆移除角色的權限。這與 grant 命令非常相似:

與 GRANT 類似,我們可以使用關鍵字 – ‘ALL’ 和 ‘PUBLIC’ 來授予所有權限或將權限授予所有角色:

如何在 PostgreSQL 中使用群組角色

為了解決廣泛的權限控制,角色具有足夠的彈性,允許與其他角色進行群組。例如,您可以建立一個角色 – ‘temporary_role’,然後將 ‘demo_role’ 和 ‘test_user’ 新增到該角色中:

現在,您只需透過管理 ‘temporary_role’ 角色的權限,即可管理這兩個角色的權限。這使得權限管理更加容易。您可以使用此命令查看角色成員資格資訊:

role - group manage permissions in PostgreSQL

任何群組成員都可以透過使用 ‘set role’ 命令來以該群組的身分執行操作。由於 ‘postgres’ 使用者是超級使用者,因此即使您不是該群組的成員,也可以使用 ‘set role’:

您現在建立的任何資料表都將歸 temporary_role 所有:

若要檢查資料表的擁有權,請執行以下命令:

create table with temporary_role

您可以看到 ‘temporary_role’ 角色擁有了新資料表以及與序列 (serial) 資料類型相關聯的序列。若要恢復到原始角色權限,請執行以下命令:

如果您希望角色擁有其所屬角色的所有權限,可以使用 ‘alter role’ 命令指定 ‘inherit’ 屬性:

透過上述命令,‘test_user’ 已獲得其所屬角色的所有權限。若要刪除角色,您可以使用 ‘drop role’ 命令:

drop role manage permissions in PostgreSQL

上述命令會拋出錯誤,因為我們有一些物件(例如資料表 ‘hello’)依賴於它。若要刪除它,您可以將資料表的擁有權轉移給其他角色:

您可以使用以下命令檢查 temporary_role 現在是否不擁有任何資料表:

check ownerships

您現在可以刪除 ‘temporary_role’,因為它現在沒有任何依賴關係:

雖然上述命令會刪除 temporary_users 角色,但該角色群組的前成員並未被移除。

結論

您已完成本教學課程,現在您已瞭解如何在 PostgreSQL 中管理權限。您可以輕鬆地管理這些權限。瞭解如何管理權限可確保您的應用程式能夠存取所需的資料庫,同時無法存取其他應用程式所使用的任何其他資料庫。

祝您運算愉快!

author

Akshay Nagpal

作者 · CloudSigma

Preslav Dobrev 是 CloudSigma 的創意設計師,專注於透過傳統與創新行銷渠道建立一致的企業形象。他擅長將藝術願景與策略行銷相融合,創造具有影響力的品牌敘事。

留言

目前尚無留言。成為第一個留言的人吧。