注册
数据库对象管理(一)
技术分享/ 文章详情 /

数据库对象管理(一)

少年 2025/07/04 44 0 0

一、设计背景与目标

数据库系统若权限集中,易因权力滥用引发误操作、恶意破坏等风险。达梦通过 “三权分立” 或 “四权分立” 机制,将系统权限按职责拆分给不同角色,实现 权力制衡 + 分工协作,保障数据库整体安全。

二、核心配置:PRIV_FLAG 参数

image.png

2.1角色划分与职责

  1. 三权分立(3 类角色)
角色账号 核心职责
SYSDBA 管理数据库实例、数据操作、系统配置<br>(如启停数据库、建表、修改参数)
SYSSSO 管控权限、安全策略<br>(如创建用户、分配权限、设置密码规则)
SYSAUDITOR 审计操作行为、追溯日志<br>(如查看审计记录、监控高危操作)
  1. 四权分立(4 类角色,扩展三权体系)

在三权基础上,新增 SYSDBO(数据库对象操作员):

•职责:专注表、索引、视图等 数据库对象的日常操作(增删改查、创建 / 修改 / 删除),不涉及系统级管理(如实例启停、权限分配)。

•设计意义:进一步拆分 SYSDBA 的对象操作权,降低高权限账号使用频率,减少风险。
三、如何创建用户

数据库系统在运行的过程中,往往需要根据实际需求创建用户,然后为用户指定适当的
权限。创建用户的操作一般只能由系统预设用户 SYSDBA、SYSSSO 和 SYSAUDITOR 完成,
如果普通用户需要创建用户,必须具有 CREATE USER 的数据库权限。
创建用户的命令是 CREATE USER,创建用户所涉及的内容包括为用户指定用户名、认
证模式、口令、口令策略、空间限制、只读属性以及资源限制。其中用户名是代表用户账号
的标识符,长度为 1~128 个字符。用户名可以用双引号括起来,也可以不用,但如果用户
名以数字开头,必须用双引号括起来。

3.1创建用户

创建test用户,具体的语法格式如下:

SQL> CREATE USER IF NOT EXISTS test identified by "Dameng123";

image.png

查看用户相关的信息在达梦数据库中可以通过以下视图查看用户相关的信息。
DBA_ROLES:显示系统中所有的角色
DBA_TAB_PRIVS:显示系统中所有用户的数据库对象权限信息DBA_SYS_PRIVS:显示系统中所有传授给用户和角色的权限
DBA_USERS:显示系统中所有的用户
DBA_ROLE_PRIVS:显示系统中所有的角色权限
查看所有角色的SQL语句如下:

select * from dba_roles;

image.png
查看所有用户的信息的SQL语句如下

select USERNAME,USER_ID,DEFAULT_TABLESPACE from dba_users;

image.png

查看系统中所有用户对应的角色的SQL语句如下

select * from dba_role_privs;

image.png

3.2修改用户密码

--设置用户密码过期

ALTER USER TEST PASSWORD EXPIRE;

image.png
-- 修改test用户密码为Admin_123,同时保留当前密码(允许新旧密码同时使用)

ALTER USER TEST IDENTIFIED BY Admin_123 RETAIN CURRENT PASSWORD;

image.png
-- 使用新密码Admin_123连接数据库

./disql  test/Dameng123@10.127.17.108:5238

image.png
-- 使用另一新密码Admin_123连接数据库

./disql test/Admin_123@10.127.17.108:5238

image.png
– 连接成功,说明当前用户允许使用多个有效密码
– 丢弃test用户的所有旧密码,仅保留最新设置的密码

alter user test DISCARD OLD PASSWORD;

-- 使用旧密码Dameng123连接数据库
image.png
-- 锁定用户TEST,用户不在使用,可禁止其登录数据库

ALTER USER TEST ACCOUNT LOCK; 

image.png
-- 解锁用户TEST,恢复其登录权限
ALTER USER TEST ACCOUNT UNLOCK;
image.png
-- 授权TEST作为TEST1的代理用户,允许其以TEST1身份连接数据库
-- 权限控制:必须由SYSDBA或TEST1的所有者执行此操作

ALTER USER TEST1 GRANT CONNECT THROUGH TEST; 

image.png
– TEST1用户以代理身份登录,使用TEST的权限执行操作
image.png
– 修改密码输入错误次数为无限制

ALTER USER TEST LIMIT FAILED_LOGIN_ATTEMPTS UNLIMITED; 

image.png

3.3删除用户

当一个用户不再需要访问数据库系统时,应将这个用户及时地从数据库中删除,否则
可能会有安全隐患。 删除用户的操作一般由 SYSDBA、SYSSSO、SYSAUDITOR 完成,他们可以删除同类型
的其他用户。普通用户要删除其他用户,需要具有 DROP USER 权限。 使用 DROP USER 语句删除语句,语法格式为:
DROP USER [IF EXISTS] <用户名> [RESTRICT | CASCADE];
一个用户被删除后,这个用户本身的信息,以及它所拥有的数据库对象的信息都将从数
据字典中被删除。 指定 IF EXISTS 关键字后,删除不存在的用户时不会报错,否则会报错。
如果在删除用户时未使用 CASCADE 选项(缺省使用 RESTRICT 选项),若该用户建
立了数据库对象,DM 将返回错误信息,而不删除此用户。
如果在删除用户时使用了 CASCADE 选项,除数据库中该用户及其创建的所有对象被删
除外,若其他用户创建的对象引用了该用户的对象,DM 还将自动删除相应的引用完整性约
束及依赖关系。
例如,假设用户test1 建立了自己的表或其他数据库对象,执行下面的语

select * from dba_roles;
– 删除用户如果用户拥有对象则失败
DROP USER test1;
--删除用户及其拥有的数据库对象
DROP USER test1 CASCADE; 

3.4权限管理

DM 数据库对用户的权限管理有着严密的规定,如果没有权限,用户将无法完成任何操
作。
用户权限有两类:数据库权限和对象权限。数据库权限主要是指针对数据库对象的创建、
删除、修改的权限,对数据库备份等权限。而对象权限主要是指对数据库对象中的数据的访
问权限。数据库权限一般由 SYSDBA、SYSAUDITOR 和 SYSSSO 指定,也可以由具有特权
的其他用户授予。对象权限一般由数据库对象的所有者授予用户,也可由 SYSDBA 用户指
定,或者由具有该对象权限的其他用户授权。

数据库权限 说明
CREATE TABLE 在自己的模式中创建表的权限
CREATE VIEW 在自己的模式中创建视图的权限
CREATE USER 创建用户的权限(需注意:通常需更高权限,如 SYSDBA)
CREATE TRIGGER 在自己的模式中创建触发器的权限
ALTER USER 修改用户属性(如密码、默认表空间等)的权限
ALTER DATABASE 修改数据库全局参数(如字符集、内存分配等)的权限
CREATE PROCEDURE 在自己的模式中创建存储过程、函数的权限

对象权限主要是对数据库对象中的数据的访问权限,主要用来授予需要对某个数据库对象的数据进行操纵的数据库普通用户。表 3.5 列出了主要的对象权限。
image.png

SELECT、INSERT、DELETE 和 UPDATE 权限分别是针对数据库对象中的数据的查询、插入、删除和修改的权限。对于表和视图来说,删除操作是整行进行的,而查询、插入和修改却可以在一行的某个列上进行,所以在指定权限时,DELETE 权限只要指定所要访问的表就可以了,而 SELECT、INSERT 和 UPDATE 权限还可以进一步指定是对哪个列的权限。 表对象的 REFERENCES 权限是指可以与一个表建立关联关系的权限,如果具有了这个
权限,当前用户就可以通过自己的一个表中的外键,与对方的表建立关联。关联关系是通过
主键和外键进行的,所以在授予这个权限时,可以指定表中的列,也可以不指定。
存储程序等对象的 EXECUTE 权限是指可以执行这些对象的权限。有了这个权限,一个用户就可以执行另一个用户的存储程序、包、类等。目录对象的 READ 和 WRITE 权限指可以读或写访问某个目录对象的权限。域对象的 USAGE 权限指可以使用某个域对象的权限。拥有某个域的 USAGE 权限的用户可以在定义或修改表时为表列声明使用这个域。

3.5管理模式

模式:一组数据对象的集合,为了安全,创建用户的时候,就会生成一个跟用户同名的模式。
--创建模式

select USERNAME,USER_ID,DEFAULT_TABLESPACE from dba_users;
– 创建用户
CREATE USER IF NOT EXISTS  test  IDENTIFIED BY Admin123;
--创建模式指定所属用户组,创建模式testcs,使其属于用户test
SQL>CREATE SCHEMA testcs AUTHORIZATION test ;
 2 /      

image.png

--指定模式
登录数据库后,默认当前模式为用户名同名的模式;可以用set schema [模式名]语句来切换schema,后续的操作均在该schema上进行。
SQL> set schema testcs;
SQL> create table t2(id int);
SQL> insert into t2 values(22);
SQL> set schema sysdba;
SQL> select * from testcs.t2;

image.png

--不指定模式下创建表t2

QL> SELECT * FROM DBA_SYS_PRIVS WHERE GRANTEE = 'TEST';
行号     GRANTEE PRIVILEGE      ADMIN_OPTION
---------- ------- -------------- ------------
1          TEST    CREATE SESSION NO
已用时间: 5.651(毫秒). 执行号:4401.
SQL> GRANT CREATE TABLE TO test;
操作已执行
已用时间: 17.228(毫秒). 执行号:4402.
先登录
./disql test/Admin123:5238
create table t4(id int);
insert into t4  values(1);
commit;
select  *from t4;  
– 查看两个 T4表分别属于哪个模式
SQL> SELECT OWNER,TABLE_NAME FROM DBA_TABLES WHERE TABLE_NAME='T4';

image.png
 --普通删除包含对象的模式报错
删除失败:原因时schema TESTCS中有表对象

drop schema TESTCS;

image.png
– 级联删除包含对象的模式成功

drop schema TESTCS cascade;

四、表空间

规划数据库结构时需要考虑如何管理数据库中的相关文件, 每个表空间存储什么数据,
在表空间中创建几个多大的数据文件,以及数据文件存储的位置等。创建表空间时需要指定表空间名和其拥有的数据文件列表。比如创建名为test的表空间,并指定该空间上拥有 2 个数据文件,每个数据文件的大小为 128M。
理论上最多允许有 65535 个表空间,但用户允许创建的表空间 ID 取值范围为 0~32767,超过 32767 的只允许系统使用,ID 由系统自动分配,ID 不能重复使用,即使删除掉已有表空间,也无法重复使用已用 ID 号,也就是说只要创建 32768 次表空间后,用户将无法再创建表空间。

4.1创建表空间

--先确认表空间的路径
SQL> SELECT TABLESPACE_NAME, FILE_NAME FROM DBA_DATA_FILES;

image.png

-- 或者查询大文件表空间路径
SELECT * FROM V$HUGE_TABLESPACE;
-- 创建表空间(IF NOT EXISTS如果不存在)使用默认路径
CREATE TABLESPACE IF NOT EXISTS TS2 DATAFILE '/dm/data/TS2.DBF' SIZE 100 AUTOEXTEND ON NEXT 10 MAXSIZE 1000 ENCRYPT WITH OPENSSL_SM4_OFB_V1 BY "Dameng_123";

image.png
如果想创建第二个表空间则:
ALTER TABLESPACE TS1 ADD DATAFILE '/dm/data/TS1_02.DBF' AUTOEXTEND ON NEXT 10 MAXSIZE 1000;
–HUGE 表是建立在自己特有的 HTS 表空间上的。建立 HUGE 表如果不使用默认的表空间,
则必须要先创建一个 HUGE TABLESPACE,默认 HTS 表空间为 HMAIN。
这个表空间与普通的表空间不同。普通的表空间,数据是通过段、簇、页来管理的,并
且以固定大小(4K、8K、16K、32K)的页面为管理单位;而 HUGE 表空间是通过 HFS 存
储机制来管理的,它相当于一个文件系统。创建一个 HTS,其实就是创建一个空的文件目录
(系统中有一个默认 HTS,目录名为 HMAIN)。在创建一个 HUGE 表并插入数据时,数据库
会在指定的 HTS 表空间目录下创建一系列的目录及文件。
--指定路径和大文件表空间路径 WITH HUGE PATH 'dm/data/HTBS2';

create tablespace if not exists tbs2 datafile 'tbs3.dbf' size 100 autoextend on next 10 maxsize 1000 ENCRYPT WITH OPENSSL_SM4_OFB_V1 by "Dameng_123" WITH HUGE PATH 'dm/data/HTBS2';

image.png

4.2脱机/联机下表空间的修改

--脱机环境下

--先确认表空间的路径
SQL> SELECT TABLESPACE_NAME, FILE_NAME FROM DBA_DATA_FILES;
格式:alter tablespace xxx offline;
alter tablespace TS1 offline;

image.png
-– 修改表空间数据文件名称
(必须在脱机状态下操作)
-- 修改表空间tbs2的数据文件名(重命名数据文件), 将原数据文件TS1.DBF'重命名为'/TS2.DBF'

ALTER TABLESPACE TS1  RENAME DATAFILE '/dm/data/TS1.DBF' TO '/dm/data/TS2.DBF';

image.png
--联机环境下
alter tablespace TS1 online;
–增加数据文件
alter tablespace TS1 add datafile 'TS3.DBF' size 64;
image.png

– 增加 HUGE 路径

alter tablespace tbs2 add huge path '/dm/data/HTBS3';

image.png
--修改表空间的名称

alter tablespace tbs2 rename to tbs3;

image.png
--删除表空间

drop tablespace if exists tbs3;
SELECT TABLESPACE_NAME, FILE_NAME FROM DBA_DATA_FILES;

image.png

4.3文件丢失恢复

# 备份表空间数据文件
cp  /dm/data/TS1_02.DBF /dm/data/bak/
# 删除原数据文件
rm  -f /dm/data/TBS.DBF
--进到库里面查看相关的文件状态  为0说明该dbf已经离线,1是在线
select PATH,STATUS$ from v$datafile;
检查文件是否失效
SP_FILE_SYS_CHECK ();

image.png

`--进到库里面查看相关的文件状态  为0说明该dbf已经离线,1是在线`
select PATH,STATUS$ from v$datafile;

image.png

– -恢复前准备
cp /dm/data/bak/TS1_02.DBF /dm/data/
SP_TABLESPACE_PREPARE_RECOVER('TS1');
– 恢复文件
SP_TABLESPACE_RECOVER('TS1’);
select PATH,STATUS$ from v$datafile;

image.png

--查看表空间和数据文件关系
SELECT ts.NAME, df.PATH FROM V$TABLESPACE AS ts, V$DATAFILE AS df WHERE ts.ID =df.GROUP_ID;

image.png

评论
后发表回复

作者

文章

阅读量

获赞

扫一扫
联系客服