达梦数据库笔记--分权
前情提要
已知有三个账号toolhub_adm(管理权限)、toolhub_app(应用账号)、toolhub_spt(审计账号),各自有表空间(模式);
思路:
所有表导入到toolhub_adm,授权给toolhub_app(增删改查),再给toolhub_app创建访问toolhub_adm中表的别名
导入数据
登录toolhub_adm账号,执行sql文件,如:
-- 创建表(如有需要可指定模式,若不指定默认使用当前登录用户的模式)
CREATE TABLE toolhup_adm.table1 (id INT PRIMARY KEY,name VARCHAR(50),create_time DATETIME
);-- 表备注
COMMENT ON TABLE toolhup_adm.table1 IS '示例表:存储业务数据';-- 列备注
COMMENT ON COLUMN toolhup_adm.table1.id IS '主键ID';
COMMENT ON COLUMN toolhup_adm.table1.name IS '名称';
COMMENT ON COLUMN toolhup_adm.table1.create_time IS '创建时间';授权(增删改查)
生成授权语句
-- 生成授权语句(当前用户为TOOLHUB_ADM时使用)
SELECT 'GRANT SELECT, INSERT, UPDATE, DELETE ON TOOLHUB_ADM.' || TABLE_NAME || ' TO TOOLHUB_APP;'
FROM USER_TABLES; -- USER_TABLES仅显示当前用户(TOOLHUB_ADM)的表执行授权语句
将生成的授权sql语句复制并执行,如:
GRANT SELECT, INSERT, UPDATE, DELETE ON TOOLHUB_ADM.TABLE1 TO TOOLHUB_APP;
GRANT SELECT, INSERT, UPDATE, DELETE ON TOOLHUB_ADM.TABLE2 TO TOOLHUB_APP;
...验证授权结果
执行以下语句确认权限是否生效:
-- 查看 TOOLHUB_APP 拥有的 TOOLHUB_ADM 模式下的表权限
SELECT GRANTEE, -- 被授权用户OWNER, -- 表所属模式TABLE_NAME, -- 表名PRIVILEGE -- 拥有的权限
FROM DBA_TAB_PRIVS
WHERE GRANTEE = 'TOOLHUB_APP' AND OWNER = 'TOOLHUB_ADM';
若查询结果包含 SELECT、INSERT、UPDATE、DELETE 权限,则说明授权成功。
补充说明
- 未来新表授权:上述方法仅对已存在的表生效。若后续在
TOOLHUB_ADM模式下新建表,需重新执行步骤 1-2 生成新表的授权语句。 - 大小写敏感:达梦默认将对象名(模式名、表名、用户名)转为大写,若实际对象名包含小写,需用双引号包裹(如
"ToolHub_ADM"),但建议统一使用大写以避免冲突。 - 权限回收:若需回收权限,可类似生成回收语句:
SELECT 'REVOKE SELECT, INSERT, UPDATE, DELETE ON TOOLHUB_ADM.' || TABLE_NAME || ' FROM TOOLHUB_APP;' FROM DBA_TABLES WHERE OWNER = 'TOOLHUB_ADM';
创建同名(批量创建同义词)
生成创建语句
-- 生成创建同义词的语句:为 TOOLHUB_ADM 下的所有表创建同名同义词,归属 TOOLHUB_APP
SELECT 'CREATE SYNONYM TOOLHUB_APP.' || TABLE_NAME || ' FOR TOOLHUB_ADM.' || TABLE_NAME || ';'
FROM USER_TABLES; -- USER_TABLES 显示当前用户(TOOLHUB_ADM)的所有表执行创建语句
将生成的授权sql语句复制并执行,如:
CREATE SYNONYM TOOLHUB_APP.TABLE1 FOR TOOLHUB_ADM.TABLE1;
CREATE SYNONYM TOOLHUB_APP.TABLE2 FOR TOOLHUB_ADM.TABLE2;
...验证
创建同义词后,TOOLHUB_APP 登录后可直接用表名访问:
-- 直接访问同义词(实际指向 TOOLHUB_ADM.TABLE1)
SELECT * FROM TABLE1;
验证同义词是否生效
查看已创建的同义词:
-- 用 TOOLHUB_ADM 或管理员账号查询 SELECT SYNONYM_NAME, TABLE_OWNER, TABLE_NAME FROM DBA_SYNONYMS WHERE OWNER = 'TOOLHUB_APP';结果会显示
TOOLHUB_APP下的同义词及其对应的TOOLHUB_ADM表。TOOLHUB_APP直接访问表验证是否成功。
关键说明
- 权限要求:创建同义词需
TOOLHUB_ADM拥有CREATE ANY SYNONYM权限,或由管理员执行创建语句(若TOOLHUB_ADM权限不足,需联系管理员协助)。 - 新表处理:若后续
TOOLHUB_ADM新增表,需重复步骤 1-2 为新表创建同义词。 - 无冗余数据:同义词仅为 “别名”,不存储实际数据,所有操作仍指向
TOOLHUB_ADM的原始表,避免数据不一致。
