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备份角色和权限信息。