跳轉到內容

PostgreSQL/安全

來自華夏公益教科書,開放的書籍,開放的世界

PostgreSQL 支援角色 [1]的概念來處理資料庫中的安全問題。角色獨立於作業系統使用者帳戶(除了在 pg_hba.conf 檔案中定義的特殊情況對等身份驗證)。

角色的概念包含了具有相同許可權的單個使用者和使用者組的概念。角色可以被認為是單個數據庫使用者,也可以是資料庫使用者組,具體取決於角色的設定方式。因此,過時的 SQL 命令CREATE USER ... 只是CREATE ROLE ... 的別名。角色對資料庫物件(如表或函式)具有某些許可權,並且可以將這些許可權分配給其他角色。角色在整個叢集中是全域性的,而不是針對單個數據庫。

通常,具有相同許可權的單個使用者被分組到一個使用者組中,並且許可權被授予該組。

 -- ROLE, in the sense of a group of individual users or other roles
 CREATE ROLE group_1 ENCRYPTED PASSWORD 'xyz';
 -- assign some rights to the role
 GRANT SELECT ON table_1 TO group_1;
 -- ROLE, in the sense of some individual users
 CREATE ROLE adam LOGIN ENCRYPTED PASSWORD 'xyz';  -- Default is NOLOGIN
 CREATE ROLE anne LOGIN ENCRYPTED PASSWORD 'xyz';
 -- the link between user group and individual users
 GRANT group_1 TO adam, anne;

使用CREATE ROLE命令,您可以為該角色分配SUPERUSER、CREATEDB、CREATEROLE、REPLICATIONLOGIN許可權。使用GRANT命令,您可以將訪問許可權分配給資料庫物件(如表)。GRANT命令的第二個目的是定義組成員資格。

除了資料庫管理員建立的角色之外,還始終存在一個特殊角色 PUBLIC,可以將其視為所有其他角色的成員。因此,分配給 PUBLIC 的許可權會隱式地授予所有角色,即使這些角色是在稍後的階段建立的。

列出現有角色

[編輯 | 編輯原始碼]

可以使用以下命令列出角色。

使用 SQL,這將顯示一組額外的 postgreSQL 預設角色,它們將常見的訪問級別組合在一起

SELECT rolname FROM pg_roles;

或者 psql 命令

\du

使用者

[編輯 | 編輯原始碼]
select * from postgres.pg_catalog.pg_user

參考文獻

[編輯 | 編輯原始碼]
  1. 角色的概念 [1]


華夏公益教科書