周三的炎热的下午,在图书馆搬运我的实验报告。
1、掌握参照完整性约束
2、设计用户子模式
3、根据实际需要创建不同的用户授以不同的权限
4、针对不同级别的用户定义不同的视图,以保证系统的安全性。
外键说明或源码:
ALTER TABLE fruits
ADD FOREIGN KEY fruits(s_id) REFERENCES suppliers (s_id) ON DELETE CASCADE ON UPDATE CASCADE;
2.表orderitems的f_id字段是外键,取值来源于是fruitss表的f_id字段
ALTER TABLE orderitems ADD FOREIGN KEY orderitems(f_id) REFERENCES fruits (f_id) ON DELETE CASCADE ON UPDATE CASCADE;
3.表orderitems的o_num字段是外键,取值来源于是orders表的o_num字段
ALTER TABLE orderitems
ADD FOREIGN KEY orderitems(o_num) REFERENCES orders(o_num)
ON DELETE CASCADE ON UPDATE CASCADE;
4.表orders的c_id字段是外键,取值来源于是customers表的c_id字段
ALTER TABLE orders
ADD FOREIGN KEY orders(c_id) REFERENCES customers(c_id)
ON DELETE CASCADE ON UPDATE CASCADE;
客户:C10000,对应customs表内的10000客户,任意主机地址
供货商:S100,对应suppliers表内的100供货商,任意主机地址
商家销售工作人员:B001,任意主机地址
管理员:A001,本机
源码:
CREATE USER 'C10000'@'%' IDENTIFIED BY '123456';
CREATE USER 'S100'@'%' IDENTIFIED BY '123456';
CREATE USER 'B001'@'%' IDENTIFIED BY '123456';
CREATE USER 'A001'@'localhost' IDENTIFIED BY '123456';
要求:
客户和供货商只能查看与之相关的信息,如C10000用户只可以查看customs表内关于自己的所有信息,可以修改(update)c_id和C_name以外的关于自己的基本信息,可以查看自己的购买信息(在订单order及详单表orderitems中);
同理设置供货商S100的相关权限;
商家销售工作人员B001可以查看并录入信息,但不能随意修改、删除信息;
管理员拥有所有权限。
源码:
客户:
视图:
CREATE VIEW c10000 AS SELECT* FROM customers WHERE c_id = 10000;
CREATE VIEW o10000 AS SELECT orderitems.*,orders.`o_date` FROM orderitems,orders WHERE orders.`c_id`=10000 AND orderitems.`o_num`=orders.`o_num`;
权限:
GRANT SELECT,UPDATE(c_address,c_city,c_zip,c_contact,c_email),
REFERENCES ON fruitshop.`c10000`TO'C10000'@'%';
GRANT SELECT ON fruitshop.`o10000`TO'C10000'@'%';
供货商:
视图:
CREATE VIEW s100 AS SELECT * FROM suppliers WHERE s_id=100;
CREATE VIEW f100 AS SELECT * FROM fruits WHERE s_id=100;
权限:
GRANT SELECT,UPDATE(s_city,s_zip,s_call),
REFERENCES ON fruitshop.`s100`TO'S100'@'%';
GRANT SELECT ON fruitshop.`f100`TO'S100'@'%';
商家销售工作人员:
视图:
CREATE VIEW ob001 AS SELECT * FROM orders;
CREATE VIEW ob002 AS SELECT * FROM orderitems;
权限:
GRANT SELECT,INSERT ON fruitshop.`ob001`TO'B001'@'%';
GRANT SELECT,INSERT ON fruitshop.`ob002`TO'B001'@'%';
管理员:
权限:
GRANT ALL ON fruitshop.* TO'A001'@'localhost';
测试要求:退出root帐号,重新登陆指定帐号,显示当前数据库中所有表,查看某张表内的所有信息,对某张表进行增、删、改操作并查看能否正确执行这些操作,如果执行错误请说明导致此错误的原因。
测试客户:
测试源码:
USE fruitshop;
SHOW TABLES;
SELECT*FROM c10000;
UPDATE c10000 SET c_address="泉州",c_city="泉州",c_zip=362000,
c_contact="xiuxiulin",c_email=NULL
WHERE c_id=10000;
SELECT*FROM c10000;
错误权限测试代码:
UPDATE c10000 SET c_id=20000
WHERE c_id=10000;
UPDATE c10000 SET c_name=20000
WHERE c_id=10000;
SELECT*FROM o10000;
测试截图:
没有的权限的截图: 客户没有修改(update)c_id和C_name的基本信息的权限
测试供货商:
测试源码:
USE fruitshop;
SHOW TABLES;
SELECT*FROM s100;
UPDATE s100 SET s_city="xiamen",s_zip="0362441",s_call="12345"
WHERE s_id=100;
SELECT*FROM s100;
SELECT*FROM f100;
错误权限代码:
UPDATE s100 SET s_id=20000
WHERE s_id=100;
UPDATE s100 SET s_name=20000
WHERE s_id=100;
没有的权限截图:供应商没有修改(update)s_id和s_name的基本信息的权限
测试商家销售工作人员:
测试源码:
USE fruiteshop;
SHOW TABLES;
SELECT*FROM Ob001;
INSERT INTO ob001 VALUES(40000,"2018-09-01 01:00:00",10001);
SELECT*FROM Ob001;
SELECT* FROM ob002;
INSERT INTO ob002 VALUES(40000,1,"a1",10,5.20);
SELECT* FROM ob002;
没有的权限的代码的测试:
SELECT* FROM ob001;
UPDATE ob001 SET c_id=100001 WHERE o_num=30001;
DELETE FROM ob001 WHERE o_num=30001;
SELECT* FROM ob002;
UPDATE ob002 SET f_id=a2 WHERE o_num=30001;
DELETE FROM ob002 WHERE o_num=30001;
测试截图:
出错的截图: 商家销售工作人员没有修改、删除信息的权限
测试管理员:
测试源码:
USE fruitshop;
SHOW TABLES;
UPDATE s100 SET s_zip='362441' WHERE s_id=100;
SELECT* FROM s100;
1.实验中遇到的问题及解决过程
这次好多噢,
首先是设置权限这一块当时没想到先设置视图再赋予权限,就纠结了一会,
知道了后又纠结视图怎么设置才好,
都弄好了后,发现自己居然忘了保存,又得重来一遍,
然后就是测试的时候没看到保留测试源码,结果等测试完后,又重新一遍,
真的就越急越乱越急越乱,
好在目前都完成了。
2.实验中产生的错误及原因分析
在测试的时候刚开始用命令行窗口,就一错不能回头,而且很少用命令行了,就很多语句忘了,要么就是少了分号啥的,就后面还是明智换成可视化。
3.实验体会和收获。
觉得自己通过这次实验,了解了建立视图,赋予权限,设置外键的完整性等过程,感觉受过到了蛮多的,遇到问题的过程就是学习的过程中,从错误中学习改进,感觉也更熟练了。