Ubuntu中PostgreSQL权限管理主要通过用户/角色创建、权限分配及回收实现,核心命令如下:
创建用户/角色
CREATE USER 用户名 WITH PASSWORD '密码' [LOGIN] [CREATEDB] [CREATEROLE]CREATE USER admin WITH PASSWORD '123456' LOGIN CREATEDB;CREATE ROLE 角色名 [CREATEDB] [CREATEROLE]CREATE ROLE readonly NOLOGIN;修改用户/角色属性
ALTER USER 用户名 WITH PASSWORD '新密码' [SUPERUSER | NOSUPERUSER]ALTER ROLE 角色名 ADD/DROP CREATEDB/CREATEROLE删除用户/角色
DROP USER 用户名; 或 DROP ROLE 角色名;
数据库级权限
GRANT {ALL PRIVILEGES | SELECT/INSERT/UPDATE/DELETE} ON DATABASE 数据库名 TO 用户/角色GRANT ALL PRIVILEGES ON DATABASE testdb TO admin;REVOKE {ALL PRIVILEGES | SELECT/INSERT/UPDATE/DELETE} ON DATABASE 数据库名 FROM 用户/角色表/模式级权限
GRANT {SELECT/INSERT/UPDATE/DELETE/TRUNCATE} ON 表名 TO 用户/角色 [WITH GRANT OPTION]GRANT USAGE ON SCHEMA 模式名 TO 用户/角色(允许访问模式)REVOKE {SELECT/INSERT/UPDATE/DELETE/TRUNCATE} ON 表名 FROM 用户/角色特殊权限
postgres用户或通过ALTER ROLE赋予(需谨慎)GRANT CONNECT ON DATABASE控制创建可登录用户并授权:
sudo -u postgres psql  
CREATE USER dev WITH PASSWORD 'dev123' LOGIN CREATEDB;  
GRANT ALL PRIVILEGES ON DATABASE devdb TO dev;  
\q  
创建只读角色并应用到所有表:
sudo -u postgres psql  
CREATE ROLE readonly NOLOGIN;  
GRANT CONNECT ON DATABASE testdb TO readonly;  
GRANT USAGE ON SCHEMA public TO readonly;  
GRANT SELECT ON ALL TABLES IN SCHEMA public TO readonly;  
ALTER DEFAULT PRIVILEGES IN SCHEMA public GRANT SELECT ON TABLES TO readonly;  
\q  
\du\l(查看数据库所有者及权限)\dp 表名pgAdmin(需安装)通过界面操作用户和权限。SUPERUSER权限,优先通过角色继承控制权限。pg_hba.conf限制IP访问。以上操作基于PostgreSQL原生权限模型,适用于Ubuntu系统下的数据库权限管理。