达梦数据库一些经验分享
若想了解更多达梦相关教程,请添加“卓大”微信,备注对应数据库,如 达梦,进行采买。
Docker安装篇
1、提前准备
环境为:linux系统 centos8 , 达梦数据库为 达梦DM8版本,单机版
2、下载达梦镜像
达梦官方下载地址为:https://eco.dameng.com/download/ 可以已经不提供 Docker镜像下载。 所以请从笔者百度网盘下载:链接: https://pan.baidu.com/s/1SsQK7mlJjSlkTLFBZOFsKg 提取码: d83h 下载文件:dm8_20240715_x86_rh6_rq_single.tar.zip
3、上传并解压
1)将dm8_20240715_x86_rh6_rq_single.tar.zip
上传到linux服务器 centos 中,我这里为:
2)将其解压:unzip dm8_20240715_x86_rh6_rq_single.tar.zip
4、加载DM8镜像到Docker中
- 1)进入 镜像
dm8_20240715_x86_rh6_rq_single.tar
文件所在目录 - 2)执行
docker load -i dm8_20240715_x86_rh6_rq_single.tar
命令 - 3)检查是否 成功加载DM8镜像,执行
docker images
查看
5、明确启动容器参数
- 端口 15236
- 容器名字 dm8
- 不开启大小写敏感
-e CASE_SENSITIVE=0
- 数据映射目录:
/home/database/dm8/data
- 字符集utf8
-e UNICODE_FLAG=1
- 实例名称
-e INSTANCE_NAME=dm8_smartadmin
最终明确启动参数如下:
docker run -dit \
-p 15236:5236 \
--restart=always \
--name dm8 \
--privileged=true \
-e PAGE_SIZE=16 \
-e LD_LIBRARY_PATH=/opt/dmdbms/bin \
-e EXTENT_SIZE=32 \
-e BLANK_PAD_MODE=1 \
-e LOG_SIZE=1024 \
-e UNICODE_FLAG=1 \
-e LENGTH_IN_CHAR=1 \
-e CASE_SENSITIVE=0 \
-e INSTANCE_NAME=dm8_smartadmin \
-v /home/database/dm8/data:/opt/dmdbms/data \
dm8_single:dm8_20240715_rev232765_x86_rh6_64
6、启动容器
- 将上面的启动参数命令进行执行
- 查看是否启动成功
docker ps
7、启动/停止/重启
docker stop dm8
docker start dm8
docker restart dm8
8、进入容器
进入容器命令为:
docker exec -it dm8 bash
8、其他注意事项
Docker 镜像中数据库默认用户名/密码为 SYSDBA/SYSDBA001
1分钟搞懂表空间、用户、模式
1、背景
相比于mysql,达梦的表空间、用户、模式很难理解
2、表空间
达梦数据库表空间由一个或者多个数据文件组成。DM 数据库中的所有对象在逻辑上都存放在表空间中,而物理上都存储在所属表空间的数据文件中。
可设置表空间的名字、存储路径、文件大小、是否自动扩充空间、加密算法、密码;
类比mysql,就是mysql的库概念,mysql库有名字、编码等;
总结:
- 达梦分配表空间,在表空间中插入数据
- mysql创建数据库,在数据库中插入数据
3、用户
引自达梦官网文档说明:
达梦数据库中为了保证数据库系统的安全性,DM 数据库采用“三权分立”或“四权分立”的安全机制,“三权分立”时系统内置三种系统管理员,包括数据库管理员、数据库安全员和数据库审计员,“四权分立”时新增了一类用户,称为数据库对象操作员。它们各司其职,互相制约,有效地避免了将所有权限集中于一人的风险,保证了系统的安全性。
笔者深度解释:就是达梦数据库支持三四种类型角色的用户类型,拥有不同的权限,目的是为了安全。
达梦创建用户需要:用户名、密码,关联表空间,并赋予相关的权限;类比mysql其实是一样的,mysql中创建用户,然后赋予用户能看到哪几个库,赋予库的权限,如只读、读写等;
总结:两者一样
- 达梦创建用户,关联表空间,赋予用户相关权限
- mysql创建用户,关联数据库,赋予相关权限
4、模式
最难、最绕、最费脑的模式来了,其实达梦的空间和用户 和mysql几乎一模一样。
正常情况下,mysql接下来就可以直接使用了,但是达梦又多了模式,所以模式这点就很容易把大家给绕进去。
引自达梦官网文档对模式的说明、和采用:
用户的模式(Schema)指的是用户账号拥有的对象集,在概念上可将其看作是包含表、视图、索引和权限定义的对象。在 DM 中,一个用户可以创建多个模式,一个模式中的对象(表、视图等)可以被多个用户使用。模式不是严格分离的,一个用户可以访问他所连接的数据库中有权限访问的任意模式中的对象。系统为每一个用户自动建立了一个与用户名同名的模式作为其默认模式,用户还可以用模式定义语句建立其它模式。DM 模式主要包含以下的模式对象:表;视图;索引;触发器;存储过程/函数;序列;全文索引;包;同义词;类;外部链接。
笔者深度解释:
- 表、视图、索引、存储过程 等这些资源 叫做 “模式对象”
- 模式是 以上资源的组合
- 模式是用户的,默认创建用户会创建一个同名的模式,用户也可以创建其他模式
举个例子SmartAdmin中有一些关于三级等保功能的表,如下面三个表,可以定义一个模式叫做 level3
三级等保模式,里面有三个表的资源,这个模式可以给其他政府部门使用,用于监管数据。
t_login_log 登录记录
t_login_fail 登录失败锁定
t_operate_log 操作记录
总结: 模式是更小粒度的权限控制
- 模式是将数据库资源打包成结合,以便更小粒度的控制相关权限等
- 对比mysql,为了将三面3个表对别人开放访问可能需要重新创建个用户,而达梦,则不要创建用户,而是创建个模式就行了。
5、表空间、用户、模式(深度解释)
笔者想在以一个例子并和mysql对比下 深入解释这三个之间的关系。
再拿三级等保相关举例,公司现有 行政部 和 审计部 两个部门的用户,分别对应用户为:
xingzheng 行政部
shenji 审计部
5.1 模式的应用场景
行政部想看下三级等保相关表数据,三个表为:
t_login_log 登录记录
t_login_fail 登录失败锁定
t_operate_log 操作记录
- mysql 的话,我们可以将 三个表的查看权限赋予
xingzheng
这个账号 - 达梦的话,需要创建一个模式,叫做
level3
5.2 模式的好处
审计部 也想看下三级等保相关的三个表数据,和行政部一样的需求;
重点来了:
- mysql 的话,我们可以将 三个表的查看权限再次赋予
shenji
这个账号 - 达梦的话,则很简单需要将模式
level3
赋予shengji
访问权限即可,是不是简单一些
5.3 模式“真香”
上面第二点我们已经感受到模式的简单方便了,接下来又有个新的场景,行政部、审计部都需要 再看到t_user
用户表的数据 “真香”来了:
- mysql 的话,我们需要将
t_user
表 分别 赋予xingzheng
、shenji
两个账号,操作起来很麻烦 - 达梦的话,则很简单需要将模式
level3
中多增加t_user
表即可,是不是非常简单
以上例子大家不要用mysql的视图来讲理由,笔者只是举例子,实际情况可能不止是表,还有可能会有其他资源,比如 序列,存储国产等组合
6、总结
看完上面以后不知道大家能理解到多少,最后从宏观上再讲下。 笔者深度总结下:
- 大背景下,网络安全、数据安全越来越重视,相关更细粒度控制资源,而mysql 是轻量级数据库,无法做到更细粒度的控制;
- 模式的目的是为了更细粒度的将数据库资源打包成一个集合,用于更细粒度的管理
- 模式用起来会更复杂和麻烦,但是为了安全,可能宁可麻烦一些,也要控制好