数据库原理实验三——数据完整性与安全性控制
Posted Alfred young
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了数据库原理实验三——数据完整性与安全性控制相关的知识,希望对你有一定的参考价值。
实验目的
- 熟练掌握基本表的各种完整性定义的方法。
- 掌握用户的创建以及使用方法。
- 掌握SQL语句对数据库和表进行安全控制的方法。
实验内容
- 利用图形用户界面对Student库中,增加以下的约束和索引,并验证违反相关完整性时的数据库系统的违约处理。
(1) S表的非空约束:为出生日期添加非空约束。
(2) S表的主键约束:将学号(sno)设置为主键。
(3) S表的唯一约束:为姓名(sname)添加唯一约束(唯一键)。
(4) S表的缺省约束:为性别(sgender)添加默认值,其值为“男”。
- 利用图形用户界面针对Student库,给SC表添加外键约束,将sno,cno设置为外键,其引用表分别是S表和C表,外键名分别为:sc_fk_sno和sc_fk_cno。尝试不同的违反外键约束的策略并进行验证NO action/ restrict/ cascade/ set null。(10分)
NO ACTION
CASCADE
SET NULL
- 删除student库中的三张表,用SQL语言重新创建有以下约束的表。(10分)
- S表:基本约束要求同第1小题。
- C表:cpno是c表的外键,引用自C表的cno。
- SC表:外键约束如第2小题,同时要求成绩grade的有效值为[0,100]。另外,SC表增加新列id:将id设为主键,且自增字段,每次插入一条选课记录自动+1。
S表的创建
CREATE TABLE student.s (
SNO VARCHAR(45) NOT NULL,
SNAME VARCHAR(45) NULL,
SGENDER VARCHAR(45) NULL DEFAULT '男',
SBIRTH VARCHAR(45) NOT NULL,
SDEPT VARCHAR(45) NULL,
PRIMARY KEY (`SNO`),
UNIQUE INDEX `SNAME_UNIQUE` (`SNAME` ASC) VISIBLE);
C表的创建
CREATE TABLE student.c (
CNO VARCHAR(45) NOT NULL,
CNAME VARCHAR(45) NULL,
CPNO VARCHAR(45) NULL,
CREDIT INT NULL,
PRIMARY KEY (CNO),
FOREIGN KEY (CPNO) REFERENCES student.c (CNO)
);
SC表的创建
CREATE TABLE SC (
ID INT NOT NULL AUTO_INCREMENT,
SNO VARCHAR(45) NULL,
CNO VARCHAR(45) NULL,
GRADE INT NULL CHECK(GRADE >= 0 AND GRADE <= 100),
PRIMARY KEY (ID),
CONSTRAINT sc_fk_cno FOREIGN KEY (CNO) REFERENCES c (CNO),
CONSTRAINT sc_fk_sno FOREIGN KEY (SNO) REFERENCES s (SNO)
);
- 用SQL语言针对student库添加或者删除以下的完整性约束。(10分)
(1) 增加sgender的取值约束:S表中的sgender取值只能是“男”或“女”。
ALTER TABLE S
ADD CHECK(SGENDER IN ('男','女')
);
(2) 删除第(1)小题所创建的sgender取值约束。
ALTER TABLE S
DROP CONSTRAINT S_CHK_1;
(3) 删除SC表的外键约束。
ALTER TABLE SC
DROP CONSTRAINT sc_fk_cno,
DROP CONSTRAINT sc_fk_sno;
(4) 学生表S中增加新列tname(表示该学生的导师姓名),且要求导师名必须全部是字母(大写小写均可以)、且长度不能低于8个字符。
ALTER TABLE S
ADD COLUMN TNAME VARCHAR(45) NULL
CONSTRAINT C CHECK(char_length(TNAME) >= 8 AND TNAME like '^[A-Za-z]+$');
- 在图形用户界面中创建新用户并针对student数据库进行赋权。(20分)
(1) 创建两个可以登录的本地用户: 王明,李勇。
(2) 完成以下的权限赋予:
① 用户王明对所有表均有select和insert的权力。
② 用户李勇对该数据库select,insert,delete, update和create权限。
进入后选择Add Account
创建好本地用户后,进入Schema Privileges
选择Add Entry
授予权限。
- 用SQL语句授权和收回权限并对权限加以验证。(40分)
要求:首先创建职工表e和部门表d,表结构如下:
职工表e(职工号,姓名,年龄,职务,工资,部门号)
部门表d(部门号,名称,经理名,地址,电话号)
然后创建每道题中涉及的用户,针对每个小题先完成授权并进行权限验证,然后再收回权限并进行权限验证。
(1) 用户王明对两个表有查询权限。
CREATE USER 'wangming'@'localhost';
GRANT SELECT
ON TABLE e
TO 'wangming'@'localhost';
GRANT SELECT
ON TABLE d
TO 'wangming'@'localhost';
REVOKE SELECT
ON TABLE e
FROM 'wangming'@'localhost';
REVOKE SELECT
ON TABLE d
FROM 'wangming'@'localhost';
(2) 用户李勇对两个表有insert和delete权限。
CREATE USER 'liyong'@'localhost';
GRANT INSERT,DELETE
ON TABLE e
TO 'liyong'@'localhost';
GRANT INSERT,DELETE
ON TABLE d
TO 'liyong'@'localhost';
SHOW GRANTS FOR 'liyong'@'localhost';
REVOKE INSERT,DELETE
ON TABLE e
FROM 'liyong'@'localhost';
REVOKE INSERT,DELETE
ON TABLE d
FROM 'liyong'@'localhost';
(3) 每个职工只对自己的记录有查询权限。
CREATE VIEW view_employee
AS SELECT * FROM e
WHERE CONCAT(ENAME,'@localhost') = user();
GRANT SELECT ON view_employee TO 'wangming'@'localhost' , 'liyong'@'localhost' , 'liuxing'@'localhost' , 'zhangxin'@'localhost' , 'zhouping'@'localhost' , 'yanglan'@'localhost';
(4) 用户刘星对职工表有查询权限,对工资字段具有更新权限。
CREATE USER 'liuxing'@'localhost';
GRANT SELECT
ON TABLE e
TO 'liuxing'@'localhost';
GRANT UPDATE(salary)
ON TABLE d
TO 'liuxing'@'localhost';
REVOKE SELECT
ON TABLE e
FROM 'liuxing'@'localhost';
REVOKE UPDATE(salary)
ON TABLE d
FROM 'liuxing'@'localhost';
(5) 用户张新具有修改这两个表的结构的权限。
CREATE USER 'zhangxin'@'localhost';
GRANT ALTER
ON TABLE e
TO 'zhangxin'@'localhost';
GRANT ALTER
ON TABLE d
TO 'zhangxin'@'localhost';
REVOKE ALTER
ON TABLE e
FROM 'zhangxin'@'localhost';
REVOKE ALTER
ON TABLE d
FROM 'zhangxin'@'localhost';
(6) 用户周平具有对两个表的所有权限,并具有给其他用户授权的权限。
CREATE USER 'zhouping'@'localhost';
GRANT ALL
ON TABLE e
TO 'zhouping'@'localhost'
WITH GRANT OPTION;
GRANT ALL
ON TABLE d
TO 'zhouping'@'localhost'
WITH GRANT OPTION;
REVOKE ALL PRIVILEGES
ON TABLE e
FROM 'zhouping'@'localhost';
REVOKE ALL PRIVILEGES
ON TABLE d
FROM 'zhouping'@'localhost';
REVOKE GRANT OPTION
ON TABLE e
FROM 'zhouping'@'localhost';
REVOKE GRANT OPTION
ON TABLE d
FROM 'zhouping'@'localhost';
(7) 用户杨兰具有从每个部门职工中查询最高工资,最低工资,平均工资的权限,他不能查看每个人的工资。
CREATE VIEW view_yanglan
AS SELECT max(salary),min(salary),avg(salary)
FROM e;
CREATE USER 'yanglan'@'localhost';
GRANT SELECT
ON view_yanglan
TO 'yanglan'@'localhost';
REVOKE SELECT
ON view_yanglan
FROM 'yanglan'@'localhost';
以上是关于数据库原理实验三——数据完整性与安全性控制的主要内容,如果未能解决你的问题,请参考以下文章