實驗三  數據庫的安全性和完整性控制

 

 

 

實驗名稱

實驗三  數據庫的安全性和完整性控制

實驗教室

913

實驗日期

 2018年10月22日

學    號

2016214220

姓    名

**

專業班級

計算機科學與技術2016級 *班

指導教師

王阿川

 

 

 

 

 

 

東北林業大學

信息與計算機科學技術實驗中心

 

 

一、實驗目的

(1)通過本實驗能夠熟練應用sql語言進行用戶權限的授予和回收。

(2) 熟練掌握實體完整性,參照完整性及用戶定義的完整性的定義。

(3)體會oracle數據庫系統在安全性和完整性保護方面的特性。

二、實驗環境

計算機

windows7操作系統,

Oracle 11g, SQL Developer

三、實驗內容及結果

  • 授權
  1. 創建用戶”S學號u1”,S學號u2,S學號u3,S學號U4,併爲其賦予connect角色。

其中,學號是指你的學號,比如你的學號爲20130001,則你創建的用戶應該是S20130001u1,S20130001u2,S20130001u3,S20130001u4

create user  s2016214220u1 identified by nefu1234;

create user  s2016214220u2 identified by nefu1234;

create user  s2016214220u3 identified by nefu1234;

create user  s2016214220u4 identified by nefu1234;

  1. 假設你的用戶名是S20130001(做實驗時請根據你的賬號修改),把你在數據庫中創建的Student表的查詢權限授給用戶”S學號u1”, ”S學號u1”執行相應的查詢。
    grant select

on s2016214220.student

to s2016214220u1

(1)查詢S20130001用戶的Student表中全體學生的詳細記錄

select * from student

 

 

 

(2)查詢S20130001用戶Student表中所有姓劉的學生的姓名、學號和性別。
select sno,sname,ssex from s2016214220.student where sname like '劉%';

(3)查詢S20130001用戶Student表中名字中第二字爲“陽”字的學生的姓名和學號。
select sname,sno from s2016214220. student

where sname like '_陽%';

  1. 把S20130001用戶的Student表和Course表的全部權限授予用戶”S學號u2”, ”S學號u3”;然後讓”S學號u2”用戶修改S20130001的數據。
    GRANT all  privileges

     ON s2016214220.student

   TO s2016214220u2,s2016214220u3;

 GRANT all  privileges

 ON s2016214220.course

 TO s2016214220u2,s2016214220u3;

 

修改:
DELETE FROM s2016214220.student WHERE s2016214220.student.sname = '李陽'

 

  1. 把S20130001用戶的表Student的修改學生學號的權限賦予用戶” S學號U4”,然後讓S20130001用戶修改S20130001的student表的SNO數據。
    grant alter

on student to s2016214220u4;

grant delete

on student to s2016214220u4;

grant update

on student to s2016214220u4;

grant insert

on student to s2016214220u4;

  1. 把S20130001用戶的SC表的插入權限授予“S學號U5”用戶,然後讓“S學號U5”用戶向SC表插入一條記錄。
    create user s2016214220u5 IDENTIFIED BY nefu1234;

grant insert

on s2016214220.sc to s2016214220u5;

insert into sc values(200215126,7,85);

  1. 把對錶SC的查詢權限授予所有用戶。

(1)讓“S學號u2”用戶查詢S20130001用戶的SC表中選修了3號課程的學生的學號及其成績,查詢結果按分數的降序排列
      grant select

on s2016214220.sc

to public


select sno,grade

from s2016214220sc

where cno='3'

order by grade desc

(2)讓“S學號u2”用戶查詢S20130001用戶的SC表中各個課程號與相應的人數。

       select cno,count(*)

from s2016214220.sc

group by cno;

 

(首先應該以新創建的用戶的身份重新登陸數據庫,然後再進行授權)

  • 回收權限

1.收回用戶”S學號u2”修改學生學號的權限
revoke alter

on student

from s2016214220u2
 

  1. 收回所有用戶對錶sc的查詢權限

 revoke select

on sc

from public


 

3.收回用戶”S學號U5”sc表的insert權限
  revoke insert

on sc

from s2016214220u5
 

4.在回收權限之後驗證用戶是否真正喪失了該權限(查詢表,插入記錄)
select * from sc
 

  • 角色
  1. 創建一個角色
     create role we

給角色授予權限
      grant select on sc  to wt

 

將角色授予某一用戶
  grant we to public

  1. 檢查用戶是否具有相應的權限
     select * from sc

     
  • 完整性

1建立教師表Teacher,要求教師名稱Tname列取值唯一,教師編號TNO列爲主碼。
 CREATE TABLE teacher

         (tno   varchar2(10)  primary key ,

            tname  varchar2(10)  unique

          );

2建立學生登記表Student,要求學號在90009999之間,年齡<29,性別只能是,姓名非空。

 

3修改表Student的結構,由年齡小於29改爲小於40
alter table stu modify sage check(sage<49);

 

  1. 建立課程表COURSE,要求課程表中的每門課程的學分不得超過7分,且主講教師字段TNO參照TeacherTNO字段,且當刪除教師表中一行記錄時,如果它被參照,則將Course表中相應記錄中TNO的值設置爲空。
    create table course1(

cno varchar2(4) constraint pk_c primary key,

cname varchar2(10),

tno varchar2(10) constraint fk_c_t references teacher(tno) On Delete Set NULL,

credit number(3) check (credit<=7)

);

  1. 建立表SC,要求SNO參照STUDENT表的學號,且當刪除Student表中的一個學生記錄時,級聯刪除學生的選課記錄。
    create table sc1(

cno varchar2(4) REFERENCES course1(cno) On Delete Cascade,

sno char(10)REFERENCES stu(sno) On Delete Cascade,

grade number(3),

primary key(cno,sno)

);

 

 

 

 

對上述新建立和修改定義的表,每個表輸入3條數據,其中1條數據符合完整性約束,2條違反約束條件的,驗證和體會Oracle的實體完整性和參照完整性。

 

 

 

 

四、實驗過程分析與討論

創建的用戶成爲該角色的成員,並授予一定的操作權限時,無法找到到哪兒去進 行權限設置,最後通過百度搜索找到如何設置角色的權限

 

五、指導教師意見

        

指導教師簽字: 

                                        2018 年 10月 25 日

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章