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
相关推荐
冒泡的肥皂43 分钟前
MVCC初学demo(一
数据库·后端·mysql
Fireworkitte1 小时前
Ubuntu、CentOS、AlmaLinux 9.5的 rc.local实现 开机启动
linux·ubuntu·centos
ac.char1 小时前
在CentOS系统中查询已删除但仍占用磁盘空间的文件
linux·运维·centos
.Shu.2 小时前
Redis Reactor 模型详解【基本架构、事件循环机制、结合源码详细追踪读写请求从客户端连接到命令执行的完整流程】
数据库·redis·架构
薛晓刚4 小时前
当MySQL的int不够用了
数据库
SelectDB技术团队5 小时前
Apache Doris 在菜鸟的大规模湖仓业务场景落地实践
数据库·数据仓库·数据分析·apache doris·菜鸟技术
星空下的曙光5 小时前
mysql 命令语法操作篇 数据库约束有哪些 怎么使用
数据库·mysql
小楓12015 小时前
MySQL數據庫開發教學(一) 基本架構
数据库·后端·mysql
染落林间色5 小时前
达梦数据库-实时主备集群部署详解(附图文)手工搭建一主一备数据守护集群DW
数据库·sql
颜颜yan_6 小时前
企业级时序数据库选型指南:从传统架构向智能时序数据管理的转型之路
数据库·架构·时序数据库