第一篇:數(shù)據(jù)庫安全性實驗報告
實驗報告
一、實驗題目
數(shù)據(jù)庫安全性
二、實驗要求
1)新建一個登陸名為tom,密碼為tom001的登陸帳戶,登陸后用戶名為user_tom,默認情況下該用戶具有哪些權(quán)限?
2)授予該用戶對Student表的查詢權(quán)限,同時授予其進一步授權(quán)其他用戶的權(quán)利。
3)新建一個登陸名為marry,密碼為marry001的登陸帳戶,登陸后用戶名為user_marry。
4)以tom001登陸,將對Student表的查詢權(quán)限賦予marry,但不加withgrant option參數(shù)。
5)以marry001登陸,嘗試將對Student表的查詢權(quán)限授權(quán)給用戶guest。
6)新建角色dbnormuser,同時將marry用戶指定該角色,授予該角色對Student表的查詢權(quán)限,再重新執(zhí)行第5步,結(jié)果如何?
7)使用sp_addsrvrolemember系統(tǒng)存儲過程將marry用戶指定sysadmin固定服務(wù)器角色,再重新執(zhí)行第5步,結(jié)果如何?
三、實驗內(nèi)容
按照要求我首先建立了一個模式,1)createlogin tom with password='tom001'
usestudent_course
go
createuser user_tom from login tom with grant option
僅可以對student_course數(shù)據(jù)庫訪問,但是不能訪問里面的表格。
2)use student_course
go
grant select on Student to user_tom
3)createlogin marry with password='marry001'
use student_course
go
create user user_marry from login marry
4)use student_course
go
grant select on Student to user_marry
5)無法授權(quán)
use student_course
go
grant select on Student to guest
6)create role dbnormuser
grant select on Student to dbnormuser
grant dbnormuser
to user_marry可以授權(quán)了
7)又不能授權(quán)了
四、實驗心得
第二篇:數(shù)據(jù)庫的安全性實驗報告
西 安 郵 電 大 學
實
驗:課程 班
級 學號 學生姓名 任課教師(計算機學院)
課內(nèi)實驗報告
數(shù)據(jù)庫的安全性試驗
數(shù)據(jù)庫原理及應(yīng)用B
網(wǎng)絡(luò)1203
孟彩霞
:::::
一、實驗目的(1)理解SQL Server 2000驗證用戶身份的過程,掌握設(shè)置身份驗證模式的方法。(2)理解登錄賬號的概念,掌握混合認證模式下登錄賬號的建立與取消方法。(3)掌握混合認證模式下數(shù)據(jù)庫用戶的建立與取消方法。(4)掌握數(shù)據(jù)庫用戶權(quán)限的設(shè)置方法。
(5)理解角色的概念,掌握管理的角色技術(shù)。
二、實驗內(nèi)容
(1)在企業(yè)管理器中打開“SQL Server屬性(配置)”對話框,設(shè)置身份驗證模式為“SQL Server”和“Windows”模式(即混合模式)。(2)創(chuàng)建、管理數(shù)據(jù)庫服務(wù)器的登錄賬號。(3)創(chuàng)建、管理數(shù)據(jù)庫用戶。(4)管理用戶權(quán)限。
(5)創(chuàng)建、管理數(shù)據(jù)庫角色。
三、實驗環(huán)境
SQL Server 2008版本。
四、實驗前準備
仔細預習實驗內(nèi)容,理解實驗步驟。
五、實驗步驟
1.在企業(yè)管理器中打開“SQL Server屬性(配置)”對話框,設(shè)置身份驗證模式為“SQL Server”和“Windows”模式(即混合模式)。
2.創(chuàng)建、管理數(shù)據(jù)庫服務(wù)器的登錄賬號。用T-SQL語句創(chuàng)建、查看、刪除登錄賬號。
創(chuàng)建一個名為Student、密碼為111、使用的默認數(shù)據(jù)庫為JWGL的登錄賬號。EXEC sp_addlogin ‘student’,’111’,’JWGL’ 查看登錄賬號
EXEC sp_helplogins 刪除登錄賬號為EXEC sp_droplogins ‘student’
3.創(chuàng)建、管理數(shù)據(jù)庫用戶。
用T-SQL語句創(chuàng)建、查看、刪除數(shù)據(jù)庫用戶。
為數(shù)據(jù)庫JWGL創(chuàng)建一個用戶user1,該用戶登錄SQL Server服務(wù)器的賬號為wang,登錄密碼為secret,相應(yīng)的程序代碼為: EXEC sp_addlogin ‘wang’, ‘secret’, ‘JWGL’ GO EXEC sp_grantdbaccess ‘wang’, ‘user1’ 查看數(shù)據(jù)庫用戶為EXEC sp_helpuser 刪除數(shù)據(jù)庫中的“wang”用戶為EXEC sp_revokedbaccess ‘wang’
4.管理用戶權(quán)限。
使用T-SQL語句完成第3章習題12中(1)~(3)的用戶管理和用戶權(quán)限管理。企業(yè)管理器:
(1)允許用戶李明對Orders表進行插入、刪除操作。
GRANT INSERT ,DELETE ON Orders TO ‘李明’(2)將查詢Goods表和修改單價的權(quán)限授予用戶李四。
GRANT UPDATE(Price),SELECT ON Goods TO ‘李四’
(3)將查詢Goods表的權(quán)限授予用戶文云龍,并允許他將此權(quán)限授予他人。
GRANT SELECT ON Goods TO ‘文云龍’
WITH GRANT OPTION
5.創(chuàng)建、管理數(shù)據(jù)庫角色。
如一個小組共3個成員,他們對JWGL具有相同的操作權(quán)限,具體權(quán)限為對Student,Course表只能進行數(shù)據(jù)查詢;對SC表可以進行查詢、修改、刪除和插入。
可以創(chuàng)建一個角色(如role),給該角色賜予相應(yīng)的權(quán)限,然后給每個成員建立一個登錄賬號(如分別為lin,wang,zheng),并將每個成員的登錄賬號添加為數(shù)據(jù)庫角色role的成員。其代碼如下: EXEC sp_addrole ‘role’
GO GRANT SELECT ON Student,course TO role
GRANT SELECT,UPDATE,DELETE,INSERT ON SC TO role GO EXEC sp_addrolemember ‘role’, ‘lin’ EXEC sp_addrolemember ‘role’, ‘wang’ EXEC sp_addrolemember ‘role’, ‘zheng’
刪除角色role,然后再使用企業(yè)管理器完成以上任務(wù)。刪除角色role時,必須保證它不包含任務(wù)數(shù)據(jù)庫用戶,即要先刪除其下的所有成員。
EXEC sp_droprolemember ‘role’, ‘lin’ EXEC sp_droprolemember ‘role’, ‘wang’ EXEC sp_droprolemember ‘role’, ‘zheng’ GO EXEC sp_droprole ‘role’
六、實驗步驟及部分結(jié)果截圖
1.混合登陸
2.創(chuàng)建一個名為Student、密碼為111、使用的默認數(shù)據(jù)庫為JWGL的登錄賬號。
EXEC sp_addlogin ‘student’,’111’,’JWGL’
查看登錄賬號
EXEC sp_helplogins
3.為數(shù)據(jù)庫JWGL創(chuàng)建一個用戶user1,該用戶登錄SQL Server服務(wù)器的賬號為wang,登錄密碼為secret
查看數(shù)據(jù)庫用戶:
刪除數(shù)據(jù)庫中的“wang”用戶:
4.(1)允許用戶李明對Orders表進行插入、刪除操作:
2)將查詢Goods表和修改單價的權(quán)限授予用戶李四:
3)將查詢Goods表的權(quán)限授予用戶王二,并允許他將此權(quán)限授予他人
5.創(chuàng)建一個角色(如role),給該角色賜予相應(yīng)的權(quán)限,然后給每個成員建立一個登錄賬號(如分別為lin,wang,zheng),并將每個成員的登錄賬號添加為數(shù)據(jù)庫角色role的成員
將lin,wang,zheng加為角色成員:
刪除角色role,然后再使用企業(yè)管理器完成以上任務(wù)
七、心得體會
此次實驗是最后一次實驗,所以倍加珍惜,本應(yīng)該一次性在實驗室完成的,但中途有事耽誤了點時間,所以又在自己電腦上重新做的,以前做實驗都沒特別認真地做過,有點心理障礙,但當自己真正認認真真做的時候,會發(fā)現(xiàn)其實不難,時間也會過的好快,圓滿的結(jié)束了最后一次實驗,卻不會結(jié)束與數(shù)據(jù)庫的緣分,以后的日子里,我會繼續(xù)深究這門學科的。
第三篇:實驗三 數(shù)據(jù)庫安全性實驗報告
一 實驗目的1.熟悉通過SQL語句對數(shù)據(jù)進行安全性控制;
2.針對具體應(yīng)用要求,完成授權(quán)和收回權(quán)限的操作;
二 實驗工具SQL Server 2005
利用SQL Server 2005 SSMS及其SQL查詢編輯器。
三 實驗內(nèi)容和要求
使用SQL對數(shù)據(jù)進行安全性控制,包括:授權(quán)和權(quán)力回收。操作完成后看看已授權(quán)的用戶是否真正具有授予的數(shù)據(jù)操作的權(quán)力了;權(quán)力收回操作之后的用戶是否確實喪失了收回的數(shù)據(jù)操作的權(quán)力。根據(jù)以上要求認真填寫實驗報告,記錄所有的實驗用例。具體操作可以參照課件中的實例。
具體操作內(nèi)容:
創(chuàng)建以下兩個關(guān)系模式,并分別插入相應(yīng)的數(shù)據(jù)。
職工(職工號,姓名,年齡,職務(wù),工資,部門號)
部門(部門號,名稱,經(jīng)理名,地址,電話號碼)
(1)請用SQL的Grant和Revoke語句(加上視圖機制)完成以下授權(quán)定義或存取控制功能,并進行相應(yīng)的安全性測試;
(a)用戶王明對兩個表有select權(quán)力;
(b)用戶李勇對兩個表有insert和delete權(quán)力;
(c)每個職工只對自己的記錄有select權(quán)力;
(d)用戶劉星對職工表有select權(quán)力,對工資字段具有更新權(quán)力;
(e)用戶張新具有修改這兩個表的結(jié)構(gòu)的權(quán)力;
(f)用戶周平具有對兩個表所有權(quán)力(對,插,改,刪數(shù)據(jù)),并具有給其他用戶授權(quán)的權(quán)利;
(g)用戶楊蘭具有從每個部門職工中select最高工資,最低工資,平均工資的權(quán)力,他不能查看每個人的工資。
(2)把上面(a)~(g)的每一種情況,撤銷各用戶所授予的權(quán)力。
四 實驗報告
4.1 實驗環(huán)境:
Windows XP
MicrosoftSQL server Management Studio 2005
4.2 實驗內(nèi)容與完成情況:
--新建數(shù)據(jù)庫
create database work
go
use work
--創(chuàng)建以下兩個關(guān)系模式,并分別插入相應(yīng)的數(shù)據(jù)。
--Worker(職工號,姓名,年齡,職務(wù),工資,部門號)
go
create table Worker(職工號 varchar(10),姓名 char(10),年齡 int,職務(wù) char(15),工資 int,部門號 char(50))
--Section(部門號,名稱,經(jīng)理名,地址,電話號碼)
create table Section(職工號 char(10),名稱 char(10),經(jīng)理名 char(10),地址 char(50),電話 char(15));
go
--插入部門信息
insert into Section values('a001','市場部門','李永','白理工','***');
insert into Section values('a002','營銷部門','李剛','白理工','***');
--插入職工信息
insert into Worker values('a001001','王明',20,'市場營銷員',2000,'a001');
insert into Worker values('a001002','李村',29,'市場營銷員',2000,'a001');
insert into Worker values('a001003','李永',20,'經(jīng)理',5000,'a001');
insert into Worker values('a002001','羅杰',18,'銷售員',2000,'a002');
insert into Worker values('a002002','李紅',24,'銷售員',2000,'a002');
insert into Worker values('a002003','李剛',32,'經(jīng)理',5000,'a002');
--查詢部門表和職工表的數(shù)據(jù)
select *from Worker;
select *from Section;
--授權(quán)
use work
go
--(a)用戶王明對兩個表有select權(quán)力;
create login [王明] with password=N'1234';
create user [王明] for login [王明];
grant select on Worker to [王明];
grant select on Section to [王明];
--插入數(shù)據(jù)權(quán)限測試
insert into Worker values('a002004','羅紅',28,'銷售助理',4000,'a002');
--查詢數(shù)據(jù)權(quán)限測試
select *from Worker;
--(b)用戶李勇對兩個表有insert和delete權(quán)力;
use work
go
create login [李勇] with password=N'1234';
create user [李勇] for login [李勇];
grant insert,delete on Worker to [李勇];
grant insert,delete on Section to [李勇];
--插入數(shù)據(jù)權(quán)限測試
insert into Worker values('a002005','羅莉',52,'銷售助理',4000,'a002');
--查詢數(shù)據(jù)權(quán)限測試
select *from Worker;
--刪除權(quán)限測試
delete Worker from where 職工號='a002001';
--(c)每個職工只對自己的記錄有select權(quán)力;
use work
go
create view Myself as select * from Worker
where 姓名=user;
grant select on Myself to public;
--(d)用戶劉星對職工表有select權(quán)力,對工資字段具有更新權(quán)力;
use work
go
create login [劉星] with password=N'1234';
create user [劉星] for login [劉星];
grant select,update(工資)on Worker to [劉星];
--更新修改權(quán)限測試
update Worker set 工資=3500 where 職工號='a002001'
--查詢數(shù)據(jù)權(quán)限測試
select *from Worker;
--(e)用戶張新具有修改這兩個表的結(jié)構(gòu)的權(quán)力;
use work
go
create login [張新] with password=N'1234';
create user [張新] for login [張新];
grant all PRIVILEGES on Worker to 張新;
grant all PRIVILEGES on Section to 張新;
--(f)用戶周平具有對兩個表所有權(quán)力(對,插,改,刪數(shù)據(jù)),并具有給其他用戶授權(quán)的權(quán)利;
use work
go
create login [周平] with password=N'1234';
create user [周平] for login [周平];
grant all PRIVILEGES on Worker to 周平with grant option;
grant all PRIVILEGES on Section to 周平with grant option;
--(g)用戶楊蘭具有從每個部門職工中select最高工資,最低工資,平均工資的權(quán)力,他不能查看每個人的工資。
use work
go
create login [楊蘭] with password=N'1234';
create user [楊蘭] for login [楊蘭];
grant view Wage(max(工資),min(工資),avg(工資))
as select max(工資),min(工資),avg(工資)from Worker Group by 部門號; grant select on Wage to 楊蘭;
--(2)把上面(a)~(g)的每一種情況,撤銷各用戶所授予的權(quán)力。
use work
go
--注銷用戶王明,收回權(quán)力
revoke select on WOrker from [王明];
revoke select on Section from [王明];
drop user [王明];
drop login [王明];
use work
go
--注銷用戶李勇,收回權(quán)力
revoke select on Worker from [李勇];
revoke select on Section from [李勇];
drop user [李勇];
drop login [李勇]
--撤銷用戶對自己的記錄有select權(quán)力
use work
go
revoke select on Myself from public;
drop view Myself cascade;
use work
go
--注銷用戶劉星,收回權(quán)力
revoke select,update(工資)on Worker from [劉星];
drop user [劉星];
drop login [劉星];
use work
go
--注銷用戶張新,收回權(quán)力
revoke alter on table Worker,Section from [張新];
drop user [張新];
drop login [張新];
use work
go
--注銷用戶周平,收回權(quán)力
revoke all PRIVILEGES on table Worker from [周平] cascade;
revoke all PRIVILEGES on Section from [周平] cascade;
drop user [周平];
drop login [周平];
--注銷用戶楊蘭,收回權(quán)力
revoke select on Wage from [楊蘭];
drop view Wage cascade;
drop user [楊蘭];
drop login [楊蘭];
use master
go
--刪除數(shù)據(jù)庫work
drop database work;
4.3 出現(xiàn)的問題:
在更改連接的時候使用SQL server身份驗證登陸,用新建的用戶名登陸失敗,顯示
該用戶與可信SQL server無關(guān)聯(lián)
4.4 解決方案(列出遇到的問題和解決辦法,列出沒有解決的問題): 啟用SQL Server身份驗證
SQL Server Management Studio--對象資源管理器--右鍵 你的服務(wù)器(.SQLExpress或者localhost)--屬性--安全性--服務(wù)器身份驗證--SQL Server和Windows身份驗證模式,最后重啟一下數(shù)據(jù)庫
第四篇:數(shù)據(jù)庫實驗報告
數(shù)據(jù)庫實驗報告
一、題目要求
某銀行準備開發(fā)一個銀行業(yè)務(wù)管理系統(tǒng),通過調(diào)查,得到以下的主要需求:
銀行有多個支行。各個支行位于某個城市,每個支行有唯一的名字。銀行要監(jiān)控每個支行的資產(chǎn)。銀行的客戶通過其身份證號來標識。銀行存儲每個客戶的姓名及其居住的街道和城市??蛻艨梢杂袔簦⑶铱梢再J款。客戶可能和某個銀行員工發(fā)生聯(lián)系,該員工是此客戶的貸款負責人或銀行帳戶負責人。銀行員工也通過身份證號來標識。員工分為部門經(jīng)理和普通員工,每個部門經(jīng)理都負責領(lǐng)導其所在部門的員工,并且每個員工只允許在一個部門內(nèi)工作。每個支行的管理機構(gòu)存儲每個員工的姓名、電話號碼、家庭地址及其經(jīng)理的身份證號。銀行還需知道每個員工開始工作的日期,由此日期可以推知員工的雇傭期。銀行提供兩類帳戶——儲蓄帳戶和支票帳戶。帳戶可以由2個或2個以上客戶所共有,一個客戶也可有兩個或兩個以上的帳戶。每個帳戶被賦以唯一的帳戶號。銀行記錄每個帳戶的余額、開戶的支行以及每個帳戶所有者訪問該帳戶的最近日期。另外,每個儲蓄帳戶有其利率,且每個支票帳戶有其透支額。每筆貸款由某個分支機構(gòu)發(fā)放,能被一個或多個客戶所共有。每筆貸款用唯一的貸款號標識。銀行需要知道每筆貸款所貸金額以及逐次支付的情況(銀行將貸款分幾次付給客戶)。雖然貸款號不能唯一標識銀行所有為貸款所付的款項,但可以唯一標識為某貸款所付的款項。對每次的付款需要記錄日期和金額。
二、需求分析
這一部分主要是根據(jù)實驗需求對銀行系統(tǒng)需求中的實體、實體屬性以及實體之間的關(guān)聯(lián)進行確認,以便畫出正確的概念模型。
2.1 實體確認
根據(jù)需求分析確認實體:銀行員工、銀行支行、客戶、賬戶(其中:儲蓄賬戶、支票賬戶是繼承實體賬戶而來)、貸款、支付(弱實體)。
2.2 實體屬性確認
銀行員工:身份證號(pi)、姓名、電話號碼、家庭地址、開始工作日期 銀行支行:支行名、資產(chǎn)、城市
客戶:身份證號、姓名、街道、所在城市 賬戶:賬戶號、余額、最近訪問日期 支票賬戶:透支額 儲蓄賬戶:利率 2.3 實體關(guān)系確認
賬戶和支行:N:1定義關(guān)系為Relationship_accout_bank 客戶和貸款:M:N定義關(guān)系為Relationship_client_loan 客戶和員工:M:1 定義關(guān)系為 Relation_client_staff 貸款和支行:1:N 定義關(guān)系為 Relationship_loan_bank 客戶和賬戶:M:N 定義關(guān)系為 client__accout 貸款發(fā)放信息和貸款:N:1 定義關(guān)系為 Relationship_loan_pay 支行和員工:1:N 定義關(guān)系為Relationship_staff_bank
員工和員工:1:N 定義關(guān)系為 Relationship_lead
三、概念模型(CDM)
根據(jù)sybase power designer畫出概念模型(CDM),如下圖所示:
四、物理模型(PDM)
根據(jù)概念模型轉(zhuǎn)化成物理模型(PDM),如下圖所示:
第五篇:數(shù)據(jù)庫實驗報告
實驗4SQL高級應(yīng)用
【實驗目的】
1、掌握在SQL SERVER 2005下進行數(shù)據(jù)還原的方法。
2、掌握SQL語句的查詢統(tǒng)計功能和數(shù)據(jù)更改功能。
【實驗內(nèi)容】
1.還原factory數(shù)據(jù)庫。
2.在factory數(shù)據(jù)庫上,完成如下各題。
(1)刪除factory數(shù)據(jù)庫上各個表之間建立的關(guān)系。(2)*顯示各職工的工資記錄和相應(yīng)的工資小計。
(3)*按性別和部門名的所有組合方式列出相應(yīng)的平均工資。
(4)在worker表中使用以下語句插入一個職工記錄。職工號:20;姓名:陳立;性別:女;出生日期:55/03/08;黨員否: 1;參加工作:75/10/10;部門號:4。
在depart表中使用以下語句插入一個部門記錄。部門號:5;部門名:設(shè)備處。對worker和depart表進行全外連接顯示職工的職工號、姓名和部門名,然后刪除這兩個插入的記錄。
(5)顯示最高工資的職工的職工號、姓名、部門名、工資發(fā)放日期和工資。(6)顯示最高工資的職工所在的部門名。
(7)顯示所有平均工資低于全部職工平均工資的職工的職工號和姓名。(8)*采用游標方式實現(xiàn)(6)小題的功能。(9)*采用游標方式實現(xiàn)(7)小題的功能。
(10)*先顯示worker表中的職工人數(shù),開始一個事務(wù),插入一個職工記錄,再顯示worker表中的職工人數(shù),回滾該事務(wù),最后顯示worker表中的職工人數(shù)。
【實驗報告要求】
1.第(1)寫出操作步驟。
2.其他各題寫出實現(xiàn)要求的命令/程序,并列出執(zhí)行結(jié)果。
【操作步驟】
1.還原factory數(shù)據(jù)庫。
2.在factory基礎(chǔ)上,有
(1)刪除factory數(shù)據(jù)庫上各個表之間建立的關(guān)系。
(2)*顯示各職工的工資記錄和相應(yīng)的工資小計。
Select 職工號,姓名,工資from salary Order by 職工號
Compute sum(工資)by 職工號
(3)*按性別和部門名的所有組合方式列出相應(yīng)的平均工資。
select worker.職工號,worker.性別,depart.部門名,avg(工資)as'平均工資' from worker inner join depart on worker.部門號=depart.部門號 inner join salary on worker.職工號=salary.職工號
group by worker.職工號,worker.性別,depart.部門名
order by worker.職工號
(4)在worker表中使用以下語句插入一個職工記錄。職工號:20;姓名:陳立;性別:女;出生日期:55/03/08;黨員否: 1;參加工作:75/10/10;部門號:4。
insert into worker values('20','陳立','女','1955-03-08','1','1975-10-10',4)
在depart表中使用以下語句插入一個部門記錄。部門號:5;部門名:設(shè)備處。
Insert into depart Values('5','設(shè)備處')對worker和depart表進行全外連接顯示職工的職工號、姓名和部門名,然后刪除這兩個插入的記錄。
use factory Select b.部門號,c.姓名
from salary a,departb,worker c delete from worker where 職工號=20 delete from depart where 部門號=5(5)顯示最高工資的職工的職工號、姓名、部門名、工資發(fā)放日期和工資。
Use factory Select b.部門名,c.職工號,c.姓名,b.部門名,a.日期,a.工資 from salary a,departb,worker c Where 工資in(select max(a.工資)from salary a)and a.職工號=c.職工號and b.部門號=c.部門號(6)顯示最高工資的職工所在的部門名。
Use factory Select b.部門名from salary a,departb,worker c Where 工資in(select max(a.工資)from salary a)and c.部門號=b.部門號and a.職工號=c.職工號
(7)顯示所有平均工資低于全部職工平均工資的職工的職工號和姓名。
Use factory Select a.職工號,a.姓名,avg(b.工資)as平均工資from worker a,salary b where a.職工號=b.職工號 group by a.職工號,a.姓名
having avg(工資)<(select avg(工資)from salary)