理解SQL Server 安全机制

     对任何企业组织来说,数据库的安全性最为重要,毕竟数据信息大都存储在数据库中。SQL Server安全性主要是指允许那些具有相应的数据访问权限的用户能够登录到SQL Server 并访问数据以及对数据库对象实施各种权限范围内的操作,同时要拒绝所有的非授权用户的非法操作。因此,安全性管理与用户管理是密不可分的。SQL Server 提供了内 置的安全性和数据保护,正确的理解SQL Server安全体系结构,对于部署和实施安全稳定的SQL Server数据库,可以起到事半功倍的效果。Microsoft SQL Server 的安全体系模型功能强大,设计灵活,但难免体系稍显复杂。本文就SQL Server 2000为基础,对SQL Server的安全体系模型进行力所能及的剖析,在文章的最后会涉及SQL Server 2005在安全性方面的改进。
 
   一:SQL Server 2000 安全体系结构概述
       我们知道,典型的网络安全机制的三大支柱分别是身份验证、授权和审计,在SQL Server 2000安全机制中也是如此。SQL Server 2000 安全体系结构如下图:
 
       其中,认证的目的是验证“我是谁”,用于确定访问者身份。
             授权的目的是解决访问者“允许我干什么”的问题。用于将一个通过身份验证的身份映射到数据库用户的过程。该过程确定用户在数据库内部能做什么。
             审核的目的是在不同级别跟踪安全相关的事件,并记录在审核日志中,以便于事后参考。
       从上图我们也可以看出,整个安全体系结构从顺序上可以分为认证授权两部分。从访问级别上又可以分为三个不同的安全层面,分别是:
        1:基于服务器级别的用户登录认证,对应于身份认证,控制用户是否可以连接到数据库服务器。
        2:基于数据库级别的用户权限许可,对应于数据库级别的用户授权,控制用户是否可以访问具体数据库。
       3:基于数据库对象级别的权限许可,对应于对象级别的用户授权,控制用户是否可以操作数据库中具体的对象。
       同时整个安全流程涉及到登录模式、安全账户、角色、用户等不同各个概念。
       下面就上述过程和概念做详细的解释。       
 
   二:服务器级别的登录认证
       用户登录认证是SQL Server 2000 安全环境中访问数据的第一步,是验证系统中请求服务的客户机身份的过程。
       没有第一步的身份验证,任何客户机或用户都无法连接到SQL Server 服务器。
       SQL Server 提供了两种身份验证方式,分别是Windows身份验证模式和混合模式。
       其中Windows身份验证是由Windows操作系统来验证用户身份,
       混合模式则是由SQL Server 2000自身来验证用户身份。
       完整的用户身份验证流程如下图:
      

   三:管理登录帐号
       服务器级别的登录帐号可以在企业管理器->安全性->登录中查看,只有在登录中存在的用户或组才可以连接到数据库服务器。
       默认的只有两个登录帐号:
         1:sa SQL Server系统管理员标准注册帐号
         2:BUILTIAN\Administrators 数据库服务器的Windows系统管理员组。
       这两个帐号都是固定的服务器角色sysadmin的成员,在服务器环境中权限是无限制的。
       不论基于Windows身份验证登录帐号,还是基于SQL Server身份验证的登录帐号,都可以在安全性->登录中进行管理。
       下面以创建一个基于windows身份验证的登录帐号为例来说明如何新增一个登录帐号:
       1:在SQL Server数据库服务器的“本地用户和组”中创建一个用户“DBUser”和组“DB Group”,且将DBUser加入DB Group组中。
        
       2:在企业管理器,安全性->登录界面,右键单击“新建登录”
             在弹出的窗口中,选择“Windows身份验证”,并在域中选择正确的域名。
       3:在名称中,选择已经创建好的本地用户组 DB Group。
            
          其它设置保存默认,按确定后,新增登录帐号完成。
        
   四:测试新增登录帐号
         新增登录帐号完成后,并没有对该用户进行授权,那么理论上该用户只能连接到数据库服务器,而不能访问任何的数据库。
         我们测试一下以该用户连接SQL Server服务器,观察下实际的访问情况。
         1:以该用户(DBUser)身份登录到SQL Server服务器
         2:打开SQL Server企业管理器,分别打开示例数据库Northwind以及用户数据库DemoDB,操作结果如下图:
         
 
           
           从上面两个图我们可以看到,DBUser可以访问Northwind数据库,但无法访问到自定义数据库DemoDB。为什么会出现这种现象呢。我们查看一下DBUser用户在数据库中映射的用户。
        3:在查询分析中输入如下图所示语句,查看当前用户的身份。
         4:从上图可以看出,因为没有对DBUser用户进行任何授权,所以连接到服务器后,SQL Server默认用户以guest身份进行访问数据库。因Pubs和Northwind数据库默认是允许Guest用户访问,而自定义数据库默认已删除guest用户。所以出现上述有些数据库可以访问,有些数据库无权限访问的现象。
           
   五:  数据库级别的权限控制
         在上面的测试中我们可以看到,对于一个新增登录帐号,默认的权限是很小的,因为并没有对这个用户进行数据库级别的访问授权。在每个数据库中都有sysusers表,该表中存放着能访问该数据库的所有角色和帐号列表。我们也可以在企业管理器每个数据库的用户和角色中查看到相应的角色和用户列表。
         1:角色管理
            在SQL Server 2000中,角色有些类似于Windows中的安全组,目的是为了集中式管理。通过给帐号和用户添加角色,可以自动将该角色所拥有的权限和许可授予帐号和用户。在SQL Server 2000中,角色是在服务器或数据库级别上定义的。
            有多种类型的角色,包括固定服务器角色、固定数据库角色、用户自定义角色、Public角色以及应用程序角色。
            其中:固定服务器角色是由SQL Server定义,不能被添加、修改和删除,只能将用户或帐号添加到相应的服务器角色中。
             固定服务器角色的作用范围是整个数据库服务器,共有8种服务器角色,不同的角色拥有不同的功能。详细的服务器角色种类本文不再详细介绍,请参观SQL Server帮助文档。
             与固定服务器角色一样,固定数据库角色也是由SQL Server定义,不能删除和修改,只能更改角色中的成员。固定数据库角色的作用范围是当前定义数据库角色的数据库。
   用户自定义角色只能在数据库级别定义,通过创建按功能或规则区分的角色,可以简化拥有这些角色的用户管理。
              在SQL Server中,Public角色是一个很特殊的数据库级别角色,所有的数据库用户会自动成为该角色成员,而且不能从该角色中删除。所以任何授予给Public角色的许可都自动授予给当前数据库的所有用户。
   2:用户管理
    用户可以通过添加到具体的角色中而获得相应的访问权限,也可以直接对单个用户进行具体的权限分配。
    在企业管理器中,对单个用户进行具体的权限分配操作步骤如下:
    1:新增登录帐号
    2:选择具体的数据库,在其"用户"中选择"新增数据库用户"
                     
                3:在弹出的"数据库用户属性"窗口中,从”登录名“中选择刚新增的登录帐号。同时确定该登录帐号所对应的数据库用户名。
    4:用户创建完成后,选择该用户,右键快捷方式中选择”属性“,在”用户属性“窗口中,单击”权限按钮“,在”数据库用户属性“窗口中,可以设置用户的具体权限。
 
   六:数据库对象级别的权限控制
        在数据库级别对用户进行权限分配后,用户就可以对数据库进行访问。但若要进行任何涉及更改数据库定义或访问数据的活动,则必须进行相应的数据库对象级别的权限许可。
       SQL Server数据库中有三种类型的许可:语句许可、对象许可和暗示性许可。
       不论是哪一种许可,都可以使用Grant,Revoke和Deny命令进行管理。
    其中:Grant用于显式给用户或角色授权许可
       Deny用于显式拒绝用户或角色使用某个许可。
       Revoke执行与Grant或Deny相反的操作,可以理解为取消。
    1:语句许可
     语句许可控制着数据库用户在数据库内创建对象和执行备份的权限。
     在企业管理器中设置语句许可的方法如下:
     1:打开企业管理器,选中具体的数据库,右键选择快捷方式中”属性“
     2:在弹出的数据库属性窗口中,选择”权限“选项。
     3:在”权限“界面显示该数据库的语句许可,可以针对当前数据库中具体用户分配相应的许可
                   
 
             2:对象许可
                    对象许可控制着数据库用户访问或操作SQL Server数据库中对象的权限。
     在企业管理器中设置对象许可的方法如下:
     1:打开企业管理器,选中具体的数据库,打开"用户"或"角色"节点。
                      2:选中具体的"用户"或"角色",右键选择快捷方式中”属性“。
     3:在弹出的属性窗口中,选择”权限“选项。
     4:在”权限“界面显示该数据库的对象许可,可以针对当前数据库中每个具体对象给该用户分配相应的许可。
                     
 
   七:审核访问
       在SQL Server 2000中,认证和授权等安全措施属于强制性的安全机制,目的是将用户对数据库的操作局限在其许可的范围内。但任何系统的安全都是相对的,一旦出现安全性相关的事故,DBA如何查找原因?在日常管理中,如何查看是否存在安全隐患?这些需求可以通过审核操作来实现。
  SQL Server 2000中包含一个可选的C2-level审核系统,该审核系统允许DBA在每一个不同的层面上跟踪安全事件。
   1:启用服务器的审核功能。
     打开在企业管理器服务器属性“安全性”选项卡,在“安全性/审核级别“区域启动服务器审核。
    重新启动SQL Server 2000服务器后,可以在事件查看器中的”应用程序日志“中查看相应的审核信息。                     
                
 
       2:利用”事件探查器“进行审核
          利用”事件探查器“进行审核,最主要的操作是在”事件“选项卡中选择”安全审核“,设置完成运行审核。
        
 
   八:SQL Server 2005在安全性方面的改进
    请参见后续文章。

本文出自 “我儿子真帅!” 博客,转载请与作者联系!

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值