數據庫——SQL-SERVER練習(6) 數據庫安全性


一、實驗准備

(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
)

 


建立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)
)

 


建立READER的語句截圖:

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

 


建立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)
)

 

 2. 為用戶 'ZhangPing' 創建了一個密碼為'Rose'的 SQL Server 登錄
語法格式:  EXEC sp_addlogin  '用戶名', '密碼'  

EXEC sp_addlogin  'ZhangPing', 'Rose'  

 


3. 將用戶 ZhangPing 添加到當前數據庫
語法格式:   EXEC sp_adduser '用戶名'

 EXEC sp_adduser 'ZhangPing'

 


4. 將PUBLISHER表的查詢權,插入權授予PUBLIC
(注意SQL SERVER與教材不同:授權語句中要去掉關鍵字TABLE 一次只能對一個表授權)

GRANT SELECT , INSERT
ON PUBLISHER
TO PUBLIC

 


5. 將BOOK所有權授予ZhangPing

GRANT ALL
ON BOOK
TO ZhangPing

 



6. 將READER的查詢權授予ZhangPing

GRANT SELECT
ON READER
TO ZhangPing

 



7. 將LOAN的插入權刪除權授予ZhangPing

GRANT SELECT,DELETE
ON LOAN
TO ZhangPing

 



8. 將READER的查詢權修改權授予ZhangPing

GRANT SELECT,UPDATE
ON READER
TO ZhangPing

 



9. 將LOAN的刪除權從ZhangPing收回

REVOKE DELETE
ON LOAN
TO ZhangPing

 



10重新以ZhangPing登錄 ( 查詢分析器選擇文件菜單的”連接”, 輸入用戶名ZhangPing,  密碼Rose)
登錄后, 注意將當前數據庫選擇為”STUDB”。
登錄后更改密碼, 將密碼'Rose'改為 'coffee'
格式:   EXEC sp_password '舊密碼', '新密碼'

EXEC sp_password 'Rose', 'coffee'

 



11.  對PUBLISHER插入1行數據。
對BOOK插入1行數據
SQL語句執行截圖:

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


 

INSERT
INTO BOOK
VALUES('159317','數據庫系統概論',42.00,'王珊,薩師煊','123456');



12. 查詢BOOK所有數據 。

SELECT *
FROM BOOK


 


13. 查詢LOAN所有數據,  報錯(未被授權查詢)

拒絕了對對象 'LOAN'(數據庫 'STUDB',所有者 'dbo')的 SELECT 權限。


14. 插入一行READER數據,  報錯(未被授權查詢)

拒絕了對對象 'READER'(數據庫 'STUDB',所有者 'dbo')的 INSERT 權限。


15. 建立一個班級表CLASS, 有班號,班名列,  報錯(無權建表)

服務器: 消息 262,級別 14,狀態 1,行 1
在數據庫 'STUDB' 中拒絕了 CREATE TABLE 權限。

16、重新以DBA登錄 (注意當前數據庫是STUDB)
對STUDENT表的Sdept建立普通索引

CREATE INDEX STUDEPT ON STUDENT(SDEPT)

 

 
17、對COURSE表的CNAME建立唯一索引
SQL語句執行截圖:

CREATE UNIQUE INDEX COURSENAME ON COURSE(CNAME)

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 


注意!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系我们删除。



 
粤ICP备14056181号  © 2014-2021 ITdaan.com