开篇
首先,我们先来了解一下达梦数据库中用户与模式的概念,以及用户与模式之间的关系。
用户:主要是用来登录连接数据库,以及操作数据库对象等等。
模式:数据库中相关对象的集合。
关系:用户(USER)和模式(SCHEMA)一对多,即一个用户可以拥有多个模式,而一个模式只能属于一个用户。
实战
数据库基本操作
新建用户,我们可以通过DM管理工具去创建,如图所示:
设置用户名、密码,定义表空间、索引表空间,如图所示:
温馨提示:若是对dm执行命令不熟悉的话,我们可以优先选择上述图中DM管理工具,依次按步骤执行即可。
https://eco.dameng.com/document/dm/zh-cn/start/dm-create-tablespace.html
这里,我们介绍下,如何通过命令执行?
CREATE TABLESPACE YD_BASE DATAFILE 'YD_BASE.DBF' SIZE 128;
CREATE USER YD_BASE IDENTIFIED BY "YDBASE2023" DEFAULT TABLESPACE YD_BASE;
GRANT RESOURCE TO YD_BASE;
在业务项目中使用jdbc连接如下所示:
url: jdbc:dm://127.0.0.1:5236?useUnicode=true&useJDBCCompliantTimezoneShift=true&useLegacyDatetimeCode=false&serverTimezone=Asia/Shanghai&useSSL=true&characterEncoding=UTF-8
username: YD_BASE
password: YDBASE2023
在微服务架构下,通常将各个业务粒度的数据存放于不同的空间内,多个数据库同时存在的场景亦比比皆是。这里需要注意的是,若是需要针对于不同的业务模块,实现按业务来做分库的效果。上述jdbc方式可以在SQL中不用指定模式.表名方式即可访问,但建议研发的童鞋使用模式名称.表名称规范起来,提高代码的可移植性。
在达梦数据库中,一个数据库用户建立之后会自动生成一个默认的模式,默认模式与用户名是相同的。
查询用户的信息:
SQL> select * from dba_users where username = 'SYSDBA';
查询用户拥有的模式:
SQL> select a.name as username, b.name as schenma from sysobjects a inner join sysobjects b on a.id = b.pid where b.subtype$ is null order by username desc;
查询用户所属的角色:
SQL> select * from dba_role_privs where grantee='SYSDBA';
查询角色的权限信息:
SQL> select * from dba_sys_privs where grantee='PUBLIC';
通过上述命令,我们就能很清晰地看到用户的信息,以及用户拥有的模式,用户所属角色,以及角色权限范围。当出现没有查询xxx表的权限异常信息,我们也一样能迎刃而解。
示例:当前登录用户没有查询当前表的权限时,我们可以回到SYSDBA登录,重新授予相关权限即可。
grant select on table(表) to user(用户);