☰
达梦 DM8 使用 GRANT SELECT ON SCHEMA 给账号授予整个模式只读权限(含新建表自动授权)
2026/10/14 7:44:29 网站建设 项目流程

场景:给 fanruan 用户授予 datacenter 模式表只读权限,新建表自动继承查询权限

一、方案说明

达梦 DM8 提供GRANT ... ON SCHEMA模式级一键授权语法。授权成功后,该模式下已有表 + 后续新建的表,用户自动获得 SELECT 查询权限,无需重复执行授权 SQL。

⚠️ 重要前提:该语法依赖 INI 静态参数GRANT_SCHEMA,默认关闭;修改静态参数需要重启数据库实例。 如果业务窗口不允许重启数据库,请使用【备选方案:逐表批量授权】,无需重启,缺点是新增表不会自动授权。

引用官方文档

  1. DM8 安全管理手册 - 3.3.4 模式权限的分配与回收 自主访问控制 | 达梦技术文档

原文要点:<对象> 为 SCHEMA 时,须提前设置 INI 参数 GRANT_SCHEMA=1 或 2,即开启授予和回收模式权限功能。授予模式权限后,用户对该模式下已存在的对象拥有指定权限,对该模式下后续新建的同类型对象自动拥有该权限。

  1. DM8 SQL 语言使用手册 附录 3 系统存储过程 SP_SET_PARA_VALUE 附录 | 达梦技术文档

SP_SET_PARA_VALUE 用于修改 dm.ini 整型参数;scope=2 代表仅写入 ini 文件,静态参数修改后必须重启实例加载生效。

  1. DM8 SQL 语言使用手册 3.2.1 用户定义语句 CREATE USER 数据定义语句 | 达梦技术文档

CREATE USER 创建数据库用户,创建用户后必须授予 CREATE SESSION 系统权限,用户才可以登录数据库。

二、前置条件

  1. 数据库版本:DM8 ≥ 8.1.3.15,低版本不支持ON SCHEMA语法
  2. 执行账号:SYSDBA(三权分立)/ DB_OBJECT_ADMIN(四权分立)
  3. 停机窗口:需要数据库重启操作,业务低峰期执行

三、完整操作步骤

步骤 1:检查当前 GRANT_SCHEMA 参数

SELECT PARA_NAME,PARA_VALUE FROM V$DM_INI WHERE PARA_NAME='GRANT_SCHEMA';
  • 返回PARA_VALUE=0:默认关闭,需要修改参数并重启
  • 返回PARA_VALUE=1:参数已开启,直接跳转到步骤 4,无需修改参数、无需重启

步骤 2:开启 GRANT_SCHEMA 参数(参数为 0 才执行)

-- scope=2:仅写入dm.ini磁盘文件,静态参数,内存不生效,修改后必须重启实例 SP_SET_PARA_VALUE(2,'GRANT_SCHEMA',1);

步骤 3:重启达梦实例,验证参数生效

Linux dmdba 用户执行重启命令:

systemctl restart DmServiceDMSERVER

重启完成,再次校验参数:

SELECT PARA_NAME,PARA_VALUE FROM V$DM_INI WHERE PARA_NAME='GRANT_SCHEMA';

查询结果必须为 1,否则GRANT SELECT ON SCHEMA会报语法错误

步骤 4:创建 fanruan 用户(用户不存在才执行,已存在跳过)

CREATE USER fanruan IDENTIFIED BY "Fanruan@2026";

密码按现场密码安全策略自行修改

步骤 5:授予用户登录会话权限(必选,否则无法连接数据库)

GRANT CREATE SESSION TO fanruan;

步骤 6:核心授权语句,授予 datacenter 模式只读权限

-- 授予 fanruan 访问 datacenter 模式所有表(已有表+未来新建表自动拥有select) GRANT SELECT ON SCHEMA datacenter TO fanruan;

不添加WITH ADMIN OPTION,代表 fanruan 不能把该权限转授其他账号,生产环境推荐不加。

步骤 7:SYSDBA 校验模式级授权信息

SELECT GRANTEE,PRIVILEGE,SCHEMA_NAME FROM DBA_SCHEMA_PRIVS WHERE GRANTEE='FANRUAN';

步骤 8:业务侧验证,fanruan 账号登录测试

fanruan 账号连接数据库后执行测试查询:

-- 测试查询datacenter模式表,取前10行验证 SELECT * FROM datacenter.ods_table WHERE ROWNUM <=10;

注意:已经建立的旧会话不会自动加载新权限,fanruan 账号需要重新连接数据库,新会话权限立即生效。

四、权限回收脚本(后期需要撤销只读权限)

REVOKE SELECT ON SCHEMA datacenter FROM fanruan;

执行回收后,已有表和未来新建表的自动 SELECT 权限全部取消。

五、重要限制 & 坑点(必看)

  1. 仅对 TABLE 表生效!视图、存储过程、序列不会自动授权datacenter 模式下新建视图,fanruan 访问视图需要单独授权:
GRANT SELECT ON datacenter.v_test TO fanruan;
  1. GRANT_SCHEMA是实例全局静态参数,开启后实例内所有 DBA 均可使用 ON SCHEMA 模式批量授权,扩大权限管控面,存在一定安全风险。
  2. 误区提醒:修改参数 + 重启≠自动授权。参数只是开启语法开关,必须手动执行 GRANT 语句,fanruan 账号才会获得权限。
  3. 仅作用于 datacenter 单个模式,不会赋予其他模式的访问权限,区别于SELECT ANY TABLE全局查表权限。

六、备选方案:业务不能停机、不允许重启数据库(推荐很多生产使用)

不开启 GRANT_SCHEMA,批量生成 datacenter 模式下所有表的 SELECT 授权 SQL,全程无需重启数据库。

-- 批量生成授权语句,复制输出结果执行即可 SELECT 'GRANT SELECT ON datacenter.'||TABLE_NAME||' TO fanruan;' FROM DBA_TABLES WHERE OWNER='DATACENTER';

缺点:datacenter 后续新建表,不会自动授权,需要定期重新执行脚本新增授权。

七、两种方案对比

表格

方案优点缺点适用场景
GRANT SELECT ON SCHEMA 模式一键授权一次授权,后续新建表自动拥有查询权限需要修改静态参数 + 重启实例;全局开启 GRANT_SCHEMA 参数可以申请停机窗口,模式内表频繁新增
逐表批量授权无需重启数据库,无全局参数改动新增表需要重新跑脚本授权业务不允许停机,表新增频率低

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询