温馨提示×

Debian PostgreSQL权限设置详解

小樊
47
2025-08-14 08:35:48
栏目: 云计算

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 用户名/角色名;  -- 授予特定列权限  
    
  • 模式(Schema)级别
    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 用户名/角色名;  -- 撤销已授予权限  
    

五、连接控制(pg_hba.conf)

编辑 /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  

关键原则

  • 最小权限原则:仅授予用户完成任务所需的最低权限,避免过度授权。
  • 角色复用:通过角色继承和权限分组,简化权限管理复杂度。
  • 安全审计:定期通过\duinformation_schema查询权限分配情况,确保合规。

以上操作需在postgres用户或具有超级权限的角色下执行,涉及生产环境建议提前备份数据库。

0