数据库安全管理实验.docx
《数据库安全管理实验.docx》由会员分享,可在线阅读,更多相关《数据库安全管理实验.docx(23页珍藏版)》请在冰点文库上搜索。
数据库安全管理实验
数据库安全管理
实验目的:
理解SQLServer2008安全检查的三个层次:
登录名、用户和权限;
理解SQLServer2008中固定角色与自定义角色并掌握通过角色进行授权的方法;
掌握使用Grant/Revoke语句进行权限管理
实验环境及学时安排:
1.SQLSERVER2008
2.学时:
2学时
实验准备:
SQLServer2008的安全检查分三个层次
–登陆名:
登陆服务器时进行身份验证;
–用户:
访问数据库须是数据库的用户或者是某一数据库角色的成员;
–权限:
执行语句时须有执行权限
因此如果一个用户要在一个数据库中执行某条SQL语句必须首先为其创建登陆名(登录名可以选择Windows认证也可以选择SQLServer认证。
如果选择前者则要求该账号必须是Windows账号)。
接着在数据库中创建数据库用户,并让该用户映射已创建的登录名。
最后通过GRANT命令或成为某个角色成员获得该用户执行操作的权限。
实验内容:
1、创建示例数据库/表
创建jiaoxue数据库,并在该数据库下创建Student、Course、SC三个基本表,分别在三个表中输入必要的数据(该操作使用前面实验的成果)。
本次实验的所有操作均在该数据库下完成。
2、创建登陆名
用户可以通过企业管理器或系统提供的存储过程来进行登录帐户的创建。
首先在Windows中创建用户John,然后在ManagementStudio中创建登录名John,选择Windows身份验证。
注销Windows以John重新登录系统,点击SQLServer工具栏上的“数据库引擎查询”按钮,在弹出的“连接到数据库引擎”窗口中选择Windows验证,使用刚创建的John账号登陆。
检验刚创建的登录名是否成功。
使用ManagementStudio创建登录名xs,密码是123456,选择SQLServer验证方式,默认数据库为master。
使用CreateLogin创建登陆名DB_user,密码是zhimakaimen,SQLServer认证方式,默认数据库为master的帐户。
CREATELOGIN[DB_user]
WITHPASSWORD='zhimakaimen',
DEFAULT_DATABASE=[master],
DEFAULT_LANGUAGE=[简体中文],
CHECK_EXPIRATION=OFF,CHECK_POLICY=OFF
3、修改和删除登陆名
已建立的登陆账户信息可以使用系统存储过程来修改默认数据库、默认语言、密码或删除用户。
使用Alterlogin将帐户DB_user登录名的默认数据库改为jiaoxue。
alterlogin[DB_user]withdefault_database=jiaoxue
使用Alterlogin将帐户DB_user的密码改为自己的学号。
alterloginDB_user
withpassword='201041402134'
使用DropLogin删除用户xs。
DROPLOGINxs
4、创建数据库用户
通过将服务器角色赋予不同的服务器登陆名,可以使之获得服务器级别的权限。
服务器角色主要是控制服务器端对请求数据库资源的访问权限,他允许或拒绝服务器登陆名的访问操作,但是在设置具体数据库的管理和操作权限方面,服务器对象的权限设置粒度过大。
因此为了实现更细粒度的权限管理,sqlserver还提供了数据库级别的对象:
数据库用户(User)、数据角色(Role)、数据库架构(Schema)。
这三个对象是针对每一个数据库实例的,因此可以对单个数据库实例进行细化权限划分。
拥有服务器角色sysadmin的登陆名将被映射为每一个数据库的dbo用户,因此可以在SQLServer2008中做任何操作(由此可见服务器角色权限粒度之大)。
但对那些没有sysadmin角色的登陆名对象,它需要拥有一个能访问特定数据库实例的数据库用户名(User)以实现对该数据库的操作。
比如说为登陆名Kelvin想要访问teaching数据库,但不具备sysadmin的服务器角色。
那么则在teaching数据库中中创建一个名为user_Kelvin的数据库用户。
TSQL:
USEteaching;GO;createuseruser_KelvinforloginKelvin;执行之后,用Kelvin登陆名登录的用户与teaching下的user_Kelvin用户建立起了关联。
使用ManagementStudio在Jiaoxue数据库中创建数据库用户John_user,该用户映射登陆帐号John。
使用CreateUser在Jiaoxue数据库中创建数据库用户DB_user,该用户映射登陆用户DB_user。
CREATEUSERDB_userFORLOGINDB_user
5、创建架构(SCHEMA)
使用CREATESCHEMA/ManagementStudio创建架构MySchema。
usejiaoxue
go
createschemaMySchema
使用T-SQL在该架构下创建表abc(语法CreateTableMySchema.abc(...))。
usejiaoxue
go
createschemaMySchema
CreateTableMySchema.abc(idint)
使用AlterSchema将Student所属的架构改为MySchema(参阅帮助中“用户架构分离”)。
usejiaoxue
go
alterschemaMySchema
transferdbo.Student
6、修改/删除数据库用户
使用AlterUser将用户名DB_user改为自己的isme。
(由此可见登陆名和用户名可以不一致,两者是一种映射关系,并且这种映射关系是可以改变的)
usejiaoxue
go
alteruserDB_user
withname=isme
使用ManagementStudio修改用户isme,使其拥有架构MySchema。
7、角色管理
角色可以看作一组操作权限的集合。
对一个角色授予、拒绝或废除的权限也适用于该角色的任何成员。
可以建立一个角色来代表单位中一类工作人员所执行的工作,然后给这个角色授予适当的权限。
当工作人员开始工作时,只须将他们添加为该角色成员,当他们离开工作时,将他们从该角色中删除。
而不必在每个人接受或离开工作时,反复授予、拒绝和废除其权限。
权限在用户成为角色成员时自动生效。
用户与角色的关系为:
一个角色可以包含多个用户;一个用户可赋予多个角色,从而拥有多个角色的权限。
SQLServer2008提供了服务器级别的角色和数据库级别的角色。
期中服务器级别的角色不允许用户创建与修改,称为固定服务器角色。
而数据库级别的角色包括固定数据库角色、用户自定义角色和应用程序角色。
(1)固定服务器角色
使用系统存储过程sp_helpsrvrole查看所有固定服务器角色,将发现包含以下角色:
固定服务器角色
服务器级权限
Public
有两大特点,第一,初始状态时没有权限;第二,所有的数据库用户都是它的成员。
bulkadmin
这个服务器角色的成员可以运行BULKINSERT语句。
这条语句允许从文本文件中将数据导入到SQLServer2008数据库中,为需要执行大容量插入到数据库的域账户而设计。
dbcreator
这个服务器角色的成员可以创建、更改、删除和还原任何数据库。
这不仅是适合助理DBA的角色,也可能是适合开发人员的角色。
diskadmin
这个服务器角色用于管理磁盘文件,比如镜像数据库和添加备份设备。
它适合助理DBA
processadmin
SQLServer2008能够多任务化,也就是说可以通过执行多个进程做多个事件。
例如,SQLServer2008可以生成一个进程用于向高速缓存写数据,同时生成另一个进程用于从高速缓存中读取数据。
这个角色的成员可以结束(在SQLServer2008中称为删除)进程。
securityadmin
这个服务器角色的成员将管理登录名及其属性。
他们可以授权、拒绝和撤销服务器级权限。
也可以授权、拒绝和撤销数据库级权限。
另外,它们可以重置SQLServer2008登录名的密码。
serveradmin
这个服务器角色的成员可以更改服务器范围的配置选项和关闭服务器。
例如SQLServer2008可以使用多大内存或监视通过网络发送多少信息,或者关闭服务器,这个角色可以减轻管理员的一些管理负担。
setupadmin
为需要管理链接服务器和控制启动的存储过程的用户而设计。
这个角色的成员能添加到setupadmin,能增加、删除和配置链接服务器,并能控制启动过程。
sysadmin
这个服务器角色的成员有权在SQLServer2008中执行任何任务。
先使用createlogin创建SQLServer验证登录名newlogin,然后使用系统存储过程sp_addsrvrolemember将登录帐号添加为服务器角色dbcreator的成员,从而使其具有创建数据库的权利。
点击“数据库引擎查询”按钮,在弹出的连接到数据库引擎窗口中使用新创建的newlogin账号登陆服务器,在该服务器下创建数据库,验证新创建的登录名在加入固定服务器角色dbcreator前后权限的变化。
createloginnewlogin
withpassword='12345'
go
sp_addsrvrolemember'newlogin','dbcreator'
连接不了:
使用存储过程sp_dropsrvrolemember收回分配给newlogin登录帐户的指定固定服务器角色dbcreator。
sp_dropsrvrolemember'newlogin','dbcreator'
使用managementstudio完成以上操作。
(2)固定数据库角色
每个数据库中都有几个由系统创建的数据库角色-固定数据库角色,这些角色的权限也由系统预先分配。
与固定服务器角色不同,这些角色的权限可以修改,它们也能被删除。
固定数据库角色的名称及权限见下表:
固定数据库角色
数据库级权限
db_accessadmin
该角色的成员可以从数据库中增加或者删除用户。
db_backupoperator
该角色的成员允许备份数据库
db_datareader
该角色的成员允许从任何表读取任何数据。
db_datawriter
该角色的成员允许往任何表写入数据。
db_ddladmin
该角色的成员允许在数据库中增加、修改或者删除任何对象(即可以执行任何DDL语句)。
db_denydatareader
该角色的成员被拒绝查看数据库中的任何数据,但是他们仍然可以通过存储过程来查看。
db_denydatawriter
该角色的成员被拒绝修改数据库中的任何数据,但是他们仍然可以通过存储过程来修改。
db_owner
该角色的用户可以在数据库中执行任何操作。
db_securityadmin
该角色的成员可以更改数据库中的权限和角色。
Public
在SSQLServer2008中每个数据库用户都属于public数据库角色。
当尚未对某个用户授予或者拒绝对安全对象的特定权限时,这该用户将据称授予该安全对象的public角色的权限,这个数据库角色不能被删除
使用系统存储过程sp_helpdbfixedrole浏览所有的固定数据库角色的相关内容。
使用ManagementStudio将用户isme添加到db_datareader固定数据库角色中,从而使该用户可以查询jiaoxue数据库中的数据。
该操作也可使用存储过程sp_addrolemember实现。
sp_addrolemember'db_datareader','isme'
使用ManagementStudio从db_datareader固定数据库角色中删除isme用户,从而收回对jiaoxue数据库的SELECT权限。
该操作也可使用存储过程sp_droprolemember实现。
sp_droprolemember'db_datareader','isme'
(3)自定义数据库角色
使用ManagementStudio创建数据库角色Teacher,并使其拥有架构MySchema。
8.用户的权限管理
在数据库中使用grant/revoke/deny实现用户权限的管理,使其具有/不具有处理当前数据库中的数据或执行特定的Transact-SQL语句权利。
通过grant授予Teacher角色对student表的SELECT权限以及对SC表的全部权限
usejiaoxue
go
grantselectonstudenttoTeacher
go
grantallonSCtoTeacher
go
通过gran授予用户isme创建基本表、视图的权限。
usejiaoxue
go
grantcreatetabletoisme
go
grantcreateviewtoisme
go
通过gran授予用户isme查询course表的权限,且该权限可以传播
usejiaoxue
go
grantselectoncoursetoismewithgrantoption
go
将isme加入到角色Teacher中,从而继承对Student的SELECT权限。
sp_addrolemember'Teacher','isme'
通过deny拒绝isme从Teacher继承对Student的SELECT权限
usejiaoxue
go
denyselectonStudenttoisme
go
使用revoke废除isme对course表的select权限
usejiaoxue
go
revokeselectonCoursefromismecascade
go
通过ManagementStudio观察执行grant/revoke/deny前后权限的变化或者通过改变登录名来实际验证权限的变化。
实验报告:
1.完成实验所用到的T-SQL语句
2.操作时出现的错误及原因分析