数据库实验报告 自主存取控制实验 SQL Kingbase

版权声明:作者:cheese0_0,转载请注明出处来自https://blog.csdn.net/cheese0_0 商业转载请联系作者获得授权,非商业转载请注明出处 https://blog.csdn.net/cheese0_0/article/details/85058702

一、实验题目
本次实验为自定任务,我选择了一个与自主存取控制有关的实验。
设有一个企业,包括采购、销售和客户管理等三个部门,采购部门经理David,采购员Fred;销售部门经理Tom,销售员Jerry;客户管理部门经理Kathy,职员Ron。该企业一个信息系统覆盖采购、销售和客户管理等三个部门的业务。针对此应用场景,使用自主存取控制机制设计一个具体的权限分配方案。
二、相关原理与知识
(完成实验所用到的相关原理与知识)
1.定义模式
在SQL语句中模式定义语句如下:
CREATE SCHEMA <模式名>AUTHORIZATION<用户名>;
2.定义基本表
CREATE TABLE<表名> (<列名><数据类型> [列级完整性约束条件]
[,<列名><数据类型> [列级完整性约束条件]]

[,<表级完整性约束条件>]);
3.授予
GRANT<权限>[,<权限>]…
ON<对象类型><对象名>[,<对象类型><对象名>]…
TO<用户>[,<用户>]…
[WITH GRANT OPTION];
4.收回
REVOKE<权限>[,<权限>]…
ON<对象类型><对象名>[,<对象类型><对象名>]…
FROM<用户>[,<用户>]…
[CASCADE|RESTRICT]
5.创建数据库模式的权限
CREATE USER
6.创建角色
CREATE ROLE <角色名>
创建的角色是空的,需要给角色授权。
GRANT<权限>[,<权限>]…
ON<对象类型><对象名>[,<对象类型><对象名>]…
TO<角色>[,<角色>]…
三、实验过程
(清晰展示实际操作过程,相关截图及解释)
方案构想:
由于题目没有具体给出要实现怎样的权限分配,所以我在这里发挥想象给个职位权限做一下安排。首先对于该系统用户可以简单分三类,客户、职员与经理。客户拥有与其相关部门的信息的查询权利,职员具有对所处部门信息的查询和插入权限,而经理拥有对本部门的所有权利和对其他部门的查询权限。我们可以看出经理的权限最大,包含职员和客户的权限,而职员的权限包含客户的权限。
方案实现过程:
1.建立以@@@命名模式;
2.建立如下六个表:
本次实验主要是练习自主存取控制,对于表没有太高要求,但是为了便于之后的实验,这里建立三组六个简易的表。
采购部门:
SUPPLIER表:SUPPLIER(Sname,Sprice),其中Sname为主码;
MATERIALS表:MATERIALS(Mname,Mprice),其中Mname为主码;
销售部门:
MARKET表:MARKET(Mno,Mprice),其中Mno为主码;
OEDERFORM表:OEDERFORM(Ono),其中Ono为主码;
客户管理部门:
CUSTOMER表:CUSTOMER(Cno,Cname),其中Cno为主码;
NATION表:NATION(Nname),其中Nname为主码;
建立模式和表后可以得到如下目录:
在这里插入图片描述
3.创建用户:
(1)为各部门经理创建用户
为采购、销售和客户管理等三个部门的经理David、Tom、Kathy创建用户标识,具有创建用户和角色的权利(WITH CREATEROLE),用户口令设为‘1234’。
(2)为各部门职员创建用户
为采购、销售和客户管理等三个部门的职员创建用户标识和用户口令为‘1234’。
在这里插入图片描述
在这里插入图片描述
4.创建角色:
(1)为各部门分别创建一个客户角色。
为采购部门建立客户角色PCustomerRole,为销售部门建立客户角色SCustomerRole,为客户管理部门建立客户角色CCustomerRole。
(2)为各部门分别创建一个职员角色
为采购部门建立职员角色PEmployeeRole,为销售部门建立职员角色SEmployeeRole,为客户管理部门建立职员角色CEmployeeRole。
(3)为各部门分别创建一个经理角色
为采购部门建立经理角色PManagerRole,为销售部门建立经理角色SManagerRole,为客户管理部门建立经理角色CManagerRole。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
5.给角色分配权限
1)为客户角色分配权限
客户对相关部门的信息具有查询权限,为各个部门的角色分配相应的权限。
为这三个角色分配查询权限,采购部门的角色PCustomerRole只能够查询MATERIALS表和SUPPLIER表;销售部门的角色SCustomerRole只能够查询ORDERFORM表和MARKET表;客户管理部门的角色CCustomerRole只能够查询NATION表和CUSTOMER表。
(2)为职员角色分配权限
职员对本部门的信息具有查询和插入权限,为各个部门的角色分配相应的权限。
为这三个角色分配查询和插入权限,采购部门的角色PEmployeeRole只能够对MATERIALS表和SUPPLIER表进行查询和插入;销售部门的角色SEmployeeRole只能够对ORDERFORM表和MARKET表进行查询和插入;客户管理部门的角色CEmployeeRole只能够对NATION表和CUSTOMER表进行查询和插入。
在这里插入图片描述
在这里插入图片描述
(3)为经理角色分配权限
经理对本部门的信息具有完全的控制权限,对其他部门的信息也具有查询权限。也就是说对于PManagerRole来说,他拥有对MATERIALS表和SUPPLIER表的所有操作的权限,同时还拥有ORDERFORM表、MARKET表、NATION表和CUSTOMER表的查询权限;同理,SManagerRole拥有对ORDERFORM表和MARKET表的所有权限同时他又有对MATERIALS表、SUPPLIER表、NATION表和CUSTOMER表的查询权限,CManagerRole拥有对NATION表和CUSTOMER表的所有权限,同时他拥有对ORDERFORM表、MARKET表、MATERIALS表和SUPPLIER表的查询权限。
又因为各部门的客户角色拥有对各部门的查询权限,所以我们可以直接在将本部门所有权限赋予本部门的经理后,将其他部门的查询权以其他部门客户角色的形式赋给本部门的经理。
6.给用户分配权限
因为我们刚刚已经创建了角色并给角色分配了权限,所以此时只需把角色分配给相应的人员即可。这样,使权限与职位(角色)挂钩,便于在以后的人事调动对权限的调整。
(1)给各部门经理分配权限
(2)给各部门职员分配权限
只需将职位角色授予对应的用户即可。
7.收回用户或角色权限
(1)收回客户管理部门职员Ron的职员权限
这里我假设Ron请求辞退,由于Ron以后不再是客户管理部门的职员,所以我们需要将他的权限收回。
这是收回用户权限。
(2)收回采购部门经理查看销售部门信息的权限
假设公司出台新规定,新规定的要求采购部门的经理不能查询销售部门的信息,此时我们需要把采购部门经理对销售部门信息的查询权限收回。
这是收回角色权限。
四、实验结果与分析
本次实验实现了创建用户、创建角色、给角色授权、给用户授权和回收权限等与自主存取控制方法相关的练习。大多数数据库管理系统都支持自主存取控制,主要通过SQL语句的GRANT 和REVOKE语句来实现。创建不同的用户和不同的角色,通过给角色授权使其具有不同的权限,再将具有不同权限的角色授权给相应的用户,因此,不同的用户可以根据不同的实际需要拥有不同的权限,而且可以允许用户将拥有的权限转授给其他用户。这样,不同的数据库用户对不同的或相同的数据库对象可以有着不同的权限。
数据库安全最重要的一点就是确保只授权给有资格的用户访问数据库的权限,同时令所有未授权的人员无法接近数据,这主要通过数据库系统的存取控制机制实现。存取控制机制主要包括定义用户权限和合法权限检查两部分。
在自主存取控制方法中,用户对于不同的数据库对象有不同的存取权限,不同的用户对同一对象也有不同的权限,而且用户还可将拥有的存取权限转授给其他用户。因此自主存取机制十分灵活。
五、问题总结
(记录所遇到的问题及解决方法)
遇到问题:书上的例题中使用“with grant option”表示允许将此权限再授予其他用户,而我在学习过程中发现也有使用“with admin option”表示同一含义,那二者的区别是什么。
解决办法:上网查阅with admin option与with grant option的区别。
with admin option的意思是被授予该权限的用户有权将某个权限(如create any table)授予其他用户或角色,取消是不级联的。如授予A系统权限create session with admin option,然后A又把create session权限授予B,但管理员收回A的create session权限时,B依然拥有create session的权限。但管理员可以显式收回B create session的权限,即直接revoke create session from B.
with grant option的意思是:权限赋予/取消是级联的,如将with grant option用于对象授权时,被授予的用户也可把此对象权限授予其他用户或角色,不同的是但管理员收回用with grant option授权的用户对象权限时,权限会因传播而失效,如grant select on table with grant option to A,A用户把此权限授予B,但管理员收回A的权限时,B的权限也会失效,但管理员不可以直接收回B的SELECT ON TABLE 权限。
六、源代码
(源程序)
建立模式:

CREATE SCHEMA @@@

建立表:

SET search_path TO @@@;
CREATE TABLE  CUSTOMER
(Cno CHAR(9) PRIMARY KEY,
Cname CHAR(20)); 

SET search_path TO @@@;
CREATE TABLE NATION
(Nname CHAR(9) PRIMARY KEY);

SET search_path TO @@@;
CREATE TABLE SUPPLIER
(Sname CHAR(9) PRIMARY KEY,
Sprice CHAR(20));

SET search_path TO @@@;
CREATE TABLE MATERIALS
(Mname CHAR(9) PRIMARY  KEY,
Mprice  CHAR(20)); 

SET search_path TO @@@;
CREATE TABLE ORDERform
(Ono CHAR(25) PRIMARY KEY); 

SET search_path TO @@@;
CREATE TABLE market
(Mno CHAR(10) PRIMARY KEY,
 Mprice CHAR(25)); 

创建用户:
(1)部门经理

CREATE USER David WITH CREATEROLE PASSWORD '1234';
CREATE USER Tom WITH CREATEROLE PASSWORD '1234';
CREATE USER Kathy WITH CREATEROLE PASSWORD '1234';

(2)部门职员

CREATE USER Fred WITH PASSWORD '1234';
CREATE USER Jerry WITH PASSWORD '1234';
CREATE USER Ron WITH PASSWORD '1234';

创建角色:
(1)客户角色

CREATE ROLE PCustomerRole;
CREATE ROLE SCustomerRole;
CREATE ROLE CCustomerRole;

(2)职员角色

CREATE ROLE PEmployeeRole;
CREATE ROLE SEmployeeRole;
CREATE ROLE CEmployeeRole;

(3)经理角色

CREATE ROLE PManagerRole;
CREATE ROLE SManagerRole;
CREATE ROLE CManagerRole;

为角色分配权限:
(1)为各个部门相应的客户角色分配查询权限。

GRANT SELECT ON TABLE MATERIALS TO PCustomerRole;
GRANT SELECT ON TABLE SUPPLIER TO PCustomerRole;
GRANT SELECT ON TABLE ORDERFORM TO SCustomerRole;
GRANT SELECT ON TABLE MARKET TO SCustomerRole;
GRANT SELECT ON TABLE NATION TO CCustomerRole;
GRANT SELECT ON TABLE CUSTOMER TO CCustomerRole;

(2)为各个部门职员角色分配查询和插入权限。

GRANT SELECT,INSERT ON TABLE MATERIALS TO PEmployeeRole;
GRANT SELECT,INSERT ON TABLE SUPPLIER TO PEmployeeRole;
GRANT SELECT,INSERT ON TABLE ORDERFORM TO SEmployeeRole;
GRANT SELECT,INSERT ON TABLE MARKET TO SEmployeeRole;
GRANT SELECT,INSERT ON TABLE NATION TO CEmployeeRole;
GRANT SELECT,INSERT ON TABLE CUSTOMER TO CEmployeeRole;

(3)为各个部门经理角色分权限。

GRANT ALL ON TABLE MATERIALS TO PManagerRole;
GRANT ALL ON TABLE SUPPLIER TO PManagerRole;
GRANT ALL ON TABLE ORDERFORM TO SManagerRole;
GRANT ALL ON TABLE MARKET TO SManagerRole;
GRANT ALL ON TABLE NATION TO CManagerRole;
GRANT ALL ON TABLE CUSTOMER TO CManagerRole;
GRANT PCustomerRole TO CManagerRole;
GRANT SCustomerRole TO CManagerRole;
GRANT SCustomerRole TO PManagerRole;
GRANT CCustomerRole TO PManagerRole;
GRANT PCustomerRole TO SManagerRole;
GRANT CCustomerRole TO SManagerRole;

给用户分配权限:
(1)给部门经理分配权限

GRANT PManagerRole TO David WITH ADMIN OPTION;
GRANT SManagerRole TO Tom WITH ADMIN OPTION;
GRANT CManagerRole TO Kathy WITH ADMIN OPTION; 

(2)给职工分配权限

GRANT PEmployeeRole TO Fred;
GRANT SEmployeeRole TO Jerry;
GRANT CEmployeeRole TO Ron;

回收权限:
(1)回收Ron的客户管理部门职员权限

REVOKE SEmployeeRole FROM Ron; 

(2)回收采购部门经理查看销售部门信息的权限

REVOKE SCustomerRole FROM PManagerRole;

猜你喜欢

转载自blog.csdn.net/cheese0_0/article/details/85058702