注册
达梦数据库用户与模式关系的理解与探讨
培训园地/ 文章详情 /

达梦数据库用户与模式关系的理解与探讨

vivian 2023/07/03 1746 0 0

在学习的达梦DBA课程后,结合官方提供的数据库学习文档资料,想和大家探讨一下达梦数据库中用户与模式的概念以及这两者的关系。

用户的模式(SCHEMA)指的是用户账号拥有的对象集,在概念上可将其看作是包含表、视图、索引和权限定义的对象。在 DM 中,一个用户可以创建多个模式,一个模式中的对象
(表、视图等)可以被多个用户使用。模式不是严格分离的,一个用户可以访问他所连接的数据库中有权限访问的任意模式中的对象。
系统为每一个用户自动建立了一个与用户名同名的模式作为其默认模式,用户还可以用模式定义语句建立其它模式。

采用模式的原因有几点:

  1. 允许多个用户使用一个数据库而不会干扰其它用户;
  2. 把数据库对象组织成逻辑组,让它们更便于管理;
  3. 第三方的应用可以放在不同的模式中,这样可以避免和其它对象的名字冲突。模式类似于操作系统层次的目录,只不过模式不能嵌套。在引用模式对象的时候,一般要在模式对象名前面加上模式名。具体格式如下:
    [模式名].对象名

当然,在当前模式和要引用的模式对象所属的模式相同时,可以省略模式名。如果我们访问一个表时,没有指明该表属于哪一个模式,系统就会自动给我们在表前加上缺省的模式名。类似地,如果我们在创建对象时不指定该对象的模式,则该对象的模式为用户的缺省模式。

模式对象之外的其他对象统一称为非模式对象,非模式对象主要包括以下几种对象:

  1. 用户;
  2. 角色;
  3. 权限;
  4. 表空间。

1.1 在单个操作中创建多个模式对象
在 DM 数据库中,使用 CREATE SCHEMA 语句就可以创建一个空的模式对象,也可以在创建模式时,同时创建多个模式对象。CREATE SCHEMA 语句的语法说明参见《DM8_SQL语言使用手册》。

下面的语句在创建模式 TEST 的同时,创建了属于模式 TEST 的一个序列和两张表。
CREATE SCHEMA TEST
CREATE SEQUENCE ADDRESS_SEQ INCREMENT BY 1
CREATE TABLE ADDRESS(
ADDRESSID INT,
ADDRESS1 VARCHAR(60) NOT NULL,
ADDRESS2 VARCHAR(60),
CITY VARCHAR(30) NOT NULL,
POSTALCODE VARCHAR(15) NOT NULL)
CREATE TABLE ADDRESS_TYPE(
ADDRESS_TYPEID INT PRIMARY KEY,
NAME VARCHAR(50) NOT NULL);

可以用下面的格式来引用 TEST 模式中的 ADDRESS 表:TEST.ADDRESS,如向 ADDRESS表中插入一条数据。
INSERT INTO TEST.ADDRESS VALUES(1,'武汉市关山一路特 1 号光谷软件园 C6 栋 5 层','上海市闸北区江场三路 28 号 301 室','上海市','200436');

1.2 重命名模式对象
要重命名一个模式对象,那么这个模式对象必须在指定的模式里面。用户可以采用下面几种方式来重命名模式对象:

  1. 删除原有的模式对象,重新创建;
  2. 使用 ALTER … RENAME 语句(TABLE)。

如果采用的是删除并重建模式对象的方式来重命名模式对象,那么所有的基于这个模式对象的授权都将失效。在模式对象重建之后,基于原对象的权限和角色必须重新授予。
如果使用的是 ALTER … RENAME 语句来重命名模式对象,那么所有基于原模式对象的权限将转移到重命名后的模式对象上,不需要重新授权。如重命名 TEST 上的 ADDRESS 表:
ALTER TABLE TEST.ADDRESS RENAME TO ADDRESS1;

如果一个用户 USER1 在 ADDRESS 上拥有查询、插入的权限,那么重命名之后,USER1在 ADDRESS1 上同样拥有查询、插入权限。

在重命名一个模式对象之前,需要考虑以下影响:

  1. 所有基于重命名模式对象的视图和 DMSQL 语句块都将失效,在使用之前,必须重新编译;
  2. 所有基于重命名模式对象的同义词在使用的时候都会报错。
评论
后发表回复

作者

文章

阅读量

获赞

扫一扫
联系客服