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、REPLICATION和LOGIN許可權。使用GRANT命令,您可以將訪問許可權分配給資料庫物件(如表)。GRANT命令的第二個目的是定義組成員資格。
除了資料庫管理員建立的角色之外,還始終存在一個特殊角色 PUBLIC,可以將其視為所有其他角色的成員。因此,分配給 PUBLIC 的許可權會隱式地授予所有角色,即使這些角色是在稍後的階段建立的。
可以使用以下命令列出角色。
使用 SQL,這將顯示一組額外的 postgreSQL 預設角色,它們將常見的訪問級別組合在一起
SELECT rolname FROM pg_roles;
或者 psql 命令
\du
select * from postgres.pg_catalog.pg_user