这里所有的内容基于下面的版本,后期随着版本可能有改动。

select * from v$version;
--DM Database Server x64 V7.6.0.96-Build(2018.09.19-97292)ENT

注意

  1. 角色就是一系列权限的集合,是方便用户操作的一个方式,因为把很多的权限(如很多表的查询权限,或者其他权限等)打包到一个角色中,后面要授予某个用户所有这些权限,只需要【grant
    角色 to 用户】就可以了。

  2. 达梦数据库默认有三个角色:DBA、RESOURCE、PUBLIC 三个角色。

  3. DBA 角色中,是系统全部权限的即可,授予了 DBA,就是数据库系统中的老大了。

  4. RESOURCE 角色中,是对应用户自己用户下的全部权限,授予了 RESOURCE ,就是用户可以在自己的用户下尽情操作了。

因此,相应的,我们这里分为三种情况:

情形1:

create user user_name_1 identified by passwd123456; – 其他什么也不做

情形2:

create user user_name_2 identified by passwd123456; grant resource to user_name_2; – 其他什么也不做

情形3:

create user user_name_3 identified by passwd123456; 
grant dba to user_name_3;

情形4:

create user user_name_4 identified by passwd123456; 
grant resource any table to user_name_4; 
grant select any table to user_name_4;

说明:

情形1: 1. 这个用户可以除了不能再在自己用户下新建表外,增删改已有的表、包括删除已有的表。都是可以做的。 2. 当然,其他用户下,什么都做不了(查询都做不了,操作会报错没有权限) 3. 如果要给这个用户下新建对象怎么办呢,自然是只能用其他具有权限的用户(一般是管理员)在这个用户下新建对象就好了,这样,目标用户就可以查询到新的东西了。

关键点就是,这个用户,能在自己用户下搞事情,但是不能新建对象。—— 确实有场景需要这样的。

情形2: 这个用户下可以在自己用户下做任何事情;其他用户下,任何事情都做不了。

情形3: 这个用户可以在数据库上,为所欲为(所有的用户下),毕竟叫做:有了DBA权限嘛。所以,一般不会给这个权限的。

情形4: 这个就是构造一个查询用户的场景,他可以在自己的用户下为所欲为,同时,可以查询全库的数据,但是对于其他用户下的数据,不能做增删改。

总结:

  1. 一般情况下,情形2 是我们的需求;情形4 我们也经常需要。如果我们需要新建一个用户,只能查询特定的表,可以参考本文后半部分。

  2. 我们可以通过系统表去核查 三个角色(DBA RESOURCE PUBLIC)具体对应哪些具体权限: select * from DBA_SYS_PRIVS ;

【DM-用户权限配置】权限 控制 如何 让 一个 用户 只能 访问一个表 且 看不到 其他 模式 下的 表 数据库 用户 权限控制 manager 看到的表 控制.rst

现象描述

注意

如果要给一个用户全库的查询权限,grant select any table to your_username; 就可以了

如果只想给特定表的权限,参考后文即可。

希望有一个用户,只能看到自己模式下的表,而看不到其他模式下的表

或者控制一个用户只能看到自己制定表的权限。

应当如何配置权限?

—— 核心是 revoke public from user_test

处理方法

这里是一个例子:如何创建一个用户,只能看到指定的表。

–这个脚本用sysdba执行

create table sysdba.test (v1 int);
drop user test_u;
create user test_u identified by 111111111;
revoke public from test_u;

grant select on v$instance to test_u;
grant select on V$MPP_CFG_ITEM to test_u;
grant select on V$DATABASE to test_u;
grant select on V$DM_INI to test_u;
grant select on V$VERSION to test_u; 
-- weblogic 11g test need  2019/9/11 16:59:22

备注:如果是17年的dmserver,就跳过这些步骤,直接
grant select on 你希望的它能查询的表 to aim_user_name;
就行了
因为,以前的版本,系统字典的权限是 dmserver 内置用户 sys的,
sysdba也不能(也没办法)控制,也就是 sysdba 也无法 revoke 和 grant 字典表的权限,
sysdba 不用管(也没法管)字典表的权限

grant select on test to test_u;

此时,用 test_u 登录manager,左侧导航栏则是能看到test 这个表

这里是相关的例子

可以这么做的一个缘由

-- sysdba 跑的
create table test_1 (v1 int);
insert into test_1 select level connect by level<=100;

create view test_v as select v1 from test_1 where v1<3;

grant select on test_v to test_u;
-- test_u 查的
select * from sysdba.test_v; --ok
select * from sysdba.test_1; -- 没有\[TEST_1\]对象的查询权限

…Notice::

select table 和 select any table 包括insert delete 等,所有不带any的描述的都是,自己用户下的权限。

This document was generated on 2021-05-12 at 23:50.

转载至:https://dms1101.gitee.io/dms/manager%EF%BC%88%E5%90%ABsql%E7%9A%84%E4%BD%BF%E7%94%A8%EF%BC%89%E9%83%A8%E5%88%86/%E3%80%90DM-%E7%94%A8%E6%88%B7%E6%9D%83%E9%99%90%E9%85%8D%E7%BD%AE%E3%80%91%E6%9D%83%E9%99%90%20%E6%8E%A7%E5%88%B6%20%E5%A6%82%E4%BD%95%20%E8%AE%A9%20%E4%B8%80%E4%B8%AA%20%E7%94%A8%E6%88%B7%20%E5%8F%AA%E8%83%BD%20%E8%AE%BF%E9%97%AE%E4%B8%80%E4%B8%AA%E8%A1%A8%20%E4%B8%94%20%E7%9C%8B%E4%B8%8D%E5%88%B0%20%E5%85%B6%E4%BB%96%20%E6%A8%A1%E5%BC%8F%20%E4%B8%8B%E7%9A%84%20%E8%A1%A8%20%E6%95%B0%E6%8D%AE%E5%BA%93%20%E7%94%A8%E6%88%B7%20%E6%9D%83%E9%99%90%E6%8E%A7%E5%88%B6%20manager%20%E7%9C%8B%E5%88%B0%E7%9A%84%E8%A1%A8%20%E6%8E%A7%E5%88%B6.html

Logo

开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!

更多推荐