SQL数据库安全性

上一篇 / 下一篇  2012-08-24 09:28:16 / 个人分类:数据库

51Testing软件测试网\(W,]N5c]{[2Q

  许多Windows系统管理员,还兼职着微软SQLServer数据库管理员(DBA)的身份。另一方面,企业将许多机密的信息存储到了SQL Server数据库中。作为一名DBA新手,则需要了解SQL Server的安全模式和如何配置其安全设置,以保证“合法”用户的访问并阻止“非法”访问。而在SQL Server中登陆、用户、角色、权限提供了对数据库访问的权限,接下来在数据库安全性上着重分析它们的关系。51Testing软件测试网pO|~1d7u(w6K(J+f

0[Y@zEqHOu0  ● 安全层次和验证模式51Testing软件测试网3_Jm-RHa

x6?.tf*t0  一、安全层次

6DJ j4\]`%U9j$L0

v5YH4F(E3Z.P0  SQL Server支持三级安全层次。在我们登陆到SQL Server时,其实我们是经过了三步的验证。

)l hj4UF%c/I4o0

Q]5dZQ%m@)Q~0  第一层次是用户提供正确的账号和密码登录到SQL Server,或者已经成功登陆了一个可以映射到SQL Server的windows账号。但是在SQL Server登陆并不意味着能够访问数据库,而是要经过第二层次的验证。51Testing软件测试网TIYt3T

p4V6Rq4rL@0  第二层次的权限允许用户与一个或多个数据库相连,这一层次的实现要在数据库对象的用户中绑定登陆账户。51Testing软件测试网w,F(jTI@ E"\

mj$bY5O:d%K3O0   第三个层次的安全权限允许用户拥有对指定数据库中的对象的访问权限,例如:可以指定用户有权使用哪些表和视图、运行哪些存储过程。在第一层次中的 windows账号,其实是在我们装机时给windows指定的自己登陆到windows系统的账号,而作为windows系统管理员的我们其实也兼职了 SQL Server的管理权,那我们如何设置才能保证只有我们指定的用户才能访问SQL数据库呢?就是我们下面要说的验证模式。

7u1mJ!dA0h,d0

fB }$?"Kv0

  二、SQL登陆验证模式

qw[ H.e0

jj"O)z%Q~&[+d2v8]W0

   SQL的登陆验证模式有两种,一种是Windows的验证模式,另一种是Windows和SQL Server混合验证模式。如果我们选择windows模式登陆并把windows账号映射到SQL Server的登陆上,那么合法的windows用户也就连接到了SQL Server中。51Testing软件测试网`'x5?y X

  Windows模式的登陆需要在SQL Server中设置。方法:

}7}@)MKrQ0

  打开SQL Server企业管理器,找到安全性文件夹,打开后再登陆中新建一个windows身份验证模式的账户。需要注意的是在新建账户时,账户的名称一定要填我们windows账户的名字,如:我的计算机在用户中名称为张信秀,则在填名称时一定要填张信秀。51Testing软件测试网\5rG b%PPDZ'e

Z-v:BI] r0

MAZ |D a-J Bq0  SQL Server的验证模式相对windows的登陆模式在设置上没有特别的要求,只需填上我们的密码即可。

Em4v6w!E^7og}0

Q.y'l3EM'n0  接下来进入我们的重点——角色、权限,首先我们在图上来区分。51Testing软件测试网?0FO.W$}:]&a Sv?

51Testing软件测试网9gG+\fvVi

  ● 登陆、权限、角色

8i w3DH#Ew9_ N]0

51Testing软件测试网 qv%wd&~

  在往下说之前我们先介绍下安全账户。返回到安全层次上来说,账户在登录到SQL Server后,如果想获得访问某个数据库的权限,是必须要在SQL中获得安全账户的,确保登陆的账号是安全的,就好比是我们出国的护照签证一样,想要去 哪个国家必须获得该国家的签证和出入境章,这个安全账户就是在数据库对象的用户中绑定一个登陆账号,证明这个登陆账号是安全的。

o i)m$h D kW1p0

  账户、角色、权限他们三者是没有严格的关系的,如果有的话就是角色给账户分配职能,而权限却又限制着角色和账户对数据库的操作。它们三者就好像是公司里的员工、职权、规章,公司按照职能非配不同的员工,但是每个员工却又受到公司规章的限制。51Testing软件测试网hb8F3I~

  一、数据库角色51Testing软件测试网V#sk ?U}

  数据库角色控制着数据库的安全性。当最终用户成功地连接到分析服务器之后,会在那个服务器上的数据库角色中查找最终用户的用户名,来确定用户对数据库的可能操作。51Testing软件测试网5A,eniM3c

  数据库角色在创建时有两种:51Testing软件测试网 so2~v _ L2p[

  1、标准角色:不允许嵌套,在使用时只需在安全账户中添加,通过分配权限确保了用户能够进行的操作;

(ldAw/Li0

  2、应用程序角色:为了让标准角色嵌套,来控制角色所能进行的操作,创建后SQL Server把它当做账户看待(因为它是应用程序级别的),它的作用是为权限提供相应的加密,用存储过程sp_setapprole激活才可进行授予权限的操作。

]|$rEI Y'Zx,l$iyO0

  二、权限51Testing软件测试网AS(\&p S l

  权限有三种类型,

Os)P&xV/UtF0

  1、语句权限:限制对表update、insert等的操作,在创建角色时或添加安全用户后设置;51Testing软件测试网"b5I1F-kox

  2、对象权限:限制用户对数据库对象的创建,在数据库属性内设置;

uK%I&~R#H0

  3、暗示性权限:SQL Server数据库自带的那些角色或用户,如:服务器角色、数据库所有者(dbo)等拥有的权限,不需要了解他,因为它是系统自己设置的用户不能够设置。51Testing软件测试网!D"Q4d9h B7ZU6P+c

'e%_Yn`0  最后我们在代码中应用下三者:51Testing软件测试网D)nj]5YD$z

51Testing软件测试网i$CiO}M

51Testing软件测试网.F QblZ.j}Y;\#|!kt

51Testing软件测试网E2h%c lN;K#f^b

/*示例说明:在数据库company中创建一个拥有表product的所有权限、拥有表employees的SELECT权限的角色rtest随 后创建了一个登录ltest,然后在数据库company中为登录ltest创建了用户账户utest同时将用户账户utest添加到角色rtest中, 使其通过权限继承获取了与角色rtest一样的权限最后使用DENY语句拒绝了用户账户utest对表titles的SELECT权限。经过这样的处理, 使用ltest登录SQL Server实例后,它只具有表product的所有权限。51Testing软件测试网,Ujp;|i1`
*/
51Testing软件测试网q&XKzA-C(N

R]bAZ1@sT0USE company51Testing软件测试网$L#ZB\!RT,j

51Testing软件测试网'].A7B'R)d4@O

--创建角色 rtest51Testing软件测试网3R O(Cz+w9H
EXEC sp_addrole 'rtest'
51Testing软件测试网XFP_4ND

$S:it!X H0--授予 rtest 对product 表的所有权限51Testing软件测试网 dj;Hsy-EX
GRANT ALL ON product TO rtest
+m%F Zwf3@1sP0--授予角色 rtest 对 employees 表的 SELECT 权限
S({:O\6QBe ]@0GRANT SELECT ON titles TO rtest
51Testing软件测试网3[J*ZqVac!V

p9H0uX4[+c&i0--添加登录 ltest,设置密码为pwd,默认数据库为pubs
:T|P&e6ZB7v0EXEC sp_addlogin 'ltest','pwd','company'
51Testing软件测试网Mo)MGqN

4Oy y xN0--为登录 ltest 在数据库 pubs 中添加安全账户 utest51Testing软件测试网1h$xQ,G%i0w,?
EXEC sp_grantdbaccess 'ltest','utest'
51Testing软件测试网 k,M0\%z;yG%E

51Testing软件测试网i4x1?R M*B

--添加 utest 为角色 rtest 的成员
'ihv0@-d0EXEC sp_addrolemember 'rtest','utest'

6B${O4S'O0

;n3PaA^ ~(d9V6o%M)Z S0--拒绝安全账户 utest 对 employees 表的 SELECT 权限51Testing软件测试网~ak.W:_"g
DENY SELECT ON employees TO utest
51Testing软件测试网I3\2n3Y E B ?Y:i

51Testing软件测试网)Y8o{Y k$@sh [:Kf

/*--完成上述步骤后,用 ltest 登录,可以对company表进行所有操作,但无法对employees表查询,虽然角色 rtest 有employees表的select权限,但已经在安全账户中明确拒绝了对employees的select权限,所以ltest无employees 表的select权限--*/51Testing软件测试网l$AV5Qh#UK

{x%BT8p0--从数据库 company 中删除安全账户
SH!@4k5u0EXEC sp_revokedbaccess 'utest'

,pO+Dw5L'F051Testing软件测试网 _Ft I:G*P.C](`(t#E(\

--删除登录 ltest
Hy'su j VY5s/N$D0EXEC sp_droplogin 'ltest'

;S Mx4c.?b0x051Testing软件测试网TB VRNQO%n

--删除角色 rtest
1O}.am4Ur7ll0EXEC sp_droprole 'rtest'

8a0G#y/V"S2G;i,If E0
51Testing软件测试网6]E6[,R%QX

  ● 总结:51Testing软件测试网7W/t*y ]LnS

51Testing软件测试网4p)v z8MD

  在新建登陆时,利用服务器角色分配账户的功能,利用数据库角色管理用户对数据库进行的操作。在新建角色时为角色分配权限,来限制用户的操作。51Testing软件测试网8tq z yi$U

51Testing软件测试网^(MiZ3MKT

  懂得SQL Server安全性的机制后,我们就可以开发自己的数据库安全策略了。你下一步所需要的可能就是产生一个SQL Server脚本了。在SQL Server企业管理器中,右击一个数据库,选择“所有任务”,选择“生成SQL脚本”,这个选项能够产生一个脚本,对包括安全策略在内的数据库进行更 新。一个脚本文件可以代替通过鼠标在SQL Server事件管理器中进行点击和选择的操作,大大减少DBA的工作量。

t%Ob{T!`*N6`_0

TAG:

 

评分:0

我来说两句

Open Toolbar