数据库——SQL-SERVER练习(6) 数据库安全性

时间:2021-01-10 13:24:09

一、实验准备

(1)运行SQL-SERVER服务管理器, 启动服务
(2)运行查询分析器,  以DBA身份登录数据库服务器:
     用户名sa,  密码123456
(3)打开CREATE-TABLE.SQL并执行, 建立有关表.

CREATE-TABLES.SQL”文件 https://www.cnblogs.com/wkfvawl/p/10843788.html

二 实验内容

1. 建立图书管理有关表,要求有完整性约束(实体,参照,用户定义):
注意: 外码与对应主码的类型一致!
出版社( 出版社号, 出版社名) 主码?
   PUBLISHER(PNO,PNAME)
图书(书号,书名,价格,作者,  出版社号) 主码?外码?
   BOOK(BNO,TITLE, PRICE, AUTHOR , PNO)  
读者(读者号,姓名,性别,年龄)主码?
   READER(RNO,NAME, AGE, SEX)
借阅(读者号,书号,借日期,还日期)  日期类型DATETIME,主码?外码?
   LOAN(RNO, BNO, LOANDATE, RETURNDATE)
数据类型:
CHAR(n)   字符型 
INT        整型
NUMERIC ( 精度,小数位数)     实型  精度是总有效位数
DATETIME      日期型

建立PUBLISHER的语句截图:

CREATE TABLE PUBLISHER
(
    PNO CHAR(10) PRIMARY KEY,
    PNAME CHAR(20) NOT NULL
)

数据库——SQL-SERVER练习(6) 数据库安全性

 


建立BOOK的语句截图:

CREATE TABLE BOOK
(
    BNO CHAR(10) PRIMARY KEY,
    TITLE CHAR(40) NOT NULL,
    PRICE NUMERIC(5,2) NOT NULL,
    AUTHOR CHAR(20) NOT NULL,
    PNO CHAR(10) REFERENCES PUBLISHER(PNO)
)

数据库——SQL-SERVER练习(6) 数据库安全性

 


建立READER的语句截图:

CREATE TABLE READER
(
    RNO CHAR(10) PRIMARY KEY,
    RNAME CHAR(20) NOT NULL,
    AGE INT NOT NULL,
    SEX CHAR(20) CHECK (SEX IN ('',''))
)

数据库——SQL-SERVER练习(6) 数据库安全性

 


建立LOAN的语句截图(约束还书日期>=借书日期,
    (CHECK约束涉及多个列, 用元组级CHECK实现)

CREATE TABLE LOAN
(
    RNO CHAR(10),
    BNO CHAR(10),
    LOANDATE DATETIME,
    RETURNDATE DATETIME,
    PRIMARY KEY(RNO,BNO),
    FOREIGN KEY (RNO) REFERENCES READER(RNO),
    FOREIGN KEY (BNO) REFERENCES BOOK (BNO),
    CHECK (RETURNDATE>=LOANDATE)
)

数据库——SQL-SERVER练习(6) 数据库安全性

 

 2. 为用户 'ZhangPing' 创建了一个密码为'Rose'的 SQL Server 登录
语法格式:  EXEC sp_addlogin  '用户名', '密码'  

EXEC sp_addlogin  'ZhangPing', 'Rose'  

数据库——SQL-SERVER练习(6) 数据库安全性

 


3. 将用户 ZhangPing 添加到当前数据库
语法格式:   EXEC sp_adduser '用户名'

 EXEC sp_adduser 'ZhangPing'

数据库——SQL-SERVER练习(6) 数据库安全性

 


4. 将PUBLISHER表的查询权,插入权授予PUBLIC
(注意SQL SERVER与教材不同:授权语句中要去掉关键字TABLE 一次只能对一个表授权)

GRANT SELECT , INSERT
ON PUBLISHER
TO PUBLIC

数据库——SQL-SERVER练习(6) 数据库安全性

 


5. 将BOOK所有权授予ZhangPing

GRANT ALL
ON BOOK
TO ZhangPing

数据库——SQL-SERVER练习(6) 数据库安全性

 



6. 将READER的查询权授予ZhangPing

GRANT SELECT
ON READER
TO ZhangPing

数据库——SQL-SERVER练习(6) 数据库安全性

 



7. 将LOAN的插入权删除权授予ZhangPing

GRANT SELECT,DELETE
ON LOAN
TO ZhangPing

数据库——SQL-SERVER练习(6) 数据库安全性

 



8. 将READER的查询权修改权授予ZhangPing

GRANT SELECT,UPDATE
ON READER
TO ZhangPing

数据库——SQL-SERVER练习(6) 数据库安全性

 



9. 将LOAN的删除权从ZhangPing收回

REVOKE DELETE
ON LOAN
TO ZhangPing

数据库——SQL-SERVER练习(6) 数据库安全性

 



10重新以ZhangPing登录 ( 查询分析器选择文件菜单的”连接”, 输入用户名ZhangPing,  密码Rose)
登录后, 注意将当前数据库选择为”STUDB”。
登录后更改密码, 将密码'Rose'改为 'coffee'
格式:   EXEC sp_password '旧密码', '新密码'

EXEC sp_password 'Rose', 'coffee'

数据库——SQL-SERVER练习(6) 数据库安全性

 



11.  对PUBLISHER插入1行数据。
对BOOK插入1行数据
SQL语句执行截图:

INSERT
INTO PUBLISHER(PNO,PNAME)
VALUES('123456','清华大学出版社')


数据库——SQL-SERVER练习(6) 数据库安全性

 

INSERT
INTO BOOK
VALUES('159317','数据库系统概论',42.00,'王珊,萨师煊','123456');

数据库——SQL-SERVER练习(6) 数据库安全性



12. 查询BOOK所有数据 。

SELECT *
FROM BOOK


数据库——SQL-SERVER练习(6) 数据库安全性

 


13. 查询LOAN所有数据,  报错(未被授权查询)
数据库——SQL-SERVER练习(6) 数据库安全性
拒绝了对对象 'LOAN'(数据库 'STUDB',所有者 'dbo')的 SELECT 权限。


14. 插入一行READER数据,  报错(未被授权查询)
数据库——SQL-SERVER练习(6) 数据库安全性
拒绝了对对象 'READER'(数据库 'STUDB',所有者 'dbo')的 INSERT 权限。


15. 建立一个班级表CLASS, 有班号,班名列,  报错(无权建表)
数据库——SQL-SERVER练习(6) 数据库安全性
服务器: 消息 262,级别 14,状态 1,行 1
在数据库 'STUDB' 中拒绝了 CREATE TABLE 权限。

16、重新以DBA登录 (注意当前数据库是STUDB)
对STUDENT表的Sdept建立普通索引

CREATE INDEX STUDEPT ON STUDENT(SDEPT)

数据库——SQL-SERVER练习(6) 数据库安全性

 

 
17、对COURSE表的CNAME建立唯一索引
SQL语句执行截图:

CREATE UNIQUE INDEX COURSENAME ON COURSE(CNAME)

数据库——SQL-SERVER练习(6) 数据库安全性