达梦数据库安全管理

ops/2024/11/8 13:50:16/

1、概述

数据库安全管理是指采取各种安全措施对数据库及其相关文件和数据进行保护。数据库 系统的重要指标之一是确保系统安全,以各种防范措施防止非授权使用数据库,主要通过数 据库管理系统进行实现。数据库系统中一般采用用户标识与鉴别、存取控制以及密码存储等 技术进行安全控制。
数据库安全的核心和关键是其数据安全。数据安全指以保护措施确保数据的完整性、保密性、可用性、可控性和可审查性。由于数据库存储着大量的重要信息和机密数据,而且在 数据库系统中大量数据集中存放,供多用户共享,因此,必须加强对数据库访问的控制和数据安全防护。

1.1体系架构

DM 的安全管理就是为保护存储在 DM 数据库中的各类敏感数据的机密性、完整性和可 用性提供必要的技术手段,防止对这些数据的非授权泄露、修改和破坏,并保证被授权用户能按其授权范围访问所需要的数据。
DM 作为安全数据库,提供了包括用户标识与鉴别、自主与强制访问控制、通信与存储加密、审计等丰富的安全功能,且各安全功能都可进行配置,满足各类型用户在安全管理方面不同层次的需求。
在这里插入图片描述

1.2功能简介

在这里插入图片描述

2、用户标识与鉴别

DM数据库采用三权分立或四权分立的安全机制,将系统中所有的权限按照类型进行划分,为每个管理员分配相应的权限,管理员之间的权限相互制约又相互协助,从而使整个系统具有较高的安全性和较强的灵活性。
可在创建DM数据库时通过建库参数PRIV_FLAG设置使用三权分立或四权分立。0表示三权分立,1表示四权分立。此参数仅在DM安全版本下提供,即仅DM安全版本提供四权分立,缺省采用三权分立。

2.1三权分立

2.1.1数据库管理员 DBA

每个数据库至少需要一个SYSDBA来管理,SYSDBA可能是一个团队,也可能是一个人。在不同的数据库系统中,数据库管理员的职责可能也会有比较大的区别,总体而言,数据库管理员的职责主要包括以下任务:
评估数据库服务器所需的软、硬件运行环境
安装和升级 DM 服务器
数据库结构设计
监控和优化数据库的性能
计划和实施备份与故障恢复

2.1.2数据库安全员SSO

有些应用对于安全性有着很高的要求,传统的由SYSDBA一人拥有所有权限并且承担所有职责的安全机制可能无法满足企业实际需要,此时数据库安全员和数据库审计员两类管理用户就显得异常重要,它们对于限制和监控数据库管理员的所有行为都起着至关重要的作用。
数据库安全员的主要职责是制定并应用安全策略,强化系统安全机制。数据库安全员SYSSSO是 DM 数据库初始化的时候就已经创建好的,可以以该用户登录到DM数据库来创建新的数据库安全员。
SYSSSO或者新的数据库安全员都可以制定自己的安全策略,在安全策略中定义安全级别、范围和组,然后基于定义的安全级别、范围和组来创建安全标记,并将安全标记分别应用到主体(用户)和客体(各种数据库对象,如表、索引等),以便启用强制访问控制功能。
数据库安全员不能对用户数据进行增、删、改、查,也不能执行普通的 DDL 操作如创建表、视图等。他们只负责制定安全机制,将合适的安全标记应用到主体和客体,通过这种方式可以有效的对SYSDBA的权限进行限制,SYSDBA 此后就不能直接访问添加有安全标记的数据,除非安全员给 SYSDBA 也设定了与之匹配的安全标记,SYSDBA 的权限受到了有效的约束。数据库安全员也可以创建和删除新的安全用户,向这些用户授予和回收安全相关的权限。

2.1.3数据库审计员 AUDITOR

传统的 SYSDBA 集所有权利于一身,可以很容易修改工资表,从而导致公司工资账务错乱。为了预防该问题,可以采用前面数据库安全员制定安全策略的方法,避免SYSDBA或者其他数据库用户具有访问该表的权限。为了能够及时找到SYSDBA或者其他用户的非法操作,在DM数据库中还可以在系统建设初期,由数据库审计员(SYSAUDITOR 或者其他由 SYSAUDITOR 创建的审计员)来设置审计策略(包括审计对象和操作),在需要时,数据库审计员可以查看审计记录,及时分析并查找出幕后真凶。在 DM 数据库中,审计员的主要职责就是创建和删除数据库审计员,设置/取消对数据库对象和操作的审计设置,查看和分析审计记录等。

2.2四权分立

四权分立就是在三权分立的基础上增加了:数据库对象操作员DBO。DBO可以创建数据库对象,并对自己拥有的数据库对象(表、视图、存储过程、序列、包、外部链接等)具有所有的对象权限并可以授出与回收,但其无法管理与维护数据库对象。

2.3创建用户

可通过manager图形界面创建用户,根据实际需求选择不同的选项。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

2.3.1资源配置

以登录失败次数为例,默认值为3。

[dmdba@lei2 ~]$ disql lei/123
[-2501]:用户名或密码错误.
disql V8
用户名:
密码:
[-2501]:用户名或密码错误.
用户名:
密码:
[-2501]:用户名或密码错误.
在 3 次尝试之后无法连接到服务器, 退出 DISQL
[dmdba@lei2 ~]$ 
[dmdba@lei2 ~]$ disql lei/123
[-2501]:用户名或密码错误.
disql V8
用户名:
密码:
[-2501]:用户名或密码错误.
用户名:
密码:
[-2501]:用户名或密码错误.
在 3 次尝试之后无法连接到服务器, 退出 DISQL
[dmdba@lei2 ~]$ disql lei/123
[-2501]:用户名或密码错误.
disql V8
用户名:
密码:
[-2501]:用户名或密码错误.
用户名:
密码:
[-2501]:用户名或密码错误.
在 3 次尝试之后无法连接到服务器, 退出 DISQL
[dmdba@lei2 ~]$ disql lei/123
[-2508]:登录失败次数超过限制.
disql V8
用户名:
密码:
[-2501]:用户名或密码错误.
用户名:
密码:[-2501]:用户名或密码错误.
在 3 次尝试之后无法连接到服务器, 退出 DISQL
[dmdba@lei2 ~]$ 
[dmdba@lei2 ~]$ 
[dmdba@lei2 ~]$ disql lei/leileilei
[-2508]:登录失败次数超过限制.
disql V8
用户名:SQL> select USERNAME,LOCK_DATE,ACCOUNT_STATUS from dba_users where username='LEI';行号     USERNAME LOCK_DATE           ACCOUNT_STATUS
---------- -------- ------------------- --------------
1          LEI      2024-09-09 19:58:20 LOCKED已用时间: 25.221(毫秒). 执行号:3002.

3、自主访问控制

数据库对象的拥有者自主决定是否将自己拥有的对象的部分或全部访问权限授予其他用户。也就是说,在自主访问控制下,用户可以按照自己的意愿,有选择地与其他用户共享他拥有的数据库对象。

3.1创建lei.t1表

[dmdba@lei2 ~]$ disql lei/leileilei服务器[LOCALHOST:5236]:处于普通打开状态
登录使用时间 : 5.085(ms)
disql V8
SQL> create table t1(id int);
操作已执行
已用时间: 4.868(毫秒). 执行号:4001.
SQL> insert into t1 values(1);
影响行数 1已用时间: 0.936(毫秒). 执行号:4002.
SQL> commit;
操作已执行
已用时间: 0.741(毫秒). 执行号:4003.
[dmdba@lei2 ~]$ disql lei/leileilei服务器[LOCALHOST:5236]:处于普通打开状态
登录使用时间 : 5.085(ms)
disql V8
SQL> create table t1(id int);
操作已执行
已用时间: 4.868(毫秒). 执行号:4001.
SQL> insert into t1 values(1);
影响行数 1已用时间: 0.936(毫秒). 执行号:4002.
SQL> commit;
操作已执行
已用时间: 0.741(毫秒). 执行号:4003.

3.2创建ray用户并赋create session权限

SQL> conn sysdba/leileilei服务器[LOCALHOST:5236]:处于普通打开状态
登录使用时间 : 4.636(ms)
SQL> create user ray identified by rayrayray;
操作已执行
已用时间: 6.097(毫秒). 执行号:4201.
SQL> grant create session to ray;
操作已执行
已用时间: 1.482(毫秒). 执行号:4202.

3.3ray用户访问lei.t1表

SQL> conn ray/rayrayray 服务器[LOCALHOST:5236]:处于普通打开状态
登录使用时间 : 3.398(ms)
SQL> select * from lei.t1;
select * from lei.t1;
[-5504]:没有[LEI.T1]对象的查询权限.
已用时间: 0.653(毫秒). 执行号:0.

3.4自主访问控制

SQL> conn lei/leileilei服务器[LOCALHOST:5236]:处于普通打开状态
登录使用时间 : 5.038(ms)
SQL> grant select on t1 to ray;
操作已执行
已用时间: 3.767(毫秒). 执行号:4601.
SQL> conn ray/rayrayray服务器[LOCALHOST:5236]:处于普通打开状态
登录使用时间 : 5.324(ms)
SQL> select * from lei.t1;行号     ID         
---------- -----------
1          1已用时间: 1.001(毫秒). 执行号:4801.

3.5限制DBA的ANY权限

缺省情况下,DBA 角色拥有许多的“ANY”权限,如 DROP ANY TABLE、INSERT ANY TABLE 等等。DM 提供了一种限制 DBA 的“ANY”权限的方法:在非 DM 安全版本中,只有 SYSDBA 用户才能限制 DBA 的“ANY”权限;在 DM 安全版本中,只有具有 DB_POLICY_ADMIN 角色的用户才能限制 DBA 的“ANY”权限。通过执行系统过程SP_RESTRICT_DBA(1/0)来实现,1表示限制ANY权限,0表示不限制。系统过程执行完成后需要重启服务器该限制才能生效。

3.5.1创建用户并赋予DBA权限

SQL> create user lei identified by leileilei;
操作已执行
已用时间: 2.665(毫秒). 执行号:5003.
SQL> grant dba to lei;
操作已执行
已用时间: 1.665(毫秒). 执行号:5004.

3.5.2DBA用户访问其他用户表

SQL> select count(*) from dmhr.city;行号     COUNT(*)            
---------- --------------------
1          11已用时间: 22.882(毫秒). 执行号:5201.

3.5.3限制ANY权限并重启数据库

SQL> conn sysdba/leileilei服务器[LOCALHOST:5236]:处于普通打开状态
登录使用时间 : 15.756(ms)SQL> SP_RESTRICT_DBA(1);
DMSQL 过程已成功完成
已用时间: 9.971(毫秒). 执行号:6101.
SQL> exit
[dmdba@lei2 ~]$ DmServicelei restart
Stopping DmServicelei:                                     [ OK ]
Starting DmServicelei:                                     [ OK ]

3.5.4验证DBA用户ANY权限受限

[dmdba@lei2 ~]$ disql lei/leileilei服务器[LOCALHOST:5236]:处于普通打开状态
登录使用时间 : 4.507(ms)
disql V8
SQL> select count(*) from dmhr.city;
select count(*) from dmhr.city;
[-5504]:没有[DMHR.CITY]对象的查询权限.
已用时间: 1.319(毫秒). 执行号:0.

4、强访问控制

强制访问控制(Mandatory Access Control, MAC)是根据客体的敏感标记和主体的访问标记对客体访问实行限制的一种方法。在强制访问控制中,系统给主体和客体都分配一个特殊的安全标记,主体的安全标记反映了该主体可信的程度,客体的安全标记则与其包含信息的敏感度一致,且主体不能改变他自己及任何其它客体的安全标记,主体是否可以对客体执行特定的操作取决于主体和客体的安全标记之间的支配关系。因此,强制访问控制可以控制系统中信息流动的轨迹,能有效地抵抗特洛伊木马的攻击,这在一些对安全要求很高的数据库应用中是非常必要的。
DM 利用策略和标记来实现 DM 数据库的强制访问控制。执行强制访问控制的用户必须具有 LABEL DATABASE 数据库权限,在新初始化的数据库中,只有 SYSSSO 具有这个权限。
强制访问控制功能仅在 DM 安全版中提供。只有初始化库时指定 ENABLE_MAC=1 或启动 DMSERVER 时指定过 ENABLE_MAC 参数的情况下才支持强制访问控制。DM 共享存储集群 DMDSC、DM 数据守护和读写分离集群都支持强制访问控制,但 DM 大规模并行处理集群 MPP 暂不支持强制访问控制。

4.1策略

一组预定义的标记组件,包括等级、范围和组。只有具有 LABEL_DATABASE 数据库权限的用户才能执行创建修改删除操作
1.创建策略
MAC_CREATE_POLICY(
POLICY_NAME VARCHAR(128)
)
POLICY_NAME 新创建的策略名称。

2.修改策略
MAC_ALTER_POLICY(
POLICY_NAME VARCHAR(128),
NEW_NAME VARCHAR(128)
)
POLICY_NAME 待修改的策略名称
NEW_NAME 策略新名称
3.删除策略
MAC_DROP_POLICY(
POLICY_NAME VARCHAR(128),
DROP_COLUMN INT
)
POLICY_NAME 待删除的策略名称
DROP_COLUMN 对应用此策略的表的标记列的处理方式,取值为 0(默认) 或 1
0:不删除应用此策略的所有表对应的标记列
1:删除应用此策略的所有表对应的标记列

4.2等级

线性有序的名称序列, 用 L=(l1,l2,…,lp)表示. 任意两个名称 li、lj 之间,若 i≤j,则 li≤lj,于是有 l1≤l2≤…≤lp, 其中 l1,l2,…,lp 称为等级分类。一个策略最大可定义 10000 个等级。用户在定义策略中的等级时,需要为 其指定编号,其编号在0-9999之间(编号小的意味着级别较低)。
1.为策略添加等级
MAC_CREATE_LEVEL(
POLICY_NAME VARCHAR(128),
LEVEL_NUM INT,
LEVEL_NAME VARCHAR(128)
)
POLICY_NAME 要添加等级的策略名
LEVEL_NUM 创建的等级编号,在 0-9999 之间的整数
LEVEL_NAME 创建的等级名称,不能包含“:”和“,”
统一个策略中,等级ID和等级名称唯一,每个等级都有一个等级ID,ID越小安全等级越低
2.修改等级
MAC_ALTER_LEVEL(
POLICY_NAME VARCHAR(128),
LEVEL_NAME VARCHAR(128),
NEW_NAME VARCHAR(128)
);
POLICY_NAME 要修改等级名的策略名
LEVEL_NAME 待修改的等级名称
NEW_NAME 要修改成的等级名称
3.删除等级
MAC_DROP_LEVEL(
POLICY_NAME VARCHAR(128),
LEVEL_NAME VARCHAR(128)
)
POLICY_NAME 待删除等级所在策略名
LEVEL_NAME 待删除的等级名称

4.3范围

是集合类型,设集合 C={c1,c2,…,cm}中每一元素都是一名称,c1,c2,…, cm 间彼此独立,无序,则集合 C 及其任意子集称为非等级类别集合,其中 c1,c2,…, cm 称为非等级类别。在 DM 中,最大可定义 10000 个范围,需要用户设置编号,且编号在一个策略里面须是唯一的,编号之间没有级别高低之分。

1.添加范围
MAC_CREATE_COMPARTMENT(
POLICY_NAME VARCHAR(128),
COMPART_NUM INT,
COMPART_NAME VARCHAR(128)
)
POLICY_NAME 要添加范围的策略名
COMPART_NUM 创建的范围编号,在 0-9999 之间的整数
COMPART_NAME 创建的范围名称
同一个策略中,范围 ID 和范围名称唯一,范围独立无序,范围之间是平等关系,没有等级高低之分,范围之间的比较运算采用集合间的包含关系
2.修改范围
MAC_ALTER_COMPARTMENT(
POLICY_NAME VARCHAR(128),
COMPART_NAME VARCHAR(128),
NEW_NAME VARCHAR(128)
)
POLICY_NAME 要修改范围名的策略名
COMPART_NAME 待修改的范围名称
NEW_NAME 要修改成的范围名称
3.删除范围
MAC_DROP_COMPARTMENT(
POLICY_NAME VARCHAR(128),
COMPART_NAME VARCHAR(128)
);
POLICY_NAME 待删除范围所在策略名
COMPART_NAME 待删除的范围名称

4.4组

树形结构,有父子之分,用来描述组织结构。设树 G={g1,g2,…,gm},其中每一元素都是一名称,g1,g2,…,gm 间有父子之 分,则 g1,g2,…,gm 称为组。在 DM 中,最多能定义 10000 个组,也就是说组织结构的层次最多为 10000。组中只 能有一个根组,除根组外,每个组有且仅有一个父组。
为策略添加组
1.添加组
MAC_CREATE_GROUP( POLICY_NAME
VARCHAR(128), GROUP_NUM INT,
GROUP_NAME VARCHAR(128),
PARENT_NAME VARCHAR(128)
)
POLICY_NAME 要添加组的策略名
GROUP_NUM 创建的组编号,在 0-9999 之间的整数
GROUP_NAME 创建的组名称 PARENT_NAME 新创建组的父组的名称
同一个策略中,组 ID 和组名称唯一,同一个策略中,只能有一个根组,如果 PARENT_NAME 为 NULL,则创建组,组之间的比较运算采用树形结构间的从属关系
2.修改组
MAC_ALTER_GROUP(
POLICY_NAME VARCHAR(128),
GROUP_NAME VARCHAR(128),
NEW_NAME VARCHAR(128)
)
POLICY_NAME 要修改组名的策略名
GROUP_NAME 待修改的组名称
NEW_NAME 要修改成的组名称
更新父组
MAC_ALTER_GROUP_PARENT(
POLICY_NAME VARCHAR(128),
GROUP_NAME VARCHAR(128),
PARENT_NAME VARCHAR(128)
)
POLICY_NAME 要更新父组的组所在的策略名
GROUP_NAME 待更新父组的组名称
PARENT_NAME 待修改成的父组名称
待修改组和待修改成的父组必须存在;父组不能是自身,同时不能是自己的子节点
3.删除组
MAC_DROP_GROUP (
POLICY_NAME VARCHAR(128),
GROUP_NAME VARCHAR(128),
)
POLICY_NAME 待删除组所在策略名
GROUP_NAME 待删除的组名称
待删除的组不能有子节点存在,否则删除失败

5、审计

达梦数据库非安全版除了数据库管理员SYSDBA之外,还设有数据库审计员SYSAUDITOR,数据库审计员可以设置要审计的对象和操作、定义新的数据库审计员、查看和分析审计记录,通过设置审计,几乎可以跟踪任何人在系统内执行的任何操作,为事后追查提供便利。

5.1开启审计

使用sysauditor用户进入数据库
在这里插入图片描述

SP_SET_ENABLE_AUDIT (1);

在这里插入图片描述
在这里插入图片描述

5.2设置审计

日志开启之后,要为需要进行审计的用户设置审计。
在这里插入图片描述
在这里插入图片描述

5.3查看审计记录

通过analyzer工具查看审计记录。

[dmdba@lei2 ~]$ export DISPLAY=192.168.0.200:0.0
[dmdba@lei2 ~]$ analyzer

在这里插入图片描述
在这里插入图片描述

[dmdba@lei2 ~]$ disql lei/leileilei服务器[LOCALHOST:5236]:处于普通打开状态
登录使用时间 : 4.772(ms)
disql V8
SQL> select * from t1;行号     ID         
---------- -----------
1          0
2          1已用时间: 0.787(毫秒). 执行号:2401.
SQL> delete from t1 where id=0;
影响行数 1已用时间: 5.537(毫秒). 执行号:2402.
SQL> commit;
操作已执行
已用时间: 0.731(毫秒). 执行号:2403.
SQL> select * from t1;行号     ID         
---------- -----------
1          1已用时间: 0.334(毫秒). 执行号:2404.

在这里插入图片描述
也可通过V$AUDITRECORDS查看审计记录
在这里插入图片描述
更多内容请参考:https://eco.dameng.com


http://www.ppmy.cn/ops/131944.html

相关文章

Hive 操作基础(进阶篇☝️)

Hive 入门操作 创建表 EXTERNAL,创建外部表 PARTITIONED BY, 分区表 CLUSTERED BY,分桶表 STORED AS,存储格式 LOCATION,存储位置 ......, 数据类型 内部表 创建普通内部表: create table [if not exists…

第73期 | GPTSecurity周报

GPTSecurity是一个涵盖了前沿学术研究和实践经验分享的社区,集成了生成预训练Transformer(GPT)、人工智能生成内容(AIGC)以及大语言模型(LLM)等安全领域应用的知识。在这里,您可以找…

闪耀CeMAT亚洲物流展,驭势科技发布第五代U-Drive®智驾系统

11月5日,驭势科技于CeMAT首日,举行主题为 “驱动物流创新引擎,重塑产业新质生态”的新品发布会,正式发布第五代U-Drive智能驾驶系统。来自各行业的生态伙伴及业内专家莅临现场,共同见证驭势科技在自动驾驶技术领域的又…

元戎启行嵌入式面试题及参考答案

介绍下 CAN 通信原理 控制器局域网(CAN)是一种串行通信协议,主要用于汽车、工业自动化等领域的电子控制单元(ECU)之间的通信。 其通信原理是基于多主站架构。在总线上,多个节点(设备)都可以主动发起通信。CAN 协议使用差分信号来传输数据,通过两条信号线 CAN_H 和 CAN…

99、Python并发编程:多线程的问题、临界资源以及同步机制

引言 多线程技术的引入,可以帮助我们实现并发编程,一方面可以充分利用CPU计算资源,另一方面,可以在用户体验上带来极大的改善。但是,多线程技术也存在一些问题。本文就来简单聊一下多线程引入导致的问题,以…

[react]10、react性能优化

1、列表&key 一、React更新流程 React在props或state发生改变时,会调用React的render方法,会创建一颗不同的树。React需要基于这两颗不同的树之间的差别来判断如何有效的更新UI。 同层节点之间相互比较,不会垮节点比较;不同类型的节点&am…

【Linux】进程控制——创建,终止,等待回收

目录 进程创建fork再介绍写时拷贝 进程终止退出码退出方式 进程等待获取子进程statuswaitwaitpid 在前两篇进程概念中,对进程进行了介绍,进行了初步认识,也认识到了与之相关联的进程地址空间;本文则对进程的生命周期——创建&…

正则表达式在Kotlin中的应用:提取图片链接

在现代的Web开发中,经常需要从网页内容中提取特定的数据,例如图片链接。Kotlin作为一种现代的编程语言,提供了强大的网络请求和文本处理能力。本文将介绍如何使用Kotlin结合正则表达式来提取网页中的图片链接。 正则表达式基础 正则表达式是…