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
相关推荐
加勒比之杰克9 分钟前
【数据库初阶】MySQL数据类型
linux·数据库·mysql·数据类型·varchar
Libby博仙12 分钟前
asp.net core webapi中的数据注解与数据验证
数据库·asp.net·.netcore
网络安全成叔24 分钟前
【整理集合大全】MySQL(4) 数据库增删改查SQL语句
网络·数据库·sql·mysql·web安全·网络安全
雪芽蓝域zzs1 小时前
MySQL(六)MySQL 案例
数据库·mysql·oracle
yuanbenshidiaos1 小时前
QT-------------多线程
数据结构·数据库·qt
亦世凡华、1 小时前
从CRUD到高级功能:EF Core在.NET Core中全面应用(一)
数据库·经验分享·.netcore·ef core
XiangHua.Ma2 小时前
Redis 入门与实战指南
数据库·redis·缓存
皮克斯的进化之路2 小时前
Redis知识总结
数据库·redis·缓存
老大白菜2 小时前
MongoDB基本操作
数据库·mongodb
小小小妮子~3 小时前
深入解读MVCC中的三大日志:Undo Log、Redo Log和B-Log
服务器·数据库·oracle·日志