在CentOS系統上,首先需要安裝PostgreSQL數據庫并啟動服務,這是權限管理的基礎環境。
yum
包管理器安裝核心數據庫及擴展工具。sudo yum update -y
sudo yum install -y postgresql-server postgresql-contrib
postgresql-setup
命令創建初始數據庫集群。sudo postgresql-setup --initdb
sudo systemctl start postgresql
sudo systemctl enable postgresql
以上步驟完成后,PostgreSQL服務已正常運行,接下來可進行權限相關的配置。
PostgreSQL采用**角色(Roles)**模型管理權限,角色可以是用戶(能登錄數據庫)或組(僅用于權限分配)。
CREATE ROLE
命令,指定角色名(如db_user
)。CREATE ROLE db_user;
LOGIN
權限,使角色能作為數據庫用戶登錄。CREATE ROLE app_user WITH LOGIN PASSWORD 'SecurePassword123!';
CREATE ROLE dev_group;
ALTER ROLE
命令更新用戶密碼(生產環境建議定期更換復雜密碼)。ALTER ROLE app_user WITH PASSWORD 'NewSecurePassword456!';
SUPERUSER
屬性。ALTER ROLE admin_user WITH SUPERUSER;
DROP ROLE
命令,若角色擁有數據庫對象(如表、視圖),需先轉移或刪除這些對象。DROP ROLE old_user;
以上命令均在psql
命令行工具中執行(以postgres
用戶登錄)。
PostgreSQL的權限分為數據庫級、模式級、表級、列級等,需根據實際需求分配最小必要權限。
GRANT ALL PRIVILEGES ON DATABASE mydb TO app_user;
CONNECT
)或創建臨時表(TEMPORARY
)。GRANT CONNECT, TEMPORARY ON DATABASE mydb TO readonly_user;
CREATE
)或使用模式中的對象(USAGE
)。GRANT USAGE, CREATE ON SCHEMA public TO dev_group;
SELECT
(查詢)、INSERT
(插入)、UPDATE
(更新)、DELETE
(刪除)等權限。GRANT SELECT, INSERT, UPDATE ON TABLE employees TO app_user;
salary
)授予SELECT
權限,限制用戶訪問敏感數據。GRANT SELECT (id, name, department) ON TABLE employees TO readonly_user;
REVOKE
命令取消之前授予的權限(語法與GRANT
相反)。REVOKE INSERT, UPDATE ON TABLE employees FROM app_user;
ALTER DEFAULT PRIVILEGES
命令,讓未來創建的對象自動繼承指定權限(不影響現有對象)。ALTER DEFAULT PRIVILEGES IN SCHEMA public GRANT SELECT ON TABLES TO readonly_user;
以上命令覆蓋了常見的權限場景,可根據業務需求組合使用。
pg_hba.conf
文件是PostgreSQL的客戶端認證配置文件,用于控制哪些IP地址、用戶能以何種方式訪問數據庫。
默認路徑為/var/lib/pgsql/data/pg_hba.conf
(PostgreSQL數據目錄下)。
peer
認證(無需密碼,依賴系統用戶)。local all all peer
md5
認證(密碼加密)。host all all 127.0.0.1/32 md5
md5
認證。host all all 192.168.1.0/24 md5
修改pg_hba.conf
后,需重新加載PostgreSQL服務使配置生效:
sudo systemctl reload postgresql
安全提示:
md5
或scram-sha-256
加密認證,避免明文傳輸密碼。權限管理需配合以下安全措施,進一步提升數據庫安全性:
編輯postgresql.conf
文件,啟用SSL并指定證書路徑:
ssl = on
ssl_cert_file = '/var/lib/pgsql/data/server.crt'
ssl_key_file = '/var/lib/pgsql/data/server.key'
重啟服務使配置生效:
sudo systemctl restart postgresql
\du
命令查看所有角色的權限摘要,或查詢pg_roles
系統表獲取詳細信息。\du
SELECT * FROM pg_roles WHERE rolname = 'app_user';
\dp
命令查看當前數據庫中所有表的權限,或查詢information_schema.table_privileges
視圖。\dp
SELECT * FROM information_schema.table_privileges WHERE table_name = 'employees';
使用pg_dump
工具定期備份數據庫,防止數據丟失:
pg_dump -U postgres -d mydb -f mydb_backup.sql
以上措施能有效降低權限濫用、數據泄露等安全風險。