达梦8-用户与模式

测试环境 

操作系统银河麒麟Linux kylin10 4.19.90-24.4.v2101.ky10.x86_64
数据库版本DM Database Server 64 V8

 

 

什么是达梦数据库的用户(USER)

        用于登录数据库进行数据访问的用户账号。

什么是达梦数据库的模式(SCHEMA)

        用户账号拥有的对象集合(表、视图、索引、触发器等等)。

        达梦用户和模式是一对多的关系,一个用户可以创建多个模式,一个模式中的对象可以被多个用户使用。这与oracle不同,Oracle的用户(USER)对应一个SCHEMA,是一对一的关系。

        达梦数据库每个创建的用户默认有一个同名的模式,该用户访问自己模式下的对象,不需要加模式名,可直接访问,对于其他模式下的对象,需要有访问权限,访问时需要加上模式名:[模式名].对象名。

 1、用户管理

        达梦数据库采用“三权分立”或“四权分立”的安全机制,将系统中所有的权限按照类型进行划分。

        三权分立包含数据库管理员账号 SYSDBA、数据库安全员账号 SYSSSO 和数据库审计员账号 SYSAUDITOR,其缺省口令都与用户名一致。四权分立在三权分立的基础上增加数据库对象操作员账户 SYSDBO

1.1、用户创建

DMDBA使用CREATE USER命令创建用户

--语法格式

CREATE USER [IF NOT EXISTS] <用户名> IDENTIFIED <身份验证模式>  [PASSWORD_POLICY <口令策略>][<锁定子句>][<存储加密密钥>][<只读标志>][<资源限制子句>][<密码过期子句>][<允许IP子句>][<禁止IP子句>][<允许时间子句>][<禁止时间子句>][<TABLESPACE子句>][<INDEX_TABLESPACE子句>][<表空间配额子句>]; 

--示例 创建用户testuser,资源限制登陆失败超三次锁定5分钟,默认表空间为test。 

SQL> create user testuser identified by dameng123 limit failed_login_attempts 3 password_lock_time 5 default tablespace test;

SQL> select USERNAME,ACCOUNT_STATUS,DEFAULT_TABLESPACE,DEFAULT_INDEX_TABLESPACE,CREATED from dba_users where username='TESTUSER';

行号     USERNAME ACCOUNT_STATUS DEFAULT_TABLESPACE DEFAULT_INDEX_TABLESPACE CREATED                   
---------- -------- -------------- ------------------ ------------------------ --------------------------
1          TESTUSER OPEN           TEST               SYSTEM                   2024-08-15 09:08:41.727364

 用户创建成功之后,数据库同时创建了一个同名的模式

SQL> select a.name schname,b.name username from sysobjects a, sysobjects b where a.pid = b.id and a.type$='SCH' and b.name='TESTUSER';

行号     SCHNAME  USERNAME
---------- -------- --------
1          TESTUSER TESTUSER

1.2、用户修改

--语法格式 

ALTER USER <用户名> [<修改用户子句>] | [<用户代理功能子句>];

<修改用户子句> ::= [IDENTIFIED <身份验证模式>] [PASSWORD_POLICY <口令策略>] [<锁定子句>] [<存储加密密钥>] [<只读标志>][<资源限制子句>][<密码过期子句>] [<允许IP子句>][<禁止IP子句>][<允许时间子句>][<禁止时间子句>][<TABLESPACE子句>][<INDEX_TABLESPACE子句>][<SCHEMA子句>][<表空间配额子句>]

<SCHEMA子句> ::= ON SCHEMA <模式名>

<用户代理功能子句> ::= <GRANT | REVOKE> CONNECT THROUGH <代理用户名>

--示例 修改testuser用户的index tablespace 

SQL> alter user testuser default index tablespace test;
SQL> select USERNAME,ACCOUNT_STATUS,DEFAULT_TABLESPACE,DEFAULT_INDEX_TABLESPACE,CREATED from dba_users where username='TESTUSER';

行号     USERNAME ACCOUNT_STATUS DEFAULT_TABLESPACE DEFAULT_INDEX_TABLESPACE CREATED                   
---------- -------- -------------- ------------------ ------------------------ --------------------------
1          TESTUSER OPEN           TEST               TEST                     2024-08-15 09:08:41.727364

1.3、权限

1.3.1、权限授予

--语法格式

GRANT <特权> TO <用户或角色>{,<用户或角色>} [WITH ADMIN OPTION];

<特权> ::= <数据库权限>{,<数据库权限>};

<用户或角色>::= <用户名> | <角色名> 

 --查看用户被授予的权限

SQL> select grantee,granted_role as privilege_role from dba_role_privs where grantee='TESTUSER'
2   union
3   select grantee,privilege as privilege_role from dba_sys_privs where grantee='TESTUSER';

行号     GRANTEE  PRIVILEGE_ROLE
---------- -------- --------------
1          TESTUSER PUBLIC
2          TESTUSER CREATE SESSION

--使用testuser用户进行查询

SQL>  select * from dmhr.city;
 select * from dmhr.city;
[-5504]:没有[DMHR.CITY]对象的查询权限.
SQL>

该用户没有查询此表的权限,需要授予查询权限

--使用sysdba用户授权,testuser用户查询

SQL> grant select on dmhr.city to testuser;
操作已执行


--使用testuser用户查询
SQL> select * from dmhr.city;

行号     CITY_ID CITY_NAME REGION_ID  
---------- ------- --------- -----------
1          BJ      北京    1
2          SJZ     石家庄 1
3          SH      上海    2
4          NJ      南京    2
5          GZ      广州    3
6          HK      海口    3
7          WH      武汉    4
8          CS      长沙    4
9          SY      沈阳    5

1.3.2、权限回收

--语法格式

REVOKE [ADMIN OPTION FOR]<特权> FROM <用户或角色>{,<用户或角色>} ;

<特权> ::= <数据库权限>{,<数据库权限>}

<用户或角色>::= <用户名> | <角色名> 

--示例 回收testuser用户create session权限

--sysdba用户
SQL> revoke create session from testuser;
操作已执行

--testuser用户尝试登陆数据库

[dmdba@kylin10 ~]$ disql testuser/dameng123
[-5671]:没有CREATE SESSION权限.
disql V8
用户名:

1.4、用户删除

--语法格式

DROP USER [IF EXISTS] <用户名> [RESTRICT | CASCADE]; 

        如果在删除用户时未使用 CASCADE 选项(缺省使用 RESTRICT 选项),若该用户建立了数据库对象,DM 将返回错误信息,而不删除此用户。CASCADE 选项级联删除相关对象。

--示例 删除testuser用户

SQL> drop user testuser;

2、模式管理

采用模式的原因有几点:

  1. 允许多个用户使用一个数据库而不会打扰其他用于
  2. 把数据库对象组织成逻辑组,让他们更便于管理
  3. 不同的应用放在不同的模式中,这样可以避免和其它对象的名字冲突。

达梦数据库中包含模式对象:

  1. 表(TABLE)
  2. 视图(VIEW)
  3. 索引(INDEX)
  4. 触发器(TRIGGER
  5. 存储过程/函数(FUNCTION)
  6. 序列(SEQUENCE)
  7. 全文索引(SYNONYM)
  8. 包(PACKAGE)
  9. 同义词(SYNONYM)
  10. 类(CLASS)
  11. 外部链接(LINK)

2.1、创建模式

        在创建用户,数据库为每一个用户自动建立了一个与用户名同名的模式作为其默认模式,用户还可以用模式定义语言创建其他模式。

        在创建新模式时,如果此模式所属用户下已存在同名的模式,那么创建模式操作会被跳过。

--语法格式

CREATE SCHEMA <模式名> [AUTHORIZATION <用户名>][<DDL_GRANT 子句> {< DDL_GRANT 子句>}]; 

--示例 新建模式

--新建用户
SQL> create user sch_user identified by dameng123;
操作已执行

--查看用户和对用模式
SQL> select a.name username,b.name scheman from sysobjects a,sysobjects b where  a.id = b.pid and b.type$='SCH' and a.name='SCH_USER';

行号     USERNAME SCHEMAN 
---------- -------- --------
1	SCH_USER SCH_USER

--创建模式,新建的模式属于SCH_USER用户
SQL> create schema schuser1 authorization sch_user;
2   / 
操作已执行

SQL> select a.name username,b.name scheman from sysobjects a,sysobjects b where  a.id = b.pid and b.type$='SCH' and a.name='SCH_USER';

行号     USERNAME SCHEMAN 
---------- -------- --------
1          SCH_USER SCHUSER1
2	       SCH_USER SCH_USER

说明:

  1. AUTHORIZATION <用户名> 指定拥有该模式的用户。 缺省为 SYSDBA。 创建者为SYSDBA 用户才可以使用此选项。
  2. 在 DIsql 中使用该语句必须以“/”结束

2.2、设置当前模式

--语法格式

SET SCHEMA <模式名>;

--示例 在SCHUSER1模式下创建表,插入数据,并设置其他模式进行查询 

SQL> set schema SCHUSER1;
操作已执行
SQL> create table t1 (id int);   
操作已执行
SQL> insert into t1 values(1);  
影响行数 1
SQL> insert into t1 values(2);
影响行数 1
SQL> 
SQL> select  * from t1;

行号     ID         
---------- -----------
1          1
2          2    

SQL> select OWNER,TABLE_NAME,TABLESPACE_NAME from dba_tables where table_name='T1';

行号     OWNER    TABLE_NAME TABLESPACE_NAME
---------- -------- ---------- ---------------
1          SCHUSER1 T1         MAIN


--切换到sysdba模式,查询
SQL> set schema sysdba;
操作已执行

SQL> select  * from t1;
select  * from t1;
第1 行附近出现错误[-2106]:无效的表或视图名[T1].
已用时间: 0.296(毫秒). 执行号:0.


--使用[模式名.对象名]进行查询
SQL> select  * from SCHUSER1.t1;         

行号     ID         
---------- -----------
1          1
2          2

2.3、删除模式

--语法格式

DROP SCHEMA [IF EXISTS] <模式名> [RESTRICT | CASCADE]; 

--删除空对象模式

​
--创建新模式,属于SCH_USER用户
SQL> create schema aaa authorization sch_user;
2   /
操作已执行
SQL> 
SQL> select a.name username,b.name scheman from sysobjects a,sysobjects b where  a.id = b.pid and b.type$='SCH' and a.name='SCH_USER';

行号     USERNAME SCHEMAN 
---------- -------- --------
1          SCH_USER AAA
2          SCH_USER SCH_USER
3          SCH_USER SCHUSER1

​--删除模式AAA
SQL> drop schema aaa;
操作已执行
SQL> 
SQL> select a.name username,b.name scheman from sysobjects a,sysobjects b where  a.id = b.pid and b.type$='SCH' and a.name='SCH_USER';

行号     USERNAME SCHEMAN 
---------- -------- --------
1          SCH_USER SCHUSER1
2          SCH_USER SCH_USER

--删除非空模式

--删除模式SCHUSER1

SQL> drop schema schuser1;   
drop schema schuser1;
第1 行附近出现错误[-5001]:模式[SCHUSER1]不为空.
当前模式下存在对象,不能直接删除,需要使用CASCADE 选项,使用该选项会级联删除该模式下的所有对象,以及与该模式相关的依赖关系。

SQL> drop schema schuser1 cascade;  
操作已执行
SQL>

 

3、用户与模式的关系

        每个用于有一个默认的同名模式,访问自己模式下的对象不需要加模式名,访问其他模式的对象需要拥有访问权限,访问时还需加上模式名。

        如果同一用户不同模式。访问时也需要加上模式名。

--新建测试数据,创建表,插入数据,提交;创建新模式名bbb,在bbb模式下建表插入数据,提交

用户名:SCH_USER
模式名:SCH_USER、BBB

SQL> set schema sch_user;   
操作已执行

SQL> create table t2(id int);
操作已执行
SQL> 
SQL> insert into t2 values(1);
影响行数 1
SQL> 
SQL> insert into t2 values(2);
影响行数 1

SQL> 
SQL> insert into t2 values(3);
影响行数 1

SQL> select * from t2;

行号     ID         
---------- -----------
1          1
2          2
3          3

SQL> commit;
操作已执行


--sysdba用户,创建bbb模式

SQL> create schema bbb authorization sch_user;               
2   /
操作已执行

SQL> set schema bbb;
操作已执行
SQL> 
SQL> 
SQL> select * from t2;
select * from t2;
第1 行附近出现错误[-2106]:无效的表或视图名[T2].
SQL> 
SQL> 
SQL> create table t2(id int);
操作已执行
SQL> 
SQL> insert into t2 values(4);
影响行数 1
SQL> 
SQL> select * from t2;

行号     ID         
---------- -----------
1          4
SQL> 
SQL> commit;

3.1、查询当前用户模式下的表

--登陆sch_user用户

[dmdba@kylin10 ~]$ disql sch_user/dameng123

服务器[LOCALHOST:5236]:处于普通打开状态
登录使用时间 : 4.820(ms)
disql V8
SQL>
SQL> select * from t2;

行号     ID         
---------- -----------
1          1
2          2
3          3

可查询数据

--查询sch_user用户bbb模式下的表

SQL> select * from bbb.t2;

行号     ID         
---------- -----------
1          4

3.2、查询其他用户模式下的表

--使用SCH_USER用户查询SYSDBA用户DMHR模式下的JOB表

--DMHR模式是示例库,在创建数据库时创建,也可手动创建

--SYSDBA用户查询JOB表

SQL> set pagesize 100;
SQL> select * from dmhr.job;
行号     JOB_ID JOB_TITLE             MIN_SALARY  MAX_SALARY 
---------- ------ --------------------- ----------- -----------
1          11     总经理             8000        50000
2          12     总经理助理       5000        20000
3          13     秘书                3000        6000
4          21     行政部经理       5000        10000
5          22     文员                2500        5000
6          31     开发部经理       8000        20000
7          32     项目经理          6000        20000
8          33     开发工程师       6000        15000
9          41     市场部经理       5000        20000
10         42     市场专员          3000        6000
11         51     技术支持部经理 7000        18000
12         52     技术支持工程师 4000        12000
13         61     测试部经理       8000        20000
14         62     测试工程师       4000        10000
15         71     人力资源部经理 6000        12000
16         72     招聘专员          2500        6000

16 rows got

--sch_user用户查询

[dmdba@kylin10 ~]$ disql sch_user/dameng123

服务器[LOCALHOST:5236]:处于普通打开状态
登录使用时间 : 4.194(ms)
disql V8
SQL> 
SQL>  select * from dmhr.job;
 select * from dmhr.job;
[-5504]:没有[DMHR.JOB]对象的查询权限.
SQL>

sch_user用户没有查询dmhr模式的job表,需要进行授权。 

--sysdba用户进行授权
SQL> grant select on "DMHR"."JOB" to sch_user;
操作已执行

--sch_user用户查询
SQL> set pagesize 100;
SQL> 
SQL> select * from dmhr.job;

行号     JOB_ID JOB_TITLE             MIN_SALARY  MAX_SALARY 
---------- ------ --------------------- ----------- -----------
1          11     总经理             8000        50000
2          12     总经理助理       5000        20000
3          13     秘书                3000        6000
4          21     行政部经理       5000        10000
5          22     文员                2500        5000
6          31     开发部经理       8000        20000
7          32     项目经理          6000        20000
8          33     开发工程师       6000        15000
9          41     市场部经理       5000        20000
10         42     市场专员          3000        6000
11         51     技术支持部经理 7000        18000
12         52     技术支持工程师 4000        12000
13         61     测试部经理       8000        20000
14         62     测试工程师       4000        10000
15         71     人力资源部经理 6000        12000
16         72     招聘专员          2500        6000

16 rows got

 

 

 

 

 

 

 

 

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值