Debian系統下PostgreSQL權限設置操作指南
在Debian系統中,首先需要通過包管理器安裝PostgreSQL及擴展工具包:
sudo apt update
sudo apt install postgresql postgresql-contrib
安裝完成后,PostgreSQL服務會自動啟動,postgres用戶為系統超級用戶(用于初始配置)。
以postgres超級用戶身份進入PostgreSQL交互式終端(psql):
sudo -u postgres psql
此時會進入postgres=#提示符界面,后續權限操作均在此執行。
PostgreSQL采用“角色(Role)”模型管理權限,用戶(User)本質是具有LOGIN屬性的特殊角色。
CREATE ROLE myuser WITH LOGIN PASSWORD 'SecurePassword123!';
LOGIN:允許角色登錄數據庫;PASSWORD:設置登錄密碼(需符合復雜性要求)。若需創建可管理數據庫的角色(如創建數據庫、角色),可添加CREATEDB、CREATEROLE屬性:
CREATE ROLE myadmin WITH LOGIN PASSWORD 'AdminPass' CREATEDB CREATEROLE;
DROP ROLE myuser; -- 刪除角色及其所有權限
權限可分為數據庫級、模式級、表級、列級、序列級等,遵循“最小權限原則”。
GRANT ALL PRIVILEGES ON DATABASE mydatabase TO myuser;
REVOKE ALL PRIVILEGES ON DATABASE mydatabase FROM myuser;
public模式(默認模式)的使用權限(允許訪問模式內的對象):GRANT USAGE ON SCHEMA public TO myuser;
GRANT ALL PRIVILEGES ON TABLE mytable TO myuser;
GRANT SELECT, INSERT, UPDATE ON TABLE mytable TO myuser;
REVOKE UPDATE ON TABLE mytable FROM myuser;
email列):GRANT SELECT (id, name), UPDATE (email) ON TABLE mytable TO myuser;
GRANT USAGE, SELECT ON SEQUENCE mysequence TO myuser;
CREATE ROLE readonly WITH LOGIN PASSWORD 'ReadonlyPass' INHERIT;
GRANT CONNECT ON DATABASE mydatabase TO readonly;
GRANT USAGE ON SCHEMA public TO readonly;
GRANT SELECT ON ALL TABLES IN SCHEMA public TO readonly;
CREATE ROLE report_user WITH LOGIN PASSWORD 'ReportPass' INHERIT;
GRANT readonly TO report_user; -- 子角色自動擁有父角色的權限
pg_hba.conf文件用于限制客戶端連接的IP范圍及認證方式,路徑為/etc/postgresql/<version>/main/pg_hba.conf。
# TYPE DATABASE USER ADDRESS METHOD
host all all 192.168.1.0/24 md5 # 允許192.168.1.0/24網段用戶用MD5密碼連接
hostssl all all 0.0.0.0/0 cert # 強制所有遠程連接使用SSL證書
METHOD可選:md5(密碼認證)、cert(SSL證書認證)、trust(信任連接,僅限內網)。修改配置后,重啟PostgreSQL服務:
sudo systemctl restart postgresql
\du
\l mydatabase
通過SQL查詢information_schema系統視圖:
SELECT table_catalog, table_schema, table_name, privilege_type
FROM information_schema.table_privileges
WHERE grantee = 'myuser';
ALTER USER myuser WITH PASSWORD 'NewSecurePassword456!';
REVOKE myrole FROM myuser; -- 撤銷角色myrole對用戶myuser的分配
若需讓未來創建的表、序列等對象自動授予特定角色權限,可使用ALTER DEFAULT PRIVILEGES:
ALTER DEFAULT PRIVILEGES IN SCHEMA public
GRANT SELECT, INSERT ON TABLES TO myrole; -- 未來創建的表自動授予myrole查詢、插入權限
SELECT權限);\du、information_schema定期檢查權限分配情況;postgresql.conf中的ssl = on)并限制連接IP;pg_dumpall -g備份角色和權限信息。