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)
);
(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]+$');
(1) 创建两个可以登录的本地用户: 王明,李勇。
(2) 完成以下的权限赋予:
① 用户王明对所有表均有select和insert的权力。
② 用户李勇对该数据库select,insert,delete, update和create权限。
进入后选择Add Account
创建好本地用户后,进入Schema Privileges
选择Add Entry
授予权限。
要求:首先创建职工表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';