要求:
1.请完成第四章习题6、7题,第五章习题6题。
题目:
第四章 数据库安全性
习题6.对下列两个关系模式∶
学生(学号,姓名,年龄,性别,家庭住址,班级号)
班级(班级号,班级名,班主任,班长)
使用GRANT语句完成下列授权功能∶
(1)授予用户U1对两个表的所有权限,并可给其他用户授权。
(2》授予用户U2对学生表具有查看权限,对家庭住址具有更新权限。
(3)将对班级表查看权限授予所有用户。
(4)将对学生表的查询、更新权限授予角色R1。
(5)将角色R1授予用户U1,并且 UI可继续授权给其他角色。
习题7.今有以下两个关系模式∶
职工(职工号,姓名,年龄,职务,工资,部门号)
部门(部门号,名称,经理名,地址,电话号)
请用 SQL的GRANT 和REVOKE 语句(加上视图机制)完成以下授权定义或存取控制功能∶
(1)用户主明对两个表有SELECT权限。
(2)用户李勇对两个表有 INSERT和DELETE权限。
(3)每个职工只对自己的记录有SELECT权限。
(4)用户刘星对职工表有SELECT权限,对工资字段具有更新权限。
(5)用户张新具有修改这两个表的结构的权限。
(6)用户周平具有对两个表的所有权限(读、插、改、删数据)。并具有给其他用户授权的权限。
(7)用户杨兰具有从每个部门职工中SELECT最高工资、最低工资、平均工资的权限,他不能查看
每个人的工资。
第五章 数据库完整性
习题6.假设有下面两个关系模式∶
职工(职工号,姓名,年龄,职务,工资,部门号),其中职工号为主码∶
部门(部门号,名称,经理名,电话),其中部门号为主码。
用SQL 语言定义这两个关系模式,要求在模式中完成以下完整性约束条件的定义∶
(1)定义每个模式的主码;
(2)定义参照完整性;
(3)定义职工年龄不得超过60岁。
实现内容及记录
第四章 数据库安全性
习题6.对下列两个关系模式∶
学生(学号,姓名,年龄,性别,家庭住址,班级号)
班级(班级号,班级名,班主任,班长)
-- 创建班级表
CREATE TABLE C(
cid CHAR(20) PRIMARY KEY,
cname VARCHAR(30) NOT NULL,
tc VARCHAR(30),
mc VARCHAR(30)
);
-- 创建学生表
CREATE TABLE S(
id CHAR(20) PRIMARY KEY,
sname VARCHAR(30) NOT NULL,
age INT,
sex CHAR(2),
address VARCHAR(100),
cid CHAR(20),
FOREIGN KEY (cid) REFERENCES C(cid)
);
CREATE USER U1 FOR LOGIN U_1; -- 新建用户U1
CREATE USER U2 FOR LOGIN U_2; -- 新建用户U2
CREATE ROLE R1; -- 新建角色R1
使用GRANT语句完成下列授权功能∶
(1)授予用户U1对两个表的所有权限,并可给其他用户授权。
GRANT ALL PRIVILEGES
ON C,S
TO U1
WITH GRANT OPTION;
一次授权在SqlServer2019中无法实现,通过分开执行实现:
-- 授权学生表给用户U1并允许给其他用户授权
GRANT ALL PRIVILEGES
ON C
TO U1
WITH GRANT OPTION;
-- 授权学生表给用户U1并允许给其他用户授权
GRANT ALL PRIVILEGES
ON S
TO U1
WITH GRANT OPTION;
(2)授予用户U2对学生表具有查看权限,对家庭住址具有更新权限。
GRANT SELECT,UPDATE(address)
ON S
TO U2;
(3)将对班级表查看权限授予所有用户。
GRANT SELECT
ON C
TO PUBLIC;
(4)将对学生表的查询、更新权限授予角色R1。
GRANT SELECT,UPDATE
ON S
TO R1;
(5)将角色R1授予用户U1,并且 UI可继续授权给其他角色。
课本上写的本应该实现的语句:
GRANT R1
TO U1
WITH GRANT OPTION;
在SQLserver2019中无法实现,使用下面的语句:
EXEC sp_addrolemember 'R1','U1';
习题7.今有以下两个关系模式∶
职工(职工号,姓名,年龄,职务,工资,部门号)
部门(部门号,名称,经理名,地址,电话号)
CREATE TABLE Department(
sdeptnum CHAR(6) PRIMARY KEY,
dname CHAR(5) NOT NULL,
manager CHAR(8) NOT NULL,
address CHAR(15),
tel CHAR(11)
);
CREATE TABLE Staff(
sno CHAR(11) PRIMARY KEY,
sname CHAR(10) UNIQUE NOT NULL,
sage INT,
sjob CHAR(5),
salary INT,
sdeptnum CHAR(6) REFERENCES Department(sdeptnum)
);
请用 SQL的GRANT 和REVOKE 语句(加上视图机制)完成以下授权定义或存取控制功能∶
(1)用户王明对两个表有SELECT权限。
GRANT SELECT
ON Staff
TO "王明";
GRANT SELECT
ON Department
TO "王明";
(2)用户李勇对两个表有 INSERT和DELETE权限。
GRANT INSERT,DELETE
ON Staff
TO "李勇";
GRANT INSERT,DELETE
ON Department
TO "李勇";
(3)每个职工只对自己的记录有SELECT权限。
-- 建立可查询的视图
CREATE VIEW USERS
AS
SELECT *
FROM Staff
WHERE Staff.Sno=USER;
-- 授权用户查询视图
GRANT SELECT
ON USERS
TO PUBLIC;
(4)用户刘星对职工表有SELECT权限,对工资字段具有更新权限。
GRANT SELECT,UPDATE(salary)
ON Staff
TO "刘星";
(5)用户张新具有修改这两个表的结构的权限。
GRANT ALTER
ON Staff
TO "张新";
GRANT ALTER
ON Department
TO "张新";
(6)用户周平具有对两个表的所有权限(读、插、改、删数据)。并具有给其他用户授权的权限。
GRANT ALL
ON Staff
TO "周平"
WITH GRANT OPTION;
GRANT ALL
ON Department
TO "周平"
WITH GRANT OPTION;
(7)用户杨兰具有从每个部门职工中SELECT最高工资、最低工资、平均工资的权限,他不能查看个人的工资。
-- 创建视图
CREATE VIEW Salary_D(dname,maxsal,minsal,avgsal)
AS
SELECT Department.dname,MAX(Staff.salary),MIN(Staff.salary),AVG(Staff.salary)
FROM Staff,Department
WHERE Staff.sno=Department.sdeptnum
GROUP BY Staff.sno,Department.dname;
-- 查询视图
SELECT * FROM Salary_D;
-- 授权视图的SELECT给杨兰
GRANT SELECT
ON Salary_D
TO "杨兰";
第五章 数据库完整性
习题6.假设有下面两个关系模式∶
CREATE TABLE Departments(
sdeptnum CHAR(6),
dname CHAR(5),
manager CHAR(8),
tel CHAR(11)
);
CREATE TABLE Staffs(
sno CHAR(11),
sname CHAR(10),
sage INT,
sjob CHAR(5),
salary INT
);
用SQL 语言定义这两个关系模式,要求在模式中完成以下完整性约束条件的定义∶
CREATE TABLE DEPARTMENT(
ID CHAR(15) PRIMARY KEY,
Name CHAR(10) UNIQUE NOT NULL,
Manager CHAR(10) NOT NULL,
Location SMALLINT,
PhoneNumber CHAR(11),
);
CREATE TABLE EMPIOYEE(
ID CHAR(15) PRIMARY KEY,
Name CHAR(10) NOT NULL,
Age SMALLINT CHECK(Age<=60),
Salary Money,
Job CHAR(20),
DepartmentId CHAR(15) FOREIGN KEY
REFERENCES Department(ID) ON DELETE CASCADE
);