文章目录
- [任务十八 openGauss逻辑结构:构:用户和权眼管理](#任务十八 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