openGauss开源数据库实战十八

文章目录

任务十八 openGauss逻辑结构:构:用户和权眼管理

任务目标

掌握openGauss的用户管理以及权限管理。

实施步骤

一、准备工作

为了进行测试,执行下面的命令和语句,创建一个名为test_ts的表空间和一个名为testdb的数据库:

sql 复制代码
gsql -d postgres -p 26000 -r
CREATE TABLESPACE test_ts RELATIVE LOCATION 'tablespace/test_ts1';
CREATE DATABASE testdb WITH TABLESPACE = test_ts;

二、用户和角色管理

1.使用CREATE USER语句创建用户

执行下面的SOL语句,创建一个名为test的数据库用户,其密码为test@ustb2020,并将数据库testdb所有的权限都授予用户test:

sql 复制代码
CREATE USER test IDENTIFIED BY 'test@ustb2020';
GRANT ALL ON DATABASE testdb TO test;

执行下面的gsql元命令,查看系统目前有哪些数据库:

sql 复制代码
\l

可以看出,经过授权后用户test对数据库testdb具有了权限。

执行下面的gsql元命令,查看系统目前有哪些用户:

sql 复制代码
\du

为Linux用户omm打开一个新的Linux终端窗口,执行下面的gsql命令,用刚刚创建的数据库用户test登录到数据库testdb:

sql 复制代码
gsql -d testdb -h 192.168.100.91 -U test -p 26000 -W test@ustb2020 -r
\q

可以看到,使用CREATEUSER语句创建的用户可以成功连接到openGaussDBMS。

2.使用CREATE ROLE语句创建用户

打开一个新的Linux终端窗口,执行下面的命令和SQL语句,创建一个新的名为tset的角色,并将数据库testdb所有的权限都授予用户tset:

sql 复制代码
gsql -d postgres -p 26000 -r
CREATE ROLE tset IDENTIFIED BY 'tset@ustb2020';
GRANT ALL ON DATABASE testdb TO tset;
\l

可以看出,用户tset对数据库testdb具有的权限和用户tset一模一样。

执行gsql元命令\du,查看当前openGauss数据库集群有哪些用户:

sql 复制代码
\du

从上面的输出可以看出,使用CREATEROLE语句创建的用户tset没有登录权限。下面的实验验证了这一点。执行下面的命令退出gsql:

sql 复制代码
\q

打开一个新的Linux终端窗口,使用刚刚创建的数据库用户tset尝试登录到数据库testdb:

sql 复制代码
gsql -d testdb -h 192.168.100.91 -U tset -p 26000 -W tset@ustb2020 -r

上面的输出显示,由于数据库用户tset是使用CREATE ROLE语句创建的,目前还不被允许登录到openGauss DBMS。

执行下面的命令和SOL语句,授予用户tset登录权限:

sql 复制代码
gsql -d postgres -p 26000 -r
alter user tset LOGIN;
\q

实验结论:使用CREATE USER语句创建的用户与使用CREATE ROLE语句创建的用户的区别在于,前者可以直接登录到数据库,而后者不能直接登录到数据库,必须添加LOGIN权限后,才能登录到数据库管理系统。

3.删除用户和角色

删除用户时需要首先将用户拥有的数据库对象转移或者删除。打开一个新的Linux终端窗口(命名为窗口1),执行下面的命令,授予用户tset SYSADMIN权限:

sql 复制代码
gsql -d postgres -p 26000 -r
ALTER USER tset SYSADMIN;

使用Linux用户omm,打开一个新的Linux终端窗口(命名为窗口2),使用数据库用户tset登录到数据库testdb,创建表空间ttt_ts、数据库tttdb、表ttt1和表ttt2:

sql 复制代码
gsql -d testdb -h 192.168.100.91 -U tset -p 26000 -W tset@ustb2020 -r
CREATE TABLESPACE ttt_ts RELATIVE LOCATION 'tablespace/ttt_ts1';
CREATE DATABASE tttdb WITH TABLESPACE = ttt_ts;
CREATE TABLE ttt1(col int);
CREATE TABLE ttt2(col int);

回到窗口1,执行如下的命令,删除用户tset:

sql 复制代码
drop user tset;

可以看出,不能删除用户tset的原因是:

1)用户tset拥有数据库ttdb。

2)用户tset拥有表空间对象tt_ts。

3)用户tset对数据库testdb具有权限。

4)用户tset在数据库testdb中有两个对象。

要删除用户tset,必须先将表空间对象和数据库对象的属主修改为其他的用户(如用户test),或者干脆将其删除。在窗口1中运行下面的SQL语句:

sql 复制代码
alter database tttdb owner to test;
alter tablespace ttt_ts owner to test;

在窗口1中运行下面的SQL语句,回收用户tset对数据库testdb的权限:

sql 复制代码
REVOKE ALL ON DATABASE testdb FROM tset;

对数据库testdb中属于用户tset的数据库对象的处理方法是:假如该对象还有用,可以将该对象转移给其他用户;假如该对象没有用,可以直接删除该对象。

转到窗口2,执行如下命令:

sql 复制代码
\dt

假设表ttt1已经没有用了,我们可以删除表t1。在窗口2中执行如下SQL语句:

sql 复制代码
drop table ttt1;

假设表ttt2还有用,在窗口2中执行如下SQL语句,将表tt2转移给用户test:

sql 复制代码
REASSIGN OWNED BY tset to test;

注意:DROP OWNED命令不能删除表空间和数据库

完成以上步骤后,我们转到窗口1,可以执行删除用户的操作了:

sql 复制代码
DROP OWNED BY tset;
\q

三、权限管理

1.系统权限

执行下面的命令,授予用户test SYSADMIN权限:

sql 复制代码
gsql -d postgres -p 26000 -r
ALTER USER test SYSADMIN;
\q
清理工作
sql 复制代码
gsql -d postgres -p 26000 -r
drop database tttdb;
drop database testdb;
drop tablespace ttt_ts;
drop tablespace test_ts;
drop user test
\q
相关推荐
老王笔记14 分钟前
MySQL如何区分幻读和不可重复读
数据库·mysql
不爱学习的啊Biao15 分钟前
【08】MySQL复杂查询:子查询语句详解与示例
数据库·mysql·子查询
st_3321 分钟前
Junit5 单元测试入门
数据库·单元测试·log4j
s***g54023 分钟前
MySQL-操作数据库备份与恢复
数据库·mysql
CQU_JIAKE1 小时前
11.5【算法】6-1 表彰优秀学生(多态)
数据库
Elastic 中国社区官方博客2 小时前
使用数据层进行数据生命周期管理
大数据·数据库·elasticsearch·搜索引擎·全文检索·时序数据库
我爱李星璇2 小时前
Spring Boot项目的创建
java·数据库·spring boot
锵锵锵锵~蒋2 小时前
实时数据开发|Flink异步IO--提升性能和吞吐量
jvm·数据库·flink·实时数据开发
小麦项目管理指南3 小时前
工程企业需要什么样的财务软件?
大数据·数据库·信息可视化·项目管理
涛思数据(TDengine)3 小时前
解密时序数据库的未来:TDengine Open Day技术沙龙精彩回顾
数据库·时序数据库·tdengine