数据库第四章第一次作业
创建用户 U1-U7
gs_om -t start
gsql -d db_demo -p 26000 -r
CREATE USER U1 IDENTIFIED BY 'Ycy021013';
CREATE USER U2 IDENTIFIED BY 'Ycy021013';
CREATE USER U3 IDENTIFIED BY 'Ycy021013';
CREATE USER U4 IDENTIFIED BY 'Ycy021013';
CREATE USER U5 IDENTIFIED BY 'Ycy021013';
CREATE USER U6 IDENTIFIED BY 'Ycy021013';
CREATE USER U7 IDENTIFIED BY 'Ycy021013';
\du
命令是显示openGauss数据库集簇中,目前有哪些用户和角色
进入用户 U1
\c[onnect] [DBNAME]
命令,元命令\ c[onnect] [DBNAME]
的作用是在gsql中,切换连接的数据库
db_demo=# \c ---查看当前用户和数据库是哪个
Non-SSL connection (SSL connection is recommended when requiring high-security)
You are now connected to database "db_demo" as user "omm".
db_demo=# \c db_demo U1; ----用U1用户连接db_demo数据库
Password for user u1:
Non-SSL connection (SSL connection is recommended when requiring high-security)
You are now connected to database "db_demo" as user "u1".
例4.1:把查询Student表权限授给用户U1
GRANT SELECT ON TABLE Student TO U1;
- 以用户U1连接db_demo数据库,此时未授权,可以看到不能查询Student表的内容
- 把查询Student表权限授给用户U1
- 此时已授权,可以看到能够查询Student表的内容
- 通过Navicat查看用户U1的权限,其具有查询Student表的权限
例4.2:把对Student表和Course表的全部权限授予用户U2和U3
GRANT ALL PRIVILEGES ON TABLE Student, Course TO U2, U3;
- 以用户U2连接db_demo数据库,此时未授权,可以看到不能对Student表、Course表进行操作
- 把对Student表和Course表的全部权限授予用户U2和U3
- 此时已授权,可以看到能对Student表、Course表进行查询、插入、删除等操作
- 通过Navicat查看用户U2、U3的权限,其具有Student表和Course表的全部权限
例4.3:把对表SC的查询权限授予所有用户
GRANT SELECT ON TABLE SC TO PUBLIC;
- 以用户U2连接db_demo数据库,此时未授权,可以看到不能查询SC表的内容
- 把对表SC的查询权限授予所有用户
- 此时已授权,可以看到能够查询SC表的内容
例4.4:把查询Student表和修改学生学号的权限授给用户U4
GRANT UPDATE(Sno), SELECT ON TABLE Student TO U4;
- 以用户U4连接db_demo数据库,此时未授权,可以看到不能查询Student表的内容和修改学生学号
- 把查询Student表和修改学生学号的权限授给用户U4
- 此时已授权,可以看到能查询Student表的内容和修改学生学号,但由于学号与SC表有联系,修改失败
- 通过Navicat查看用户U4的权限,其具有查询Student表和修改学生学号的权限
例4.5:把对表SC的INSERT权限授予U5用户,并允许他再将此权限授予其他用户
GRANT INSERT ON TABLE SC TO U5 WITH GRANT OPTION;
- 以用户U5连接db_demo数据库,此时未授权,可以看到不能向SC表内插入数据
- 把对表SC的INSERT权限授予U5用户,并允许他再将此权限授予其他用户
- 此时已授权,可以看到能向SC表内插入数据,并且可以将这一权限授予用户U4
- 通过Navicat查看用户U5的权限,其具有对表SC的INSERT权限和转授权的权限
- 通过Navicat查看用户U4的权限,其具有对表SC的INSERT权限
例4.6:用户U5登陆情况下
GRANT INSERT ON TABLE SC TO U6 WITH GRANT OPTION;
- 以用户U5连接db_demo数据库,将对表SC的INSERT权限和转授权的权限授予用户U6
- 通过Navicat查看用户U6的权限,其具有对表SC的INSERT权限和转授权的权限
例4.7:用户U6登陆情况下
GRANT INSERT ON TABLE SC TO U7;
- 以用户U6连接db_demo数据库,将对表SC的INSERT权限授予用户U7,因为U6未给U7传播的权限,因此U7不能再传播此权限
- 通过Navicat查看用户U7的权限,其具有对表SC的INSERT权限
例4.8:把用户U4修改学生学号的权限收回
REVOKE UPDATE(Sno) ON TABLE Student FROM U4;
- 把用户U4修改学生学号的权限收回后,以用户U4连接db_demo数据库,可以看到不能再修改学生学号
- 通过Navicat查看用户U4的权限,其不再具备修改学生学号的权限
例4.9:收回所有用户对表SC的查询权限
REVOKE SELECT ON TABLE SC FROM PUBLIC;
- 收回所有用户对表SC的查询权限
- 以任意用户(例如U1)连接db_demo数据库,可以看到不能再对表SC的进行查询
例4.10:把用户U5对SC表的INSERT权限收回
REVOKE INSERT ON TABLE SC FROM U5 CASCADE;
- 把用户U5对SC表的INSERT权限收回后,以用户U5连接db_demo数据库,可以看到不能再向SC表内插入数据
- 将用户U5的INSERT权限收回的同时,级联(CASCADE)收回了U6和U7的INSERT权限。以用户U6连接db_demo数据库,可以看到不能再向SC表内插入数据
例4.11:通过角色来实现将一组权限授予一个用户
1.创建一个角色 R1
CREATE ROLE R1 IDENTIFIED BY 'Ycy021013';
2.使用GRANT语句,使角色R1拥有Student表的SELECT、UPDATE、INSERT权限
GRANT SELECT,UPDATE,INSERT ON TABLE Student TO R1;
3.将这个角色授予U1、U2、U3,使他们具有角色R1所包含的全部权限
GRANT R1 TO U1,U2,U3;
- 通过Navicat查看用户R1的权限,其具有Student表的SELECT、UPDATE、INSERT权限
- 将这个角色授予U1、U2、U3,使他们具有角色R1所包含的全部权限。以用户U1连接db_demo数据库,可以看到能够向Student表内插入数据
4.一次性通过R1来回收U1的这3个权限
REVOKE R1 FROM U1;
- 一次性通过R1来回收U1的这3个权限后,以用户U1连接db_demo数据库,可以看到不能再向Student表内插入数据
例4.12:使角色R1在原来的基础上增加了Student表的DELETE权限
GRANT DELETE ON TABLE Student To R1;
- 使角色R1在原来的基础上增加了Student表的DELETE权限
- 以用户R1连接db_demo数据库
- 可以看到能够删除Student表内的数据
- 通过Navicat查看用户R1的权限,其具有Student表的DELETE权限
例4.13:使R1减少了SELECT权限
REVOKE SELECT ON TABLE Student FROM R1;
- 使R1减少了SELECT权限后,以用户R1连接db_demo数据库,可以看到不再能查询Student表的数据
- 通过Navicat查看用户R1的权限,其不再具有Student表的SELECT权限
问题:CREATE ROLE 和CREATE USER 的区别
(一)CREATE ROLE
1.功能描述
创建角色。
角色是拥有数据库对象和权限的实体。在不同的环境中角色可以认为是一个用户,一个组或者兼顾两者。
2.注意事项
- 在数据库中添加一个新角色,角色无登录权限。
- 创建角色的用户必须具备CREATE ROLE的权限或者是系统管理员。
(二)CREATE USER
1.功能描述
创建一个用户。
2.注意事项
- 通过CREATE USER创建的用户,默认具有LOGIN权限。
- 通过CREATE USER创建用户的同时,系统会在执行该命令的数据库中,为该用户创建一个同名的SCHEMA。
- 系统管理员在普通用户同名schema下创建的对象,所有者为schema的同名用户(非系统管理员)。
(三)代码演示
1.ROLE没有登陆权限
db_demo=# \c db_demo R1;
Password for user r1:
FATAL: role "r1" is not permitted to login
Previous connection kept
db_demo=# \du
List of roles
Role name | Attributes | Member of
----------+ ------------------------ + ---------
r1 | Cannot login | {}
2.openGauss中授予ROLE登陆权限
alter ROLE R1 LOGIN;
或
alter USER R1 LOGIN;
3.查看当前数据库有多少schema
db_demo=# \dn+
List of schemas
Name | Owner | Access privileges | Description
-------------+-------+-------------------+----------------------------------
cstore | omm | | reserved schema for DELTA tables
dbe_perf | omm | | dbe_perf schema
pkg_service | omm | | pkg_service schema
public | omm | omm=UC/omm +| standard public schema
| | =U/omm |
snapshot | omm | | snapshot schema
u1 | u1 | |
4.PG_NAMESPACE系统表存储名称空间,即存储schema相关的信息。
SELECT * FROM pg_namespace;