-- 初始化
USE Homework250403;
Go
CREATE SCHEMA Q7;
Go
CREATE TABLE Q7.职工 (
                         职工号 VARCHAR(10) PRIMARY KEY,
                         姓名 VARCHAR(20) NOT NULL,
                         年龄 INT,
                         职务 VARCHAR(20),
                         工资 DECIMAL(10, 2),
                         部门号 VARCHAR(10)
);
CREATE TABLE Q7.部门 (
                         部门号 VARCHAR(10) PRIMARY KEY,
                         名称 VARCHAR(50) NOT NULL,
                         经理名 VARCHAR(20),
                         地址 VARCHAR(100),
                         电话号 VARCHAR(20)
);
ALTER TABLE Q7.职工
    ADD CONSTRAINT FK_职工_部门 FOREIGN KEY (部门号) REFERENCES Q7.部门(部门号);
Go
CREATE LOGIN 王明 WITH PASSWORD = 'Password123!';
CREATE USER 王明 FOR LOGIN 王明;
CREATE LOGIN 李勇 WITH PASSWORD = 'Password123!';
CREATE USER 李勇 FOR LOGIN 李勇;
CREATE LOGIN 刘星 WITH PASSWORD = 'Password123!';
CREATE USER 刘星 FOR LOGIN 刘星;
CREATE LOGIN 张新 WITH PASSWORD = 'Password123!';
CREATE USER 张新 FOR LOGIN 张新;
CREATE LOGIN 周平 WITH PASSWORD = 'Password123!';
CREATE USER 周平 FOR LOGIN 周平;
CREATE LOGIN 杨兰 WITH PASSWORD = 'Password123!';
CREATE USER 杨兰 FOR LOGIN 杨兰;
Go

-- 1. 用户王明对两个表有SELECT权限
GRANT SELECT ON Q7.职工 TO 王明;
GRANT SELECT ON Q7.部门 TO 王明;
Go
-- 2. 用户李勇对两个表有INSERT和DELETE权限
GRANT INSERT, DELETE ON Q7.职工 TO 李勇;
GRANT INSERT, DELETE ON Q7.部门 TO 李勇;
Go
-- 3. 每个职工只对自己的记录有SELECT权限
CREATE VIEW Q7.职工个人视图 AS
SELECT 职工号, 姓名, 年龄, 职务, 工资, 部门号
FROM Q7.职工
WHERE 姓名 = CURRENT_USER;
Go
GRANT SELECT ON Q7.职工个人视图 TO PUBLIC;
Go
-- 4. 用户刘星对职工表有SELECT权限，对工资字段具有更新权限
GRANT SELECT ON Q7.职工 TO 刘星;
GRANT UPDATE (工资) ON Q7.职工 TO 刘星;
Go
-- 5. 用户张新具有修改这两个表的结构的权限
GRANT ALTER ON SCHEMA::Q7 TO 张新;
Go
-- 6. 用户周平具有对两个表的所有权限，并具有给其他用户授权的权限
GRANT SELECT, INSERT, UPDATE, DELETE ON Q7.职工 TO 周平 WITH GRANT OPTION;
GRANT SELECT, INSERT, UPDATE, DELETE ON Q7.部门 TO 周平 WITH GRANT OPTION;
Go
-- 7. 用户杨兰具有从每个部门职工中SELECT的权限
CREATE VIEW Q7.部门职工视图 AS
SELECT 职.*, 部.名称 AS 部门名称
FROM Q7.职工 职
         JOIN Q7.部门 部 ON 职.部门号 = 部.部门号;
Go
GRANT SELECT ON Q7.部门职工视图 TO 杨兰;
Go