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