数据库第四章第一次作业

创建用户 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';

image

  • \du命令是显示openGauss数据库集簇中,目前有哪些用户和角色

image

进入用户 U1

参考:https://www.modb.pro/issue/18044

  • \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".

image

例4.1:把查询Student表权限授给用户U1

GRANT SELECT ON TABLE Student TO U1;
  • 以用户U1连接db_demo数据库,此时未授权,可以看到不能查询Student表的内容

image

  • 把查询Student表权限授给用户U1

image

  • 此时已授权,可以看到能够查询Student表的内容

image

  • 通过Navicat查看用户U1的权限,其具有查询Student表的权限

image

例4.2:把对Student表和Course表的全部权限授予用户U2和U3

GRANT ALL PRIVILEGES ON TABLE Student, Course TO U2, U3;
  • 以用户U2连接db_demo数据库,此时未授权,可以看到不能对Student表、Course表进行操作

image

  • 把对Student表和Course表的全部权限授予用户U2和U3

image

  • 此时已授权,可以看到能对Student表、Course表进行查询、插入、删除等操作

image

  • 通过Navicat查看用户U2、U3的权限,其具有Student表和Course表的全部权限

image
image
image

例4.3:把对表SC的查询权限授予所有用户

GRANT SELECT ON TABLE SC TO PUBLIC;
  • 以用户U2连接db_demo数据库,此时未授权,可以看到不能查询SC表的内容

image

  • 把对表SC的查询权限授予所有用户

image

  • 此时已授权,可以看到能够查询SC表的内容

image

例4.4:把查询Student表和修改学生学号的权限授给用户U4

GRANT UPDATE(Sno), SELECT ON TABLE Student TO U4;
  • 以用户U4连接db_demo数据库,此时未授权,可以看到不能查询Student表的内容和修改学生学号

image

  • 把查询Student表和修改学生学号的权限授给用户U4

image

  • 此时已授权,可以看到能查询Student表的内容和修改学生学号,但由于学号与SC表有联系,修改失败

image

  • 通过Navicat查看用户U4的权限,其具有查询Student表和修改学生学号的权限

image

例4.5:把对表SC的INSERT权限授予U5用户,并允许他再将此权限授予其他用户

GRANT INSERT ON TABLE SC TO U5 WITH GRANT OPTION;
  • 以用户U5连接db_demo数据库,此时未授权,可以看到不能向SC表内插入数据

image

  • 把对表SC的INSERT权限授予U5用户,并允许他再将此权限授予其他用户

image

  • 此时已授权,可以看到能向SC表内插入数据,并且可以将这一权限授予用户U4

image

  • 通过Navicat查看用户U5的权限,其具有对表SC的INSERT权限和转授权的权限

image

  • 通过Navicat查看用户U4的权限,其具有对表SC的INSERT权限

image

例4.6:用户U5登陆情况下

GRANT INSERT ON TABLE SC TO U6 WITH GRANT OPTION;
  • 以用户U5连接db_demo数据库,将对表SC的INSERT权限和转授权的权限授予用户U6

image

  • 通过Navicat查看用户U6的权限,其具有对表SC的INSERT权限和转授权的权限

image

例4.7:用户U6登陆情况下

GRANT INSERT ON TABLE SC TO U7;
  • 以用户U6连接db_demo数据库,将对表SC的INSERT权限授予用户U7,因为U6未给U7传播的权限,因此U7不能再传播此权限

image

  • 通过Navicat查看用户U7的权限,其具有对表SC的INSERT权限

image

例4.8:把用户U4修改学生学号的权限收回

REVOKE UPDATE(Sno) ON TABLE Student FROM U4;
  • 把用户U4修改学生学号的权限收回后,以用户U4连接db_demo数据库,可以看到不能再修改学生学号

image

  • 通过Navicat查看用户U4的权限,其不再具备修改学生学号的权限

image

例4.9:收回所有用户对表SC的查询权限

REVOKE SELECT ON TABLE SC FROM PUBLIC;
  • 收回所有用户对表SC的查询权限

image

  • 以任意用户(例如U1)连接db_demo数据库,可以看到不能再对表SC的进行查询

image

例4.10:把用户U5对SC表的INSERT权限收回

REVOKE INSERT ON TABLE SC FROM U5 CASCADE;
  • 把用户U5对SC表的INSERT权限收回后,以用户U5连接db_demo数据库,可以看到不能再向SC表内插入数据

image

  • 将用户U5的INSERT权限收回的同时,级联(CASCADE)收回了U6和U7的INSERT权限。以用户U6连接db_demo数据库,可以看到不能再向SC表内插入数据

image

例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;

image

  • 通过Navicat查看用户R1的权限,其具有Student表的SELECT、UPDATE、INSERT权限

image

  • 将这个角色授予U1、U2、U3,使他们具有角色R1所包含的全部权限。以用户U1连接db_demo数据库,可以看到能够向Student表内插入数据

image

4.一次性通过R1来回收U1的这3个权限

REVOKE R1 FROM U1;
  • 一次性通过R1来回收U1的这3个权限后,以用户U1连接db_demo数据库,可以看到不能再向Student表内插入数据

image

例4.12:使角色R1在原来的基础上增加了Student表的DELETE权限

GRANT DELETE ON TABLE Student To R1;
  • 使角色R1在原来的基础上增加了Student表的DELETE权限

image

  • 以用户R1连接db_demo数据库

image

  • 可以看到能够删除Student表内的数据

image

  • 通过Navicat查看用户R1的权限,其具有Student表的DELETE权限

image

例4.13:使R1减少了SELECT权限

REVOKE SELECT ON TABLE Student FROM R1;
  • 使R1减少了SELECT权限后,以用户R1连接db_demo数据库,可以看到不再能查询Student表的数据

image

  • 通过Navicat查看用户R1的权限,其不再具有Student表的SELECT权限

image

问题:CREATE ROLE 和CREATE USER 的区别

参考:https://www.modb.pro/db/197769

(一)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             | {}

image

2.openGauss中授予ROLE登陆权限

alter ROLE R1 LOGIN;
或
alter USER R1 LOGIN;

image

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    |                   |

image

4.PG_NAMESPACE系统表存储名称空间,即存储schema相关的信息。

SELECT * FROM pg_namespace;

image

posted @ 2023-05-10 21:46  油菜园12号  阅读(116)  评论(0编辑  收藏  举报