考虑一个使用场景,建立五个用户 (USER01~USER05) 分别对应五个模式 (TEST01~TEST05),并且只拥有对应模式的权限,每个模式给不同的业务系统使用。查询SQL文档得知,DM不支持直接对模式授权。那么该如何设计?
方案一
DM数据库创建用户默认会创建为这个用户创建同名的模式。可以把这个模式作为业务系统使用的模式。当然前提是用户名与模式名相同。
如果用户名和模式不相同呢?创建模式时可以指定模式所属用户,这样用户就有这个模式的权限了。
CREATE SCHEMA TEST01 AUTHORIZATION USER01;
CREATE SCHEMA TEST01 AUTHORIZATION USER02;
CREATE SCHEMA TEST03 AUTHORIZATION USER03;
CREATE SCHEMA TEST04 AUTHORIZATION USER04;
CREATE SCHEMA TEST05 AUTHORIZATION USER05;
方案二
分别建立用户和模式,然后将模式下对象的权限赋给用户。
--建立用户
CREATE USER USER01 IDENTIFIED BY 123456789;
CREATE USER USER02 IDENTIFIED BY 123456789;
CREATE USER USER03 IDENTIFIED BY 123456789;
CREATE USER USER04 IDENTIFIED BY 123456789;
CREATE USER USER05 IDENTIFIED BY 123456789;
--建立模式
CREATE SCHEMA TEST01;
CREATE SCHEMA TEST01;
CREATE SCHEMA TEST03;
CREATE SCHEMA TEST04;
CREATE SCHEMA TEST05;
--将模式下的对象权限赋给用户
--1.拼写查询得到SQL语句
SELECT 'GRANT ALL PRIVILEGES ON '||OWNER||'.'||TABLE_NAME||' TO USER01;'
FROM DBA_TABLES
WHERE OWNER IN ('TEST01');
--2.执行授权语句
GRANT ALL PRIVILEGES ON TEST01.T_TEST TO USER01;
不同数据库的模式权限
数据库 | 关于模式权限 |
---|---|
ORACLE | 模式和用户一对一,没有模式级别的授权 |
DM | 模式和用户一对多,同ORACLE一样没有模式级别的授权 |
PostgreSQL | 模式和用户多对多,可以对模式整体授权 |
MySQL | 没有模式的概念 |
更多技术文章参见达梦社区:https://eco.dameng.com