Debian PostgreSQL權限設置基于角色(用戶)和權限分級管理,核心操作如下:
CREATE USER 用戶名 WITH PASSWORD '密碼'; -- 創建可登錄用戶
CREATE ROLE 角色名 WITH LOGIN PASSWORD '密碼'; -- 創建帶權限的角色
DROP USER 用戶名;
DROP ROLE 角色名;
ALTER USER 用戶名 WITH PASSWORD '新密碼';
GRANT ALL PRIVILEGES ON DATABASE 數據庫名 TO 用戶名/角色名; -- 授予所有權限
REVOKE ALL PRIVILEGES ON DATABASE 數據庫名 FROM 用戶名/角色名; -- 撤銷權限
GRANT SELECT, INSERT, UPDATE, DELETE ON 表名 TO 用戶名/角色名; -- 授予增刪改查權限
GRANT SELECT(列名1, 列名2) ON 表名 TO 用戶名/角色名; -- 授予特定列權限
GRANT USAGE ON SCHEMA 公共模式名 TO 用戶名/角色名; -- 允許訪問模式
GRANT CREATE ON SCHEMA 公共模式名 TO 用戶名/角色名; -- 允許創建對象
GRANT SELECT, UPDATE ON SEQUENCE 序列名 TO 用戶名/角色名; -- 控制序列訪問
GRANT EXECUTE ON FUNCTION 函數名(參數類型) TO 用戶名/角色名;
CREATE ROLE 父角色名 WITH LOGIN PASSWORD '密碼' INHERIT;
CREATE ROLE 子角色名 WITH LOGIN PASSWORD '密碼' INHERIT;
GRANT 父角色名 TO 子角色名; -- 子角色繼承父角色權限
ALTER DEFAULT PRIVILEGES IN SCHEMA 公共模式名
GRANT SELECT ON TABLES TO 用戶名/角色名; -- 新建表自動繼承SELECT權限
\du -- 查看所有用戶及角色
\dp 表名 -- 查看表級權限
SELECT * FROM information_schema.role_table_grants WHERE grantee = '用戶名'; -- 詳細權限明細
REVOKE 權限類型 ON 對象 FROM 用戶名/角色名; -- 撤銷已授予權限
編輯 /etc/postgresql/{版本}/main/pg_hba.conf,配置客戶端訪問規則,例如:
# 允許本地所有用戶通過密碼認證訪問所有數據庫
host all all 127.0.0.1/32 md5
# 允許特定IP段訪問指定數據庫
host mydb myuser 192.168.1.0/24 md5
修改后需重啟服務生效:
sudo systemctl restart postgresql
\du和information_schema查詢權限分配情況,確保合規。以上操作需在postgres用戶或具有超級權限的角色下執行,涉及生產環境建議提前備份數據庫。