第一篇:数据库的安全性实验报告
西 安 邮 电 大 学
实
验:课程 班
级 学号 学生姓名 任课教师(计算机学院)
课内实验报告
数据库的安全性试验
数据库原理及应用B
网络1203
孟彩霞
:::::
一、实验目的(1)理解SQL Server 2000验证用户身份的过程,掌握设置身份验证模式的方法。(2)理解登录账号的概念,掌握混合认证模式下登录账号的建立与取消方法。(3)掌握混合认证模式下数据库用户的建立与取消方法。(4)掌握数据库用户权限的设置方法。
(5)理解角色的概念,掌握管理的角色技术。
二、实验内容
(1)在企业管理器中打开“SQL Server属性(配置)”对话框,设置身份验证模式为“SQL Server”和“Windows”模式(即混合模式)。(2)创建、管理数据库服务器的登录账号。(3)创建、管理数据库用户。(4)管理用户权限。
(5)创建、管理数据库角色。
三、实验环境
SQL Server 2008版本。
四、实验前准备
仔细预习实验内容,理解实验步骤。
五、实验步骤
1.在企业管理器中打开“SQL Server属性(配置)”对话框,设置身份验证模式为“SQL Server”和“Windows”模式(即混合模式)。
2.创建、管理数据库服务器的登录账号。用T-SQL语句创建、查看、删除登录账号。
创建一个名为Student、密码为111、使用的默认数据库为JWGL的登录账号。EXEC sp_addlogin ‘student’,’111’,’JWGL’ 查看登录账号
EXEC sp_helplogins 删除登录账号为EXEC sp_droplogins ‘student’
3.创建、管理数据库用户。
用T-SQL语句创建、查看、删除数据库用户。
为数据库JWGL创建一个用户user1,该用户登录SQL Server服务器的账号为wang,登录密码为secret,相应的程序代码为: EXEC sp_addlogin ‘wang’, ‘secret’, ‘JWGL’ GO EXEC sp_grantdbaccess ‘wang’, ‘user1’ 查看数据库用户为EXEC sp_helpuser 删除数据库中的“wang”用户为EXEC sp_revokedbaccess ‘wang’
4.管理用户权限。
使用T-SQL语句完成第3章习题12中(1)~(3)的用户管理和用户权限管理。企业管理器:
(1)允许用户李明对Orders表进行插入、删除操作。
GRANT INSERT ,DELETE ON Orders TO ‘李明’(2)将查询Goods表和修改单价的权限授予用户李四。
GRANT UPDATE(Price),SELECT ON Goods TO ‘李四’
(3)将查询Goods表的权限授予用户文云龙,并允许他将此权限授予他人。
GRANT SELECT ON Goods TO ‘文云龙’
WITH GRANT OPTION
5.创建、管理数据库角色。
如一个小组共3个成员,他们对JWGL具有相同的操作权限,具体权限为对Student,Course表只能进行数据查询;对SC表可以进行查询、修改、删除和插入。
可以创建一个角色(如role),给该角色赐予相应的权限,然后给每个成员建立一个登录账号(如分别为lin,wang,zheng),并将每个成员的登录账号添加为数据库角色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,然后再使用企业管理器完成以上任务。删除角色role时,必须保证它不包含任务数据库用户,即要先删除其下的所有成员。
EXEC sp_droprolemember ‘role’, ‘lin’ EXEC sp_droprolemember ‘role’, ‘wang’ EXEC sp_droprolemember ‘role’, ‘zheng’ GO EXEC sp_droprole ‘role’
六、实验步骤及部分结果截图
1.混合登陆
2.创建一个名为Student、密码为111、使用的默认数据库为JWGL的登录账号。
EXEC sp_addlogin ‘student’,’111’,’JWGL’
查看登录账号
EXEC sp_helplogins
3.为数据库JWGL创建一个用户user1,该用户登录SQL Server服务器的账号为wang,登录密码为secret
查看数据库用户:
删除数据库中的“wang”用户:
4.(1)允许用户李明对Orders表进行插入、删除操作:
2)将查询Goods表和修改单价的权限授予用户李四:
3)将查询Goods表的权限授予用户王二,并允许他将此权限授予他人
5.创建一个角色(如role),给该角色赐予相应的权限,然后给每个成员建立一个登录账号(如分别为lin,wang,zheng),并将每个成员的登录账号添加为数据库角色role的成员
将lin,wang,zheng加为角色成员:
删除角色role,然后再使用企业管理器完成以上任务
七、心得体会
此次实验是最后一次实验,所以倍加珍惜,本应该一次性在实验室完成的,但中途有事耽误了点时间,所以又在自己电脑上重新做的,以前做实验都没特别认真地做过,有点心理障碍,但当自己真正认认真真做的时候,会发现其实不难,时间也会过的好快,圆满的结束了最后一次实验,却不会结束与数据库的缘分,以后的日子里,我会继续深究这门学科的。
第二篇:数据库安全性实验报告
实验报告
一、实验题目
数据库安全性
二、实验要求
1)新建一个登陆名为tom,密码为tom001的登陆帐户,登陆后用户名为user_tom,默认情况下该用户具有哪些权限?
2)授予该用户对Student表的查询权限,同时授予其进一步授权其他用户的权利。
3)新建一个登陆名为marry,密码为marry001的登陆帐户,登陆后用户名为user_marry。
4)以tom001登陆,将对Student表的查询权限赋予marry,但不加withgrant option参数。
5)以marry001登陆,尝试将对Student表的查询权限授权给用户guest。
6)新建角色dbnormuser,同时将marry用户指定该角色,授予该角色对Student表的查询权限,再重新执行第5步,结果如何?
7)使用sp_addsrvrolemember系统存储过程将marry用户指定sysadmin固定服务器角色,再重新执行第5步,结果如何?
三、实验内容
按照要求我首先建立了一个模式,1)createlogin tom with password='tom001'
usestudent_course
go
createuser user_tom from login tom with grant option
仅可以对student_course数据库访问,但是不能访问里面的表格。
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)无法授权
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可以授权了
7)又不能授权了
四、实验心得
第三篇:实验三 数据库安全性实验报告
一 实验目的1.熟悉通过SQL语句对数据进行安全性控制;
2.针对具体应用要求,完成授权和收回权限的操作;
二 实验工具SQL Server 2005
利用SQL Server 2005 SSMS及其SQL查询编辑器。
三 实验内容和要求
使用SQL对数据进行安全性控制,包括:授权和权力回收。操作完成后看看已授权的用户是否真正具有授予的数据操作的权力了;权力收回操作之后的用户是否确实丧失了收回的数据操作的权力。根据以上要求认真填写实验报告,记录所有的实验用例。具体操作可以参照课件中的实例。
具体操作内容:
创建以下两个关系模式,并分别插入相应的数据。
职工(职工号,姓名,年龄,职务,工资,部门号)
部门(部门号,名称,经理名,地址,电话号码)
(1)请用SQL的Grant和Revoke语句(加上视图机制)完成以下授权定义或存取控制功能,并进行相应的安全性测试;
(a)用户王明对两个表有select权力;
(b)用户李勇对两个表有insert和delete权力;
(c)每个职工只对自己的记录有select权力;
(d)用户刘星对职工表有select权力,对工资字段具有更新权力;
(e)用户张新具有修改这两个表的结构的权力;
(f)用户周平具有对两个表所有权力(对,插,改,删数据),并具有给其他用户授权的权利;
(g)用户杨兰具有从每个部门职工中select最高工资,最低工资,平均工资的权力,他不能查看每个人的工资。
(2)把上面(a)~(g)的每一种情况,撤销各用户所授予的权力。
四 实验报告
4.1 实验环境:
Windows XP
MicrosoftSQL server Management Studio 2005
4.2 实验内容与完成情况:
--新建数据库
create database work
go
use work
--创建以下两个关系模式,并分别插入相应的数据。
--Worker(职工号,姓名,年龄,职务,工资,部门号)
go
create table Worker(职工号 varchar(10),姓名 char(10),年龄 int,职务 char(15),工资 int,部门号 char(50))
--Section(部门号,名称,经理名,地址,电话号码)
create table Section(职工号 char(10),名称 char(10),经理名 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,'经理',5000,'a001');
insert into Worker values('a002001','罗杰',18,'销售员',2000,'a002');
insert into Worker values('a002002','李红',24,'销售员',2000,'a002');
insert into Worker values('a002003','李刚',32,'经理',5000,'a002');
--查询部门表和职工表的数据
select *from Worker;
select *from Section;
--授权
use work
go
--(a)用户王明对两个表有select权力;
create login [王明] with password=N'1234';
create user [王明] for login [王明];
grant select on Worker to [王明];
grant select on Section to [王明];
--插入数据权限测试
insert into Worker values('a002004','罗红',28,'销售助理',4000,'a002');
--查询数据权限测试
select *from Worker;
--(b)用户李勇对两个表有insert和delete权力;
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 [李勇];
--插入数据权限测试
insert into Worker values('a002005','罗莉',52,'销售助理',4000,'a002');
--查询数据权限测试
select *from Worker;
--删除权限测试
delete Worker from where 职工号='a002001';
--(c)每个职工只对自己的记录有select权力;
use work
go
create view Myself as select * from Worker
where 姓名=user;
grant select on Myself to public;
--(d)用户刘星对职工表有select权力,对工资字段具有更新权力;
use work
go
create login [刘星] with password=N'1234';
create user [刘星] for login [刘星];
grant select,update(工资)on Worker to [刘星];
--更新修改权限测试
update Worker set 工资=3500 where 职工号='a002001'
--查询数据权限测试
select *from Worker;
--(e)用户张新具有修改这两个表的结构的权力;
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)用户周平具有对两个表所有权力(对,插,改,删数据),并具有给其他用户授权的权利;
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最高工资,最低工资,平均工资的权力,他不能查看每个人的工资。
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)的每一种情况,撤销各用户所授予的权力。
use work
go
--注销用户王明,收回权力
revoke select on WOrker from [王明];
revoke select on Section from [王明];
drop user [王明];
drop login [王明];
use work
go
--注销用户李勇,收回权力
revoke select on Worker from [李勇];
revoke select on Section from [李勇];
drop user [李勇];
drop login [李勇]
--撤销用户对自己的记录有select权力
use work
go
revoke select on Myself from public;
drop view Myself cascade;
use work
go
--注销用户刘星,收回权力
revoke select,update(工资)on Worker from [刘星];
drop user [刘星];
drop login [刘星];
use work
go
--注销用户张新,收回权力
revoke alter on table Worker,Section from [张新];
drop user [张新];
drop login [张新];
use work
go
--注销用户周平,收回权力
revoke all PRIVILEGES on table Worker from [周平] cascade;
revoke all PRIVILEGES on Section from [周平] cascade;
drop user [周平];
drop login [周平];
--注销用户杨兰,收回权力
revoke select on Wage from [杨兰];
drop view Wage cascade;
drop user [杨兰];
drop login [杨兰];
use master
go
--删除数据库work
drop database work;
4.3 出现的问题:
在更改连接的时候使用SQL server身份验证登陆,用新建的用户名登陆失败,显示
该用户与可信SQL server无关联
4.4 解决方案(列出遇到的问题和解决办法,列出没有解决的问题): 启用SQL Server身份验证
SQL Server Management Studio--对象资源管理器--右键 你的服务器(.SQLExpress或者localhost)--属性--安全性--服务器身份验证--SQL Server和Windows身份验证模式,最后重启一下数据库
第四篇:数据库实验报告
数据库实验报告
一、题目要求
某银行准备开发一个银行业务管理系统,通过调查,得到以下的主要需求:
银行有多个支行。各个支行位于某个城市,每个支行有唯一的名字。银行要监控每个支行的资产。银行的客户通过其身份证号来标识。银行存储每个客户的姓名及其居住的街道和城市。客户可以有帐户,并且可以贷款。客户可能和某个银行员工发生联系,该员工是此客户的贷款负责人或银行帐户负责人。银行员工也通过身份证号来标识。员工分为部门经理和普通员工,每个部门经理都负责领导其所在部门的员工,并且每个员工只允许在一个部门内工作。每个支行的管理机构存储每个员工的姓名、电话号码、家庭地址及其经理的身份证号。银行还需知道每个员工开始工作的日期,由此日期可以推知员工的雇佣期。银行提供两类帐户——储蓄帐户和支票帐户。帐户可以由2个或2个以上客户所共有,一个客户也可有两个或两个以上的帐户。每个帐户被赋以唯一的帐户号。银行记录每个帐户的余额、开户的支行以及每个帐户所有者访问该帐户的最近日期。另外,每个储蓄帐户有其利率,且每个支票帐户有其透支额。每笔贷款由某个分支机构发放,能被一个或多个客户所共有。每笔贷款用唯一的贷款号标识。银行需要知道每笔贷款所贷金额以及逐次支付的情况(银行将贷款分几次付给客户)。虽然贷款号不能唯一标识银行所有为贷款所付的款项,但可以唯一标识为某贷款所付的款项。对每次的付款需要记录日期和金额。
二、需求分析
这一部分主要是根据实验需求对银行系统需求中的实体、实体属性以及实体之间的关联进行确认,以便画出正确的概念模型。
2.1 实体确认
根据需求分析确认实体:银行员工、银行支行、客户、账户(其中:储蓄账户、支票账户是继承实体账户而来)、贷款、支付(弱实体)。
2.2 实体属性确认
银行员工:身份证号(pi)、姓名、电话号码、家庭地址、开始工作日期 银行支行:支行名、资产、城市
客户:身份证号、姓名、街道、所在城市 账户:账户号、余额、最近访问日期 支票账户:透支额 储蓄账户:利率 2.3 实体关系确认
账户和支行:N:1定义关系为Relationship_accout_bank 客户和贷款:M:N定义关系为Relationship_client_loan 客户和员工:M:1 定义关系为 Relation_client_staff 贷款和支行:1:N 定义关系为 Relationship_loan_bank 客户和账户:M:N 定义关系为 client__accout 贷款发放信息和贷款:N:1 定义关系为 Relationship_loan_pay 支行和员工:1:N 定义关系为Relationship_staff_bank
员工和员工:1:N 定义关系为 Relationship_lead
三、概念模型(CDM)
根据sybase power designer画出概念模型(CDM),如下图所示:
四、物理模型(PDM)
根据概念模型转化成物理模型(PDM),如下图所示:
第五篇:数据库实验报告
实验4SQL高级应用
【实验目的】
1、掌握在SQL SERVER 2005下进行数据还原的方法。
2、掌握SQL语句的查询统计功能和数据更改功能。
【实验内容】
1.还原factory数据库。
2.在factory数据库上,完成如下各题。
(1)删除factory数据库上各个表之间建立的关系。(2)*显示各职工的工资记录和相应的工资小计。
(3)*按性别和部门名的所有组合方式列出相应的平均工资。
(4)在worker表中使用以下语句插入一个职工记录。职工号:20;姓名:陈立;性别:女;出生日期:55/03/08;党员否: 1;参加工作:75/10/10;部门号:4。
在depart表中使用以下语句插入一个部门记录。部门号:5;部门名:设备处。对worker和depart表进行全外连接显示职工的职工号、姓名和部门名,然后删除这两个插入的记录。
(5)显示最高工资的职工的职工号、姓名、部门名、工资发放日期和工资。(6)显示最高工资的职工所在的部门名。
(7)显示所有平均工资低于全部职工平均工资的职工的职工号和姓名。(8)*采用游标方式实现(6)小题的功能。(9)*采用游标方式实现(7)小题的功能。
(10)*先显示worker表中的职工人数,开始一个事务,插入一个职工记录,再显示worker表中的职工人数,回滚该事务,最后显示worker表中的职工人数。
【实验报告要求】
1.第(1)写出操作步骤。
2.其他各题写出实现要求的命令/程序,并列出执行结果。
【操作步骤】
1.还原factory数据库。
2.在factory基础上,有
(1)删除factory数据库上各个表之间建立的关系。
(2)*显示各职工的工资记录和相应的工资小计。
Select 职工号,姓名,工资from salary Order by 职工号
Compute sum(工资)by 职工号
(3)*按性别和部门名的所有组合方式列出相应的平均工资。
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;部门名:设备处。
Insert into depart Values('5','设备处')对worker和depart表进行全外连接显示职工的职工号、姓名和部门名,然后删除这两个插入的记录。
use factory Select b.部门号,c.姓名
from salary a,departb,worker c delete from worker where 职工号=20 delete from depart where 部门号=5(5)显示最高工资的职工的职工号、姓名、部门名、工资发放日期和工资。
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)