PostgreSQL 用戶和權限管理
創建
CREATE ROLE rolename;
CREATE USER username;
CREATE USER和CREATE ROLE的區別在於,CREATE USER指令創建的用戶默認是有登錄權限的,而CREATE ROLE沒有。
創建用戶時設定用戶屬性
基本語法格式
CREATE ROLE role_name WITH optional_permissions;
示例:在創建用戶時設定登錄權限。
CREATE ROLE username WITH LOGIN;
可以通過\h CREATE ROLE指令查看全部可設置的管理權限
修改用戶屬性
修改權限的命令格式
ALTER ROLE username WITH attribute_options;
例如:可通過以下方式禁止用戶登錄
ALTER ROLE username WITH NOLOGIN;
設置訪問權限
語法格式如下:
GRANT permission_type ON table_name TO role_name;
示例
GRANT UPDATE ON demo TO demo_role; --賦予demo_role demo表的update權限
GRANT SELECT ON ALL TABLES IN SCHEMA PUBLIC to demo_role; --賦予demo_role所有表的SELECT權限
特殊符號:ALL代表所訪問權限,PUBLIC代表所有用戶
GRANT ALL ON demo TO demo_role; --賦給用戶所有權限
GRANT SELECT ON demo TO PUBLIC; --將SELECT權限賦給所有用戶
\z或\dp指令顯示用戶訪問權限。
\h GRANT顯示所有可設置的訪問權限
撤銷用戶訪問權限
語法格式如下:
REVOKE permission_type ON table_name FROM user_name;
其中permission_type和table_name含義與GRANT指令中相同。
用戶組
在postgres中用戶實際上是role,同時組也是role。 包含其他role的role就是組。
創建組示例:
CREATE ROLE temporary_users;
GRANT temporary_users TO demo_role;
GRANT temporary_users TO test_user;
切換ROLE
SET ROLE role_name; --切換到role_name用戶
RESET ROLE; --切換回最初的role
INHERIT權限:該屬性使組成員擁有組的所有權限
ALTER ROLE test_user INHERIT;
刪除用戶和組
刪除用戶和組很簡單:
DROP ROLE role_name;
DROP ROLE IF EXISTS role_name;
應用
create user zabbix ;
create database zabbix owner zabbix;
alter user zabbix password zabbix;
grant all on DATABASE zabbix to zabbix;
COMMENT ON DATABASE zabbix is 'used for zabbix data store'
