¥
立即购买

数据库角色权限管理专家

25 浏览
2 试用
0 购买
Dec 3, 2025更新

本提示词专为数据库管理员和系统架构师设计,提供专业级的数据库用户角色与权限配置方案。通过分析特定数据库类型,系统化地列出标准用户角色及其详细权限,涵盖数据访问控制、安全策略和权限管理最佳实践。该提示词能够帮助用户快速建立符合业务需求的数据库权限体系,确保数据安全性和访问效率,适用于新系统部署、权限审计和安全加固等多种数据库管理场景。

数据库类型概述

  • 类型与版本假设:MySQL 8.0/8.4 LTS(原生支持角色)。若为 MySQL 5.7 及以下,可用“角色账号 + 继承授权”方式模拟(见“权限配置建议”中的兼容说明)。
  • 权限模型要点:
    • 静态对象权限:可在全局、库、表、列、例程(PROCEDURE/FUNCTION)级授予,如 SELECT、INSERT、UPDATE、DELETE、CREATE、ALTER、DROP、INDEX、TRIGGER、EVENT、EXECUTE、SHOW VIEW、CREATE/ALTER ROUTINE、CREATE TEMPORARY TABLES、REFERENCES、GRANT OPTION 等。
    • 管理/动态权限:对服务器级能力进行细分控制,如 SYSTEM_USER、SYSTEM_VARIABLES_ADMIN、SESSION_VARIABLES_ADMIN、PERSIST_RO_VARIABLES_ADMIN、RELOAD、PROCESS、SHUTDOWN、BINLOG_ADMIN、CONNECTION_ADMIN、BACKUP_ADMIN(企业版)、CLONE_ADMIN、REPLICATION CLIENT 等。
    • 角色机制:通过 CREATE ROLE/GRANT role/SET DEFAULT ROLE 管理,支持分层授权与最小权限实施。

以下方案将系统角色与业务角色分层设计,覆盖生产、备份、复制、监控、应用与开发等主流场景。


标准角色列表(表格形式)

角色名 作用域 授权内容(摘要) 典型适用场景
r_server_admin 全局 服务器级管理与运维必需的动态/管理权限(不含高风险 FILE) 平台/DBA 服务器级运维
r_security_admin 全局 账户与角色生命周期管理(CREATE/ALTER/DROP USER/ROLE、ROLE_ADMIN、GRANT OPTION) 安全与账户管理员
r_backup_operator 全局 + 各库 逻辑备份所需:RELOAD、LOCK TABLES、PROCESS、REPLICATION CLIENT、全库 SELECT/SHOW VIEW/ TRIGGER/EVENT;可选 BACKUP_ADMIN 逻辑/物理备份账户
r_replication_applier 全局 REPLICATION SLAVE/REPLICA(从库复制拉取权限) 主从复制用户
r_replication_monitor 全局 REPLICATION CLIENT(查看复制状态) 复制监控
r_monitoring 全局 + P_S/SYS PROCESS、REPLICATION CLIENT,读取 performance_schema 与 sys 监控系统
r_schema_owner_ 指定库 该库 DDL+DML 全权限(不含高风险 FILE/全局级权限) 单库所有者/DBA
r_schema_ddl_ 指定库 该库结构变更:CREATE、ALTER、DROP、INDEX、CREATE/ALTER ROUTINE、TRIGGER、EVENT、CREATE VIEW、SHOW VIEW、REFERENCES 架构/迁移变更
r_schema_rw_ 指定库 该库读写:SELECT、INSERT、UPDATE、DELETE、EXECUTE、(可选)CREATE TEMPORARY TABLES 应用读写
r_schema_ro_ 指定库 该库只读:SELECT、SHOW VIEW、EXECUTE 只读访问/报表
r_etl_writer_ 指定库 目标库写入:INSERT、UPDATE、DELETE、SELECT、CREATE TEMPORARY TABLES;(可选)LOAD DATA LOCAL ETL 写入/落地
r_event_scheduler_ 指定库 EVENT 事件作业创建与维护

说明:

  • 动态权限名称可能因版本存在同义名(如 REPLICATION_SLAVE_ADMIN/REPLICATION_REPLICA_ADMIN),本文仅在需要时标注且尽量使用通用权限集合。
  • FILE(影响 SELECT INTO OUTFILE/LOAD DATA INFILE)为全局高风险权限,默认不纳入任何标准角色,仅在严格受控与 secure_file_priv 场景下独立授予。

各角色详细权限说明

  1. r_server_admin(服务器级管理员)
  • 用途:日常运维所需的服务器级能力,避免“一键 GRANT ALL”与高风险 FILE。
  • 建议权限(全局):
    • SYSTEM_USER(标识系统级账号)
    • SYSTEM_VARIABLES_ADMIN、SESSION_VARIABLES_ADMIN、PERSIST_RO_VARIABLES_ADMIN(变量管理)
    • RELOAD(FLUSH 系列操作)
    • PROCESS(查看线程/执行 SHOW PROCESSLIST)
    • SHUTDOWN(受控关停)
    • BINLOG_ADMIN(管理二进制日志)
    • CONNECTION_ADMIN(连接管理/KILL)
    • REPLICATION CLIENT(查看复制状态)
    • 可选:CLONE_ADMIN、RESOURCE_GROUP_ADMIN、XA_RECOVER_ADMIN、ENCRYPTION_KEY_ADMIN、TABLE_ENCRYPTION_ADMIN(按实际启用的功能选择)
  • 示例:
    • CREATE ROLE 'r_server_admin';
    • GRANT SYSTEM_USER, SYSTEM_VARIABLES_ADMIN, SESSION_VARIABLES_ADMIN, PERSIST_RO_VARIABLES_ADMIN, RELOAD, PROCESS, SHUTDOWN, BINLOG_ADMIN, CONNECTION_ADMIN, REPLICATION CLIENT ON . TO 'r_server_admin';
  1. r_security_admin(安全与账户管理员)
  • 用途:账户、密码策略、角色与授权的集中管理。
  • 建议权限(全局):
    • CREATE USER, ALTER USER, DROP USER
    • CREATE ROLE, DROP ROLE
    • ROLE_ADMIN(管理角色授予/回收)
    • GRANT OPTION(全局),允许授予/回收对象权限
    • 可选(按职责拆分):SYSTEM_VARIABLES_ADMIN(密码策略/认证策略变量管理)
  • 示例:
    • CREATE ROLE 'r_security_admin';
    • GRANT CREATE USER, ALTER USER, DROP USER, CREATE ROLE, DROP ROLE, ROLE_ADMIN, GRANT OPTION ON . TO 'r_security_admin';
  1. r_backup_operator(备份操作)
  • 用途:mysqldump 逻辑备份和状态查询;企业版可附加 BACKUP_ADMIN。
  • 建议权限:
    • 全局:RELOAD、LOCK TABLES、PROCESS、REPLICATION CLIENT
    • 对所有库对象:SELECT、SHOW VIEW、TRIGGER、EVENT(便于完整导出对象)
    • 可选:BACKUP_ADMIN(企业版物理备份/恢复)
  • 示例:
    • CREATE ROLE 'r_backup_operator';
    • GRANT RELOAD, LOCK TABLES, PROCESS, REPLICATION CLIENT ON . TO 'r_backup_operator';
    • GRANT SELECT, SHOW VIEW, TRIGGER, EVENT ON . TO 'r_backup_operator';
    • -- 如使用企业版备份:
    • -- GRANT BACKUP_ADMIN ON . TO 'r_backup_operator';
  1. r_replication_applier(复制拉取账号)
  • 用途:从库 I/O 线程连接主库。
  • 建议权限(全局):REPLICATION SLAVE(或 REPLICATION REPLICA,按版本使用)
  • 示例:
    • CREATE ROLE 'r_replication_applier';
    • GRANT REPLICATION SLAVE ON . TO 'r_replication_applier';
  1. r_replication_monitor(复制监控)
  • 用途:监控工具读取复制坐标/状态。
  • 建议权限(全局):REPLICATION CLIENT
  • 示例:
    • CREATE ROLE 'r_replication_monitor';
    • GRANT REPLICATION CLIENT ON . TO 'r_replication_monitor';
  1. r_monitoring(通用监控)
  • 用途:性能/可用性监控。
  • 建议权限:
    • 全局:PROCESS、REPLICATION CLIENT
    • 对 performance_schema 与 sys:SELECT(sys 基于视图,通常随 SELECT 可读;performance_schema 默认可读)
    • 可选:SHOW DATABASES(若需列出全部数据库名称)
  • 示例:
    • CREATE ROLE 'r_monitoring';
    • GRANT PROCESS, REPLICATION CLIENT ON . TO 'r_monitoring';
    • GRANT SELECT ON performance_schema.* TO 'r_monitoring';
    • GRANT SELECT ON sys.* TO 'r_monitoring';
    • -- 可选:GRANT SHOW DATABASES ON . TO 'r_monitoring';
  1. r_schema_owner_(库所有者)
  • 用途:单库内全生命周期管理(不含服务器级高风险权限)。
  • 建议权限(在 .*):
    • DML:SELECT, INSERT, UPDATE, DELETE
    • DDL:CREATE, ALTER, DROP, INDEX, CREATE VIEW, SHOW VIEW
    • 例程:CREATE ROUTINE, ALTER ROUTINE, EXECUTE
    • 其它:TRIGGER, EVENT, REFERENCES, CREATE TEMPORARY TABLES
  • 示例(以业务库 appdb 为例):
    • CREATE ROLE 'r_schema_owner_appdb';
    • GRANT SELECT, INSERT, UPDATE, DELETE, CREATE, ALTER, DROP, INDEX, CREATE VIEW, SHOW VIEW, CREATE ROUTINE, ALTER ROUTINE, EXECUTE, TRIGGER, EVENT, REFERENCES, CREATE TEMPORARY TABLES ON appdb.* TO 'r_schema_owner_appdb';
  1. r_schema_ddl_(库结构变更)
  • 用途:仅结构/对象层变更权限,不含 DML。
  • 建议权限(在 .*):CREATE, ALTER, DROP, INDEX, CREATE VIEW, SHOW VIEW, CREATE ROUTINE, ALTER ROUTINE, TRIGGER, EVENT, REFERENCES
  • 示例:
    • CREATE ROLE 'r_schema_ddl_appdb';
    • GRANT CREATE, ALTER, DROP, INDEX, CREATE VIEW, SHOW VIEW, CREATE ROUTINE, ALTER ROUTINE, TRIGGER, EVENT, REFERENCES ON appdb.* TO 'r_schema_ddl_appdb';
  1. r_schema_rw_(库读写)
  • 用途:应用常规读写。
  • 建议权限(在 .*):SELECT, INSERT, UPDATE, DELETE, EXECUTE;可选 CREATE TEMPORARY TABLES
  • 示例:
    • CREATE ROLE 'r_schema_rw_appdb';
    • GRANT SELECT, INSERT, UPDATE, DELETE, EXECUTE, CREATE TEMPORARY TABLES ON appdb.* TO 'r_schema_rw_appdb';
  1. r_schema_ro_(库只读)
  • 用途:报表/只读访问。
  • 建议权限(在 .*):SELECT, SHOW VIEW, EXECUTE
  • 示例:
    • CREATE ROLE 'r_schema_ro_appdb';
    • GRANT SELECT, SHOW VIEW, EXECUTE ON appdb.* TO 'r_schema_ro_appdb';
  1. r_etl_writer_(ETL 写入)
  • 用途:向指定库落地数据。
  • 建议权限(在 .*):INSERT, UPDATE, DELETE, SELECT, CREATE TEMPORARY TABLES
  • 文件导入导出:
    • 推荐优先使用 LOAD DATA LOCAL INFILE(无需 FILE),并在服务器端限制 local_infile 与白名单。
    • 如必须使用非 LOCAL 的 LOAD DATA / SELECT INTO OUTFILE,需额外授予 FILE 且配置 secure_file_priv 指向受控目录(高风险,谨慎)。
  • 示例:
    • CREATE ROLE 'r_etl_writer_appdb';
    • GRANT INSERT, UPDATE, DELETE, SELECT, CREATE TEMPORARY TABLES ON appdb.* TO 'r_etl_writer_appdb';
  1. r_event_scheduler_(事件调度)
  • 用途:创建/管理指定库的事件。
  • 建议权限(在 .*):EVENT
  • 示例:
    • CREATE ROLE 'r_event_scheduler_appdb';
    • GRANT EVENT ON appdb.* TO 'r_event_scheduler_appdb';

权限配置建议

  • 角色与用户的绑定

    • 创建业务用户并授予相应角色:
      • CREATE USER 'app_ro'@'10.%' IDENTIFIED BY '***' REQUIRE SSL;
      • GRANT 'r_schema_ro_appdb' TO 'app_ro'@'10.%';
      • SET DEFAULT ROLE 'r_schema_ro_appdb' TO 'app_ro'@'10.%';
    • 可全局开启登录即激活全部已授予角色(按需):
      • SET PERSIST activate_all_roles_on_login = ON;
  • 命名规范

    • 角色:r_<职责>[_],如 r_schema_ro_sales、r_backup_operator
    • 用户:按系统/环境/主机分隔,如 app_rw_prd@'10.10.%'、mon@'monitor-net%'
  • 分层授权

    • 系统层(server-level):r_server_admin、r_security_admin、r_backup_operator、r_replication_*、r_monitoring
    • 业务层(schema-level):r_schema_owner_、r_schema_ddl_、r_schema_rw_、r_schema_ro_、r_etl_writer_、r_event_scheduler_
  • 环境隔离

    • 生产/预发/测试分库与分用户,角色按环境创建隔离副本,避免跨环境授权。
  • 兼容 MySQL 5.7 及以下

    • 无原生角色时,使用“角色账号”模拟:
      • CREATE USER 'role_schema_ro_appdb'@'%' IDENTIFIED BY 'x';
      • GRANT SELECT, SHOW VIEW ON appdb.* TO 'role_schema_ro_appdb'@'%';
      • 再将业务用户通过 PROXY 或逐对象复制授权实现“继承”。(注意:5.7 社区版无 PROXY,通常采用脚本化同步授权)

安全注意事项

  • 最小权限原则

    • 禁止对普通用户授予 GRANT OPTION、全局 DDL/管理权限。
    • 禁止使用 GRANT ALL ON .,改为显式列举需要的权限与作用域。
  • 高风险权限管控

    • FILE:仅在配置 secure_file_priv 且确有需要时才授予,建议独立角色隔离并限制主机。
    • SYSTEM_*、CONNECTION_ADMIN、BINLOG_ADMIN、SHUTDOWN 等动态权限仅授予受控管理员。
    • 不使用已弃用/等价替代的 SUPER;在 8.0 中使用细化的动态权限。
  • 账户安全

    • 使用 caching_sha2_password(默认),启用 validate_password 组件并设置强度策略。
    • REQUIRE SSL/X509 强制传输加密;限制 Host 模式(如固定网段或主机名)。
    • 启用密码过期与轮换策略;闲置账户锁定(ALTER USER ACCOUNT LOCK)。
  • 审计与可观测性

    • 访问审计:企业版可启用 MySQL Enterprise Audit(需 AUDIT_* 动态权限);社区版可使用外置审计方案(不涉及产品特性细节)。
    • 监控仅授予 PROCESS、REPLICATION CLIENT、P_S/SYS 读取,不授予 DDL/DML。
  • 变更与审批

    • 所有授权变更通过脚本化与变更单留痕;生产变更双人复核。
    • 定期权限审计,清理未使用的角色与用户(基于最近登录/使用记录)。

最佳实践总结

  • 使用角色集中管理权限,按“系统层/业务层”分层,按库维度拆分 DDL 与 DML。
  • 显式授权代替 GRANT ALL;避免全局对象权限下放到业务用户。
  • 将备份、复制、监控、账户管理从 DBA 职责中拆解为独立角色,便于职责分离与审计。
  • 按环境(PROD/UAT/DEV)独立创建角色与用户;限制来源主机并强制 TLS。
  • 定期执行权限基线核查(与 CMDB/应用清单比对),删除冗余授权与沉睡账户。
  • 对需要文件导入导出的场景采用 LOCAL 模式优先,必要时再在受控目录授予 FILE 并记录用途。
  • 使用 SET DEFAULT ROLE 或 activate_all_roles_on_login 确保用户会话内权限可用且可控。

此方案覆盖 MySQL 8.0/8.4 常见生产场景的标准角色与权限配置,兼顾最小权限与职责分离要求,可作为新环境基线与后续扩展的模板。

数据库类型概述

PostgreSQL 采用“角色(role)”统一管理用户与组,角色可具有登录能力(LOGIN)与一组系统属性(如 SUPERUSER、CREATEDB、CREATEROLE、REPLICATION、BYPASSRLS),并通过角色继承与对象级 ACL(GRANT/REVOKE)实现权限控制。权限粒度覆盖:

  • 实例/集群级:连接保留、监控、发送信号、读/写服务器文件等(通过内置默认角色与系统属性)。
  • 数据库级:CONNECT、CREATE、TEMPORARY。
  • Schema 级:USAGE、CREATE。
  • 表级:SELECT、INSERT、UPDATE、DELETE、TRUNCATE、REFERENCES、TRIGGER。
  • 序列级(PG14+粒度更细):USAGE(nextval)、SELECT(currval/lastval)、UPDATE(setval)。
  • 函数/过程:EXECUTE。
  • 语言:USAGE。
  • 外部资源(FDW/服务器):USAGE。
  • 行级安全(RLS):按策略约束可见/可改行;BYPASSRLS 可绕过。

PostgreSQL 同时提供内置默认角色用于常见运维与只读场景(例如监控与只读数据访问),以及安全默认(例如 RLS、默认 PUBLIC 权限等需按需收紧)。

注:不同主版本的默认角色集合略有差异,以下方案按当前主流版本(13+ 至 16)设计;在具体实例中请以 \du 或查询 pg_roles/pg_authid 实际核验。

标准角色列表

角色名 类型 可登录 关键权限/属性 适用范围/用途
sysadmin_superuser 系统(自定义) SUPERUSER, CREATEROLE, CREATEDB, REPLICATION, BYPASSRLS 集群全域管理,仅限极少数平台管理员。日常业务禁用此角色。
role_admin 系统(自定义) CREATEROLE(可管理角色/成员关系,非 SUPERUSER) 安全/账号管理,原则上不接触业务数据。
db_creator 系统(自定义) CREATEDB 建库职责,与 role_admin 职责分离。
monitor_readonly 系统(自定义聚合) 成员包含:pg_monitor, pg_read_all_settings, pg_read_all_stats, pg_stat_scan_tables 统一的监控只读聚合角色,不触达业务数据内容。
backup_operator 系统(自定义) REPLICATION;按需加入 pg_read_all_data(逻辑备份) 备份账号:物理备份用 REPLICATION;逻辑备份(pg_dump 全库)可授予读取权限。
file_ops_restricted 系统(自定义) 可选加入:pg_read_server_files / pg_write_server_files / pg_execute_server_program 极少数场景需要读/写服务器文件或执行外部程序,默认不授予业务。
replication_sender 系统(自定义) REPLICATION 物理复制账号,用于流复制/归档。
auditor_metadata 系统(自定义) 成员包含:pg_read_all_settings, pg_read_all_stats 合规模块/审计仅查看系统设置与统计元数据,不看业务行数据。
app_owner_ 业务(每应用) 业务对象拥有者(数据库对象OWNER),可设默认权限 应用对象所有者,不登录;用于统一授予/回收默认权限。
app_ddl_ 业务(每应用) 在特定 schema 上 CREATE/ALTER/INDEX 权限(通过所有权/授权实现) 应用内 DDL 管理(无 SUPERUSER),限域到本应用 schema。
app_rw_ 业务(每应用) 对本应用 schema 内表:SELECT/INSERT/UPDATE/DELETE;对序列:USAGE, UPDATE;函数:EXECUTE 应用服务写角色(DML),无 DDL。
app_ro_ 业务(每应用) 对本应用 schema 内表:SELECT;对序列:SELECT(如需读 currval),函数:EXECUTE(仅读函数) 只读访问,用于报表/查询。
reporting_analyst 业务(横向) 对指定只读数据域 SELECT;对专用报表 schema 具备 CREATE 报表分析,允许在沙箱 schema 中建视图/物化视图。
login_rw_ 业务登录(每应用) INHERIT 成员:app_rw_;限定连接、search_path 等 应用生产写入账号(登录)。
login_ro_ 业务登录(每应用) INHERIT 成员:app_ro_;限定连接、search_path 等 应用/报表只读账号(登录)。

内置默认角色(参考,按需纳入上述聚合角色):

  • pg_monitor:读取常用监控视图,并可访问 pg_stat_* 等。
  • pg_read_all_settings:读取所有服务器配置。
  • pg_read_all_stats:读取所有统计信息。
  • pg_stat_scan_tables:允许手动 ANALYZE/统计扫描相关访问(只读维度)。
  • pg_read_all_data:跨库读取所有表/视图数据(谨慎使用)。
  • pg_write_all_data:跨库写所有表/视图数据(极高风险,严禁用于业务)。
  • pg_read_server_files / pg_write_server_files / pg_execute_server_program:访问服务器文件或执行外部程序,默认不授予业务。
  • pg_signal_backend:允许对其他后端发送信号(仅运维场景)。
  • pg_database_owner:特殊占位角色,代表“当前数据库的拥有者”(不可显式授予,用于 ACL/默认权限解析)。

各角色详细权限说明

  1. sysadmin_superuser
  • 范围:集群全域。仅少量平台管理员使用,不用于任何应用。
  • 能力:所有操作(SUPERUSER),包含 BYPASSRLS、REPLICATION、CREATEDB/CREATEROLE。
  • 管控:默认 NOLOGIN;需要操作时临时赋予或通过安全变更窗口执行。
  1. role_admin
  • 范围:集群级角色管理。
  • 能力:CREATEROLE,可 CREATE/ALTER/DROP ROLE,管理成员关系;不可 SUPERUSER。
  • 限制:无业务对象访问权限;与数据访问职责解耦。
  1. db_creator
  • 范围:创建数据库。
  • 能力:CREATEDB。
  • 限制:创建后不自动获得库内对象权限;库内权限另行授权。
  1. monitor_readonly(聚合)
  • 组成:pg_monitor + pg_read_all_settings + pg_read_all_stats + pg_stat_scan_tables。
  • 用途:监控系统视图、统计与参数;不读取业务表数据。
  • 限制:不具备 CONNECT 所需目标库授权时无法连接目标库;需按库授予 CONNECT/TEMP。
  1. backup_operator
  • 物理备份:REPLICATION 属性即可通过流复制协议执行 pg_basebackup(配合 pg_hba.conf)。
  • 逻辑备份:如需 pg_dump 全库,授予对应库的 SELECT/USAGE 权限,或将其加入 pg_read_all_data(谨慎,强只读)。
  • 限制:不授予写权限;与 replication_sender 职责可合并或分离。
  1. file_ops_restricted
  • 能力:按需加入 pg_read_server_files(COPY FROM FILE)、pg_write_server_files(COPY TO FILE)、pg_execute_server_program(COPY PROGRAM)。
  • 注意:高风险,仅在受控环境短期赋权,审计到位。
  1. replication_sender
  • 能力:REPLICATION;用于 wal sender。
  • 配置:pg_hba.conf 添加 replication 连接条目;与备份口令分离存放。
  1. auditor_metadata
  • 能力:读取参数与统计,不读业务行数据。
  • 用途:合规/审计只看元数据场景。
  1. app_owner_
  • 作用:应用 schema 与对象 OWNER;负责设定默认权限(ALTER DEFAULT PRIVILEGES)。
  • 限制:NOLOGIN;避免被滥用执行 DML。
  1. app_ddl_
  • 能力:在指定 schema 上 CREATE 对象(表/索引/视图/函数等);可通过所有权或 GRANT 实现 ALTER/INDEX 等。
  • 限制:不对其他应用 schema 具备任何权限。
  1. app_rw_
  • 能力:对应用 schema 内所有表 SELECT/INSERT/UPDATE/DELETE;对序列 USAGE, UPDATE;对函数 EXECUTE(限定名单)。
  • 限制:无 DDL;无跨 schema 权限。
  1. app_ro_
  • 能力:对应用 schema 内所有表 SELECT;序列如需读取当前值授予 SELECT(不授予 USAGE 以避免 nextval)。
  • 限制:无写入;无 DDL。
  1. reporting_analyst
  • 能力:对只读数据域(如 data_mart)SELECT;对 reporting schema 具备 CREATE,用于自建视图/物化视图与临时表。
  • 限制:不直接访问原始交易表,避免业务影响。
  1. login_rw_ / login_ro_
  • 能力:LOGIN;通过 INHERIT 接收 app_rw/app_ro 权限。
  • 安全:限制连接库、设置 search_path、statement_timeout、lock_timeout、work_mem 等。

权限配置建议

以下以应用名 demo 为样例(请替换 , , 等占位符)。

  1. 基础安全收敛(建议在建库后立即执行)
-- 收紧 public schema 默认 CREATE 权限
REVOKE CREATE ON SCHEMA public FROM PUBLIC;

-- 收紧数据库级默认连接(按需)
REVOKE ALL ON DATABASE demo FROM PUBLIC;
GRANT CONNECT, TEMP ON DATABASE demo TO role_admin, monitor_readonly;  -- 示例
  1. 创建业务角色骨架
-- 业务所有者与功能角色(NOLOGIN)
CREATE ROLE app_owner_demo NOLOGIN;
CREATE ROLE app_ddl_demo  NOLOGIN;
CREATE ROLE app_rw_demo   NOLOGIN;
CREATE ROLE app_ro_demo   NOLOGIN;

-- 登录角色
CREATE ROLE login_rw_demo LOGIN PASSWORD '***' INHERIT;
CREATE ROLE login_ro_demo LOGIN PASSWORD '***' INHERIT;

-- 绑定继承关系
GRANT app_rw_demo TO login_rw_demo;
GRANT app_ro_demo TO login_ro_demo;
  1. Schema 与对象所有权
-- 创建/迁移应用 schema 并指定所有者
CREATE SCHEMA demo AUTHORIZATION app_owner_demo;

-- 允许 DDL 角色在 demo schema 内创建对象
GRANT USAGE, CREATE ON SCHEMA demo TO app_ddl_demo;

-- 只读/读写角色使用 schema(USAGE)
GRANT USAGE ON SCHEMA demo TO app_rw_demo, app_ro_demo;

-- 授予应用库连接
GRANT CONNECT, TEMP ON DATABASE demo TO app_rw_demo, app_ro_demo;
  1. 现有对象授权(一次性)
-- 表与视图
GRANT SELECT, INSERT, UPDATE, DELETE ON ALL TABLES IN SCHEMA demo TO app_rw_demo;
GRANT SELECT ON ALL TABLES IN SCHEMA demo TO app_ro_demo;

-- 序列(PG14+:USAGE=nextval,SELECT=currval/lastval)
GRANT USAGE, UPDATE ON ALL SEQUENCES IN SCHEMA demo TO app_rw_demo;
GRANT SELECT ON ALL SEQUENCES IN SCHEMA demo TO app_ro_demo;

-- 函数(按需筛选)
GRANT EXECUTE ON ALL FUNCTIONS IN SCHEMA demo TO app_rw_demo, app_ro_demo;
  1. 默认权限(确保未来新对象自动继承) 注意:必须由“对象所有者”执行(即 app_owner_demo)。
-- 为未来在 demo schema 中由所有者创建的对象设默认权限
ALTER DEFAULT PRIVILEGES FOR ROLE app_owner_demo IN SCHEMA demo
  GRANT SELECT, INSERT, UPDATE, DELETE ON TABLES    TO app_rw_demo;
ALTER DEFAULT PRIVILEGES FOR ROLE app_owner_demo IN SCHEMA demo
  GRANT SELECT ON TABLES                            TO app_ro_demo;

ALTER DEFAULT PRIVILEGES FOR ROLE app_owner_demo IN SCHEMA demo
  GRANT USAGE, UPDATE ON SEQUENCES                  TO app_rw_demo;
ALTER DEFAULT PRIVILEGES FOR ROLE app_owner_demo IN SCHEMA demo
  GRANT SELECT ON SEQUENCES                         TO app_ro_demo;

ALTER DEFAULT PRIVILEGES FOR ROLE app_owner_demo IN SCHEMA demo
  GRANT EXECUTE ON FUNCTIONS                        TO app_rw_demo, app_ro_demo;

-- 若允许 DDL 由 app_ddl_demo 创建对象,也需为其创建的对象设置默认权限
ALTER DEFAULT PRIVILEGES FOR ROLE app_ddl_demo IN SCHEMA demo
  GRANT SELECT, INSERT, UPDATE, DELETE ON TABLES    TO app_rw_demo;
ALTER DEFAULT PRIVILEGES FOR ROLE app_ddl_demo IN SCHEMA demo
  GRANT SELECT ON TABLES                            TO app_ro_demo;
ALTER DEFAULT PRIVILEGES FOR ROLE app_ddl_demo IN SCHEMA demo
  GRANT USAGE, UPDATE ON SEQUENCES                  TO app_rw_demo;
ALTER DEFAULT PRIVILEGES FOR ROLE app_ddl_demo IN SCHEMA demo
  GRANT SELECT ON SEQUENCES                         TO app_ro_demo;
ALTER DEFAULT PRIVILEGES FOR ROLE app_ddl_demo IN SCHEMA demo
  GRANT EXECUTE ON FUNCTIONS                        TO app_rw_demo, app_ro_demo;
  1. 监控、备份与审计角色
-- 聚合监控角色由实例管理员一次性配置
CREATE ROLE monitor_readonly NOLOGIN;
GRANT pg_monitor, pg_read_all_settings, pg_read_all_stats, pg_stat_scan_tables TO monitor_readonly;

-- 按库授予连接(如需)
GRANT CONNECT ON DATABASE demo TO monitor_readonly;

-- 备份(物理)
CREATE ROLE backup_operator NOLOGIN REPLICATION;
-- 备份(逻辑全库,谨慎)
GRANT pg_read_all_data TO backup_operator;  -- 或针对目标库/Schema 精细授权

-- 审计仅元数据
CREATE ROLE auditor_metadata NOLOGIN;
GRANT pg_read_all_settings, pg_read_all_stats TO auditor_metadata;
  1. 连接与会话安全基线
-- 限制登录角色可连接的数据库
ALTER ROLE login_rw_demo IN DATABASE demo SET search_path = 'demo,public';
ALTER ROLE login_ro_demo IN DATABASE demo SET search_path = 'demo,public';

-- 会话级安全(示例)
ALTER ROLE login_rw_demo SET statement_timeout = '30s';
ALTER ROLE login_rw_demo SET lock_timeout      = '5s';
ALTER ROLE login_ro_demo SET statement_timeout = '2m';
  1. 行级安全(RLS)示例(多租户/隔离场景)
-- 启用 RLS
ALTER TABLE demo.orders ENABLE ROW LEVEL SECURITY;

-- 示例策略:仅允许访问与当前设置的租户ID匹配的行
CREATE POLICY p_read_orders ON demo.orders
  FOR SELECT
  TO app_ro_demo, app_rw_demo
  USING (tenant_id = current_setting('app.tenant_id')::int);

CREATE POLICY p_write_orders ON demo.orders
  FOR INSERT, UPDATE, DELETE
  TO app_rw_demo
  USING (tenant_id = current_setting('app.tenant_id')::int)
  WITH CHECK (tenant_id = current_setting('app.tenant_id')::int);

-- 会话进入时由中间件设置 app.tenant_id
-- 避免授予 BYPASSRLS(仅限超级管理员)
  1. 对公共 schema 的替代做法(如需完全禁用)
-- 可将 public schema 仅保留 USAGE,禁止 CREATE
REVOKE CREATE ON SCHEMA public FROM PUBLIC;
GRANT USAGE ON SCHEMA public TO PUBLIC;

安全注意事项

  • 严禁在应用中使用 SUPERUSER、pg_write_all_data、pg_read_all_data 等高危全域角色。
  • 默认收敛 PUBLIC 权限:至少 REVOKE public schema 的 CREATE;按需收紧数据库 CONNECT。
  • 使用 NOLOGIN 的“聚合/组角色”承载权限,登录角色仅继承所需权限,便于审计与回收。
  • 默认权限必须由对象所有者设置;对象所有者变更会影响后续默认权限的生效主体。
  • GRANT ON ALL 仅作用于“现存对象”;务必配合 ALTER DEFAULT PRIVILEGES,或在 CI/CD 中补齐授权。
  • RLS 生效后,确保中间件稳定设置隔离上下文(如 current_setting),谨慎使用 BYPASSRLS。
  • 物理复制与物理备份需配置 pg_hba.conf 与专用网络隔离,备份口令与应用口令分离管理。
  • 仅在严格受控场景下授予 pg_read/write_server_files 与 pg_execute_server_program,并保留审计。
  • 变更流程:权限增/减需走变更审批并记录(谁、何时、为何、影响范围);定期(如季度)进行权限审计与收敛。
  • 密码与登录安全:使用 SCRAM-SHA-256,强制密码轮换与到期;限制失败重试;可结合网络层 MFA/堡垒机。

最佳实践总结

  • 架构化角色分层:系统管理(sysadmin/role_admin/db_creator/monitor/backup)、业务所有权(app_owner)、业务功能(app_ddl/app_rw/app_ro)、登录承载(login_*)。
  • 最小权限原则:仅授予完成任务所需的对象级权限;分离所有权、DDL、DML、只读。
  • 统一授权入口:通过 NOLOGIN 的组角色聚合权限,通过登录角色继承使用。
  • 默认权限与自动化:结合 ALTER DEFAULT PRIVILEGES 与部署流水线,确保新对象自动获得正确授权。
  • 收敛 PUBLIC:禁止在 public schema 创建对象;按需限制数据库 CONNECT。
  • 审计与回收:建立定期巡检清单(高危角色成员、孤儿权限、跨 schema 访问),对不必要权限及时回收。
  • RLS 与多租户:多租户/隔离需求优先采用 RLS 与策略,避免在应用层自行实现“过滤”。
  • 备份/复制专用:备份与复制账号分离于业务账号;仅授予 REPLICATION 或必需只读权限。
  • 监控最小暴露:监控账号使用 pg_monitor 等默认角色组合,不直接授予数据表读取。
  • 版本核验:在目标实例通过 \du 和 pg_roles 校验默认角色可用性与权限差异,兼容团队内不同 PostgreSQL 主版本。

数据库类型概述

MongoDB 采用基于角色的访问控制(RBAC)模型。用户绑定到某个认证数据库(通常为 admin 或目标业务库),用户通过被授予的角色获取权限;角色由一组特权(privileges)构成,而特权由资源(resource:集群/数据库/集合)与操作(actions)组成。MongoDB提供一套内置角色覆蓋常见管理与业务场景,同时支持创建自定义角色以满足精细化授权需求。

关键要点:

  • 资源层级:cluster(集群级)、db(库级)、collection(集合级)
  • 授权粒度:库/集合级读写与管理操作、集群级管理与监控操作、备份/恢复操作
  • 认证机制:SCRAM-SHA-256/SCRAM-SHA-1 等(生产建议使用 SCRAM-SHA-256)
  • 角色继承:角色可以包含其他角色,实现权限复用与分层

适用部署形态:单机、复制集、分片集群(分片与路由配置相关权限需集群级角色)。

标准角色列表(表格形式)

角色名称 范围 适用场景 核心权限概述
read 数据库 业务只读 读取集合与视图,列出集合/索引
readWrite 数据库 应用常规读写 读写非系统集合(CRUD),创建/删除索引(与写相关)
dbAdmin 数据库 库级管理 查看/修改集合元数据(统计、校验、索引管理、profiling 等),不含业务数据写入
userAdmin 数据库 库级用户/角色管理 在该库内创建/修改/删除用户与自定义角色
dbOwner 数据库 单库所有权 等同于该库的 readWrite + dbAdmin + userAdmin
readAnyDatabase 全库(admin授予) 跨库只读 对所有非系统数据库的只读
readWriteAnyDatabase 全库(admin授予) 跨库读写 对所有非系统数据库的读写
dbAdminAnyDatabase 全库(admin授予) 跨库库级管理 对所有数据库执行 dbAdmin 类操作
userAdminAnyDatabase 全库(admin授予) 跨库用户/角色管理 跨库管理用户与自定义角色
clusterMonitor 集群(admin授予) 监控与只读运维 访问 serverStatus、replSetGetStatus、listShards 等监控视图
clusterManager 集群(admin授予) 集群与分片管理 分片、路由及复制集管理相关操作(不含主机层面)
hostManager 集群(admin授予) 主机级维护 主机级维护相关操作(如日志轮转等,不含操作系统权限)
clusterAdmin 集群(admin授予) 最高级集群管理 包含 clusterManager、clusterMonitor、hostManager 等,覆盖集群管理所需权限
backup 集群(admin授予) 备份账号 读取备份所需系统集合与oplog(适配 mongodump 等)
restore 集群(admin授予) 恢复账号 执行恢复所需写入及相关操作(适配 mongorestore 等)
root 集群(admin授予) 超级管理员 对所有资源执行全部操作(仅限极少量管理用户使用)

说明:

  • 带 AnyDatabase 的角色与集群级角色需要在 admin 数据库下授予。
  • dbOwner 仅对其所在数据库有效,不具备集群级权限。
  • 内置角色不覆盖所有特定业务场景(如变更流 Change Streams),此类需自定义角色补充特权。

各角色详细权限说明

  • read(库级)

    • 允许:find、listCollections、listIndexes 等只读操作
    • 不允许:insert、update、remove、创建/删除集合、修改集合元数据
  • readWrite(库级)

    • 允许:read 的全部 + insert、update、remove 等数据写操作
    • 不允许:用户/角色管理、集群级操作
  • dbAdmin(库级)

    • 允许:集合和索引管理(创建、删除索引)、查看统计(dbStats、collStats)、集合校验(validate)、profile 管理等
    • 不允许:业务数据写操作、跨库与集群级操作
  • userAdmin(库级)

    • 允许:在该库创建/修改/删除用户和角色,授予/回收角色
    • 不允许:数据读写、跨库与集群级操作
  • dbOwner(库级)

    • 组合:readWrite + dbAdmin + userAdmin(仅限该库)
    • 不允许:集群级操作
  • readAnyDatabase / readWriteAnyDatabase / dbAdminAnyDatabase / userAdminAnyDatabase(admin 授予,跨库)

    • 分别对应跨库的只读/读写/库级管理/用户与角色管理
    • 不包含集群级管理(需 cluster* 角色)
  • clusterMonitor(集群级)

    • 允许:查看 serverStatus、replSetGetStatus、listShards、top 等监控信息
    • 不允许:变更配置、数据写入
  • clusterManager(集群级)

    • 允许:复制集与分片相关管理(如分片信息、迁移 chunk 等)及路由配置相关操作
    • 不允许:主机层面维护操作(此为 hostManager)
  • hostManager(集群级)

    • 允许:主机级维护相关的数据库内操作(例如日志轮转等)
    • 不允许:变更分片/复制集配置
  • clusterAdmin(集群级)

    • 组合:clusterManager + clusterMonitor + hostManager 等;用于全面集群管理
    • 不允许:无(除非受安全设置限制)
  • backup(集群级)

    • 允许:读取备份所需系统集合和 oplog,支持一致性备份场景
    • 不允许:对业务集合进行写入
  • restore(集群级)

    • 允许:恢复所需的插入/写入和必要的元数据操作
    • 不允许:集群配置变更
  • root(集群级)

    • 允许:对所有资源执行所有操作
    • 建议:仅用于初始配置与少量平台管理员,日常避免使用

权限配置建议

建议分层的角色体系:系统/平台层、数据库/业务层、运维辅助层

  1. 平台与集群层(在 admin 下)
  • 平台超级管理员(极限少数)
    • 角色:root
  • 集群管理员
    • 角色:clusterAdmin
  • 监控账号
    • 角色:clusterMonitor
  • 备份/恢复账号
    • 角色:backup、restore

示例(在 admin 数据库执行):

  • 创建集群管理员 use admin db.createUser({ user: "cluster_admin", pwd: "<strong_password>", roles: [ { role: "clusterAdmin", db: "admin" } ] })

  • 创建备份与恢复用户 use admin db.createUser({ user: "backup_user", pwd: "", roles: [ { role: "backup", db: "admin" } ] }) db.createUser({ user: "restore_user", pwd: "", roles: [ { role: "restore", db: "admin" } ] })

  • 创建监控用户 use admin db.createUser({ user: "monitor_user", pwd: "", roles: [ { role: "clusterMonitor", db: "admin" } ] })

  1. 业务与数据库层(在目标业务库下)
  • 业务只读角色:read
  • 业务读写角色:readWrite
  • 单库管理员:dbOwner(仅限该库)
  • 库级用户管理:userAdmin(仅限该库,用于团队自管)

示例(在业务库 appdb 执行):

  • 创建读写应用用户 use appdb db.createUser({ user: "app_rw", pwd: "", roles: [ { role: "readWrite", db: "appdb" } ] })

  • 创建只读应用用户 use appdb db.createUser({ user: "app_ro", pwd: "", roles: [ { role: "read", db: "appdb" } ] })

  • 单库管理员 use appdb db.createUser({ user: "app_db_owner", pwd: "", roles: [ { role: "dbOwner", db: "appdb" } ] })

  1. 自定义业务角色(按需)
  • 变更流(Change Streams)读者:在具备读取目标库/集合的同时,需要额外授予 changeStream 特权。推荐做法:在 admin 下创建一个聚合角色授予 changeStream,再与库级 read/readWrite 组合。

示例:

  • 创建 changeStream 辅助角色(在 admin 下) use admin db.createRole({ role: "changestream_reader", privileges: [ { resource: { cluster: true }, actions: [ "changeStream" ] } ], roles: [] })

  • 将角色授予应用用户(需兼具库级 read 或 readWrite) use appdb db.updateUser("app_rw", { roles: [ { role: "readWrite", db: "appdb" }, { role: "changestream_reader", db: "admin" } ] })

  • 只读分析角色(限定集合) 建议创建针对特定集合的自定义角色,最小授权: use appdb db.createRole({ role: "analytics_read_orders", privileges: [ { resource: { db: "appdb", collection: "orders" }, actions: [ "find", "listIndexes" ] } ], roles: [] }) db.createUser({ user: "analytics_ro", pwd: "", roles: [ { role: "analytics_read_orders", db: "appdb" } ] })

  1. 初始启用鉴权与首个管理员创建(顺序建议)
  • 第一次部署:
    • 以未启用鉴权方式启动 mongod
    • 在 admin 库创建首个管理员(userAdminAnyDatabase 或 root) use admin db.createUser({ user: "platform_admin", pwd: "", roles: [ { role: "root", db: "admin" } ] })
    • 启用鉴权(security.authorization: enabled),并重启
    • 使用管理员创建其他所需用户与角色
  • 复制集/分片集群:同时配置内部认证(keyFile 或 KMIP)

安全注意事项

  • 最小权限原则:业务用户仅授予必需角色与特权,避免给应用授予 dbOwner、root、AnyDatabase、cluster 等高权限。
  • 分离职责:
    • 应用账号:read 或 readWrite
    • 库级管理:dbOwner/userAdmin
    • 集群管理:clusterAdmin
    • 监控:clusterMonitor
    • 备份/恢复:backup/restore
  • 认证与传输安全:
    • 启用 SCRAM-SHA-256
    • 全面启用 TLS/SSL,加密传输;为复制集/分片启用内部成员认证(keyFile)
  • 账户与凭据管理:
    • 禁止共享账号,分别为应用/人员创建独立用户
    • 强密码策略、定期轮换,禁用不再使用的账号
    • 使用专用只读凭据供监控与审计工具
  • 审计与日志:
    • 启用审计日志(企业版支持审计),记录用户管理与高危操作
    • 定期审计角色与用户的有效性和最小化
  • 网络与访问控制:
    • 仅监听受控网段;通过防火墙/安全组限制来源 IP
    • 禁止对公网暴露数据库端口
  • 配置变更管控:
    • 对角色/用户变更执行变更流程与审批;在测试环境验证后再应用到生产
  • 避免使用内部保留角色:
    • 不要将 __system 等内部角色授予普通用户

最佳实践总结

  • 采用分层角色模型:集群层(clusterAdmin/clusterMonitor/backup/restore)与业务层(read/readWrite/dbOwner)分离。
  • 应用账号最小化:仅授予目标库的 read 或 readWrite,如需变更流,额外授予聚合的 changestream_reader 自定义角色。
  • 少量平台管理员保留 root,其余用更细分角色满足运维场景。
  • 使用自定义角色实现集合级精细授权,避免授予 *AnyDatabase 或 dbOwner 给应用。
  • 全面启用鉴权与 TLS,复制集/分片启用内部认证;定期审计并收敛权限。
  • 将备份、恢复、监控各自独立账号化,便于权限与审计隔离。
  • 在测试环境验证角色配置与访问路径,再部署到生产,确保不阻断业务且不越权。

以上方案覆盖 MongoDB 内置标准角色与常见业务/运维场景的权限设计与配置步骤,可作为生产环境的基线框架并可按需扩展自定义角色实现更细粒度控制。

示例详情

解决的问题

把“数据库角色权限管理专家”装进你的日常工作流,让数据库管理员、系统架构师与安全负责人在最短时间内产出一套可直接落地的角色与权限方案。无论你使用的是主流关系型数据库中的哪一种,只需给出数据库类型,即可获得:标准化的角色矩阵、清晰的权限边界、可执行的配置步骤、关键的安全提示与最佳实践收口。核心价值:1)让新系统首版权限方案在当天可落地,缩短上线周期;2)以最小必要权限为原则,显著降低越权与误操作风险;3)统一多数据库的权限口径,减少跨团队沟通与返工;4)为审计与合规提供“可解释、可复用、可追溯”的文档证据。立即试用,用一条提示词,替代数小时的手工梳理与来回确认。

适用用户

数据库管理员(DBA)

在新环境中快速搭建权限体系,批量生成角色与授权清单;定期审计存量权限,识别越权并输出整改计划;将变更步骤安全落地并留痕。

系统架构师

为多库多环境设计统一角色模型,分层划定只读、读写与运维边界;支持微服务与多租户接入,减少后期重构与安全隐患。

安全合规负责人

按最小权限原则体检现有授权,定位高风险点并给出整改优先级;一键生成合规审查材料,降低审计沟通成本。

特征总结

一键生成按数据库类型定制的角色模板,快速搭建权限框架,缩短上线周期
自动梳理系统与业务角色层级,清晰界定职责边界,避免越权与权限膨胀
详细列出每个角色的可做与不可做,配套场景说明,降低沟通与误配成本
提供可直接执行的配置步骤与注意事项,按图落地,减少试错与回滚
自动识别高风险与冗余授权,给出整改清单与优先级,支持合规审查
支持最小权限与继承策略优化,一键对齐策略,保障安全同时不阻碍效率
按业务需求参数化生成专属方案,复用模板,多环境快速复制与调整
生成结构化权限文档与变更记录,便于评审备案,让审计与交接更顺畅
适配新系统首配、存量审计与安全加固等场景,覆盖全周期权限管理

如何使用购买的提示词模板

1. 直接在外部 Chat 应用中使用

将模板生成的提示词复制粘贴到您常用的 Chat 应用(如 ChatGPT、Claude 等),即可直接对话使用,无需额外开发。适合个人快速体验和轻量使用场景。

2. 发布为 API 接口调用

把提示词模板转化为 API,您的程序可任意修改模板参数,通过接口直接调用,轻松实现自动化与批量处理。适合开发者集成与业务系统嵌入。

3. 在 MCP Client 中配置使用

在 MCP client 中配置对应的 server 地址,让您的 AI 应用自动调用提示词模板。适合高级用户和团队协作,让提示词在不同 AI 工具间无缝衔接。

AI 提示词价格
¥20.00元
先用后买,用好了再付款,超安全!

您购买后可以获得什么

获得完整提示词模板
- 共 491 tokens
- 1 个可调节参数
{ 数据库类型 }
获得社区贡献内容的使用权
- 精选社区优质案例,助您快速上手提示词
使用提示词兑换券,低至 ¥ 9.9
了解兑换券 →
限时半价

不要错过!

半价获取高级提示词-优惠即将到期

17
:
23
小时
:
59
分钟
:
59