实验目的
了解该DBMS系统对数据库管理的内容与方法,特别是理解数据库安全机制和作用,以及PostgreSQL数据库角色管理、用户管理、权限管理的基本方法,培养数据库管理能力。在图书销售管理系统数据库中,创建必要的角色和用户,并完成上述角色与用户的权限管理。
实验原理
设计数据存取权限控制模型,对各角色进行不同权限的赋予,保证数据库数据的安全性。使用SQL语句进行角色、用户的创建、对角色进行权限赋予、对用户分派角色。
用户的创建:
SQL提供了专门创建用户的SQL命令语句,在数据库中,只能通过特定权限的用户创建其他用户,如系统管理员或超级用户。因此为每个用户分配合适的权限,尤为重要。
Create user < 用 户 账 号 >[[with] option […]];
Superuser|nosuperuser:指定创建的用户是否为超级用户
Createdb|nocreatedb:指定创建的用户是否具有创建数据库的权限
Createrole|nocreaterole:指定创建的用户是否具有创建角色的权限
Inherit|noinherit:指定创建的用户是否具有继承角色的权限
Login|nologin:指定创建的用户是否具有登陆权限
Replication|noreplication:指定创建的用户是否具有复制权限
Bypassrls|nobypassrls 指定创建的用户是否具有绕过安全策略的权限
Connection limit 指定创建的用户访问数据连接的数目限制
[encrypted|unencrypted] password ‘xxx’:指定创建的用户密码是否需要加密
Valid until ‘timestamp’:指定创建的用户密码失效时间
In role role_name[,…]:指定创建的用户成为那些角色的成员
角色的创建:
角色的创建与用户创建过程相似,但没有密码等设置要求。
权限赋予:
可以直接将对表的操作权限直接赋予用户。
Grant select,update,alter,delete on table_name to userxx;
但是这样需要为每个用户单独赋予权限,当用户数量较多时,工作量大,且难以管理。通过创建角色,赋予角色相应权限,用户采用继承角色的方式获得相应的权限。
使用不同的用户登录时,就拥有了该用户的权限,在对数据库表进行操作的时候就会受到不同程度的制约。
实验内容
使用pgAdmin4数据库管理工具对图书销售管理系统数据库进行数据库安全管理,具体实验内容如下:
(1)针对图书销售管理系统数据库,设计数据存取权限控制模型。
(2)在数据库中,创建客户(R_Customer)、商家(R_Seller)角色。
(3)在数据库中,根据业务规则为客户(R_Customer)、商家(R_Seller)角色赋予数据库对象权限。
(4)在数据库中,分别创建客户用户U_Customer、商家用户U_Seller。
(5)分别为客户用户U_Customer、商家用户U_Seller分派客户(R_Client)、商家(R_Seller)角色。
(6)分别以客户用户U_Customer、商家用户U_Seller身份访问图书销售管理数据库,验证所实现数据存取权限控制模型的正确性。
在实验计算机上,利用pgAdmin4数据库管理工具及SQL语句,完成图书销售管理系统数据库安全管理,同时记录实验过程的步骤、操作、运行结果界面等数据,为撰写实验报告提供素材。
实验器材
管理工具:pgAdmin 4
DBMS系统:PostgreSQL 11
实验步骤
(1)针对图书销售管理系统数据库,设计数据存取权限控制模型。
根据业务逻辑及实际需要为商家、客户、系统管理员分配在每个数据库表上的操作权限。
(2)在数据库中,创建客户(R_Customer)、商家(R_Seller)角色。
采用SQL语句执行方式,创建客户R_Customer、商家R_Seller角色。
(3)在数据库中,根据业务规则为客户(R_Customer)、商家(R_Seller)角色赋予数据库对象权限。
利用Grant关键词对客户R_Customer、商家R_Seller角色参考设计的数据存取权限控制模型赋予对应的所定义的数据库对象权限。
(4)在数据库中,分别创建客户用户U_Customer、商家用户U_Seller。
(5)分别为客户用户U_Customer、商家用户U_Seller分派客户(R_Client)、商家(R_Seller)角色。
(6)分别以客户用户U_Customer、商家用户U_Seller身份访问图书销售管理数据库,验证所实现数据存取权限控制模型的正确性。
分别以客户用户U_Customer、商家用户U_Seller身份访问图书销售管理数据库,并分别以这两个用户对各数据库表进行操作,以验证是否正确分配了两用户不同的角色权限。
实验结果
(1)针对图书销售管理系统数据库,设计数据存取权限控制模型。
商家角色安全模型:
客户角色安全模型:
结果说明:
成功设计了客户角色和商家角色的数据库存取访问权限控制模型。
(2)在数据库中,创建客户(R_Customer)、商家(R_Seller)角色。
SQL程序代码:
create role R_Customer with
login
nosuperuser
nocreatedb
nocreaterole
noinherit
noreplication
connection limit -1
password '123456';
create role R_Seller with
login
nosuperuser
nocreatedb
nocreaterole
noinherit
noreplication
connection limit -1
password '123456';
运行操作界面:
结果说明:
成功创建了客户角色R_Customer和商家角色R_Seller。
(3)在数据库中,根据业务规则为客户(R_Customer)、商家(R_Seller)角色赋予数据库对象权限。
SQL程序代码:
grant select on Author to R_Customer;
grant select on Publisher to R_Customer;
grant select on Book to R_Customer;
grant select,insert,update,delete on Author to R_Seller;
grant select,insert,update,delete on Publisher to R_Seller;
grant select,insert,update,delete on Book to R_Seller;
grant select,insert,update,delete on Customer to R_Seller;
grant select,insert,update,delete on Sale to R_Seller;
grant select on Bookstock to R_Seller;
运行操作界面:
结果说明:
成功将定义的权限赋予给了客户角色R_Customer和商家角色R_Seller。
(4)在数据库中,分别创建客户用户U_Customer、商家用户U_Seller。
(5)分别为客户用户U_Customer、商家用户U_Seller分派客户(R_Client)、商家(R_Seller)角色。
SQL程序代码:
create user U_Customer with
login
connection limit -1
in role R_Customer
password '123456';
create user U_Seller with
login
connection limit -1
in role R_Seller
password '123456';
运行操作界面:
结果说明:
成功创建了客户用户U_Customer和商家用户U_Seller。
(6)分别以客户用户U_Customer、商家用户U_Seller身份访问图书销售管理数据库,验证所实现数据存取权限控制模型的正确性。
SQL程序代码:
select * from Book;
delete from Book where Book_ISBN = '9783253213434';
select * from Author;
insert into Author values('310109198906127514','小丽','女');
select * from Sale;
以客户用户身份登录数据库:
查看Book表:
删除Book表中的数据:
查看Author表:
向Author表中插入一条数据:
查看Sale表:
结果说明:
客户用户U_Customer可查看Book表中的数据。在删除Book表中的数据时,结果显示失败,客户用户不能完成删除操作。客户用户可以查看Author表中的数据。在向Author表中插入一条数据时,结果显示失败,客户用户不能完成插入操作。在查看Sale表中的数据时,结果显示失败,客户用户不能完成查看操作。
客户用户对数据库表的权限的测试都正确,即创建的客户用户赋予权限的操作是正确的。
SQL程序代码:
select * from Customer;
insert into Author values('310109198906127514','小丽','女');
select * from Author;
delete from Bookstock where Stock_ID = 'SA00001';
update Sale set Sale_Date = '2019-06-10' where Sale_ID = 'SA00001';
select * from Sale;
以商家用户身份登录数据库:
查看Customer表:
向Author表中插入一条数据:
从Bookstock表中删除一条数据:
更新Sale表中的一条数据:
结果说明:
商家用户U_Seller可查看Customer表中的数据。通过与客户用户步骤中查询的作家信息表进行对比,Author表中的数据新增加了一条,商家用户具有对Author表的插入权限。在从Bookstock表中删除一条数据时,结果显示失败,商家用户不能完成删除操作。通过对比,Sale表中的数据发生了更新,商家用户具有对Sale表的更新权限。
商家用户对数据库表的权限的测试都正确,即创建的商家用户赋予权限的操作是正确的。
数据库原理及应用实验: