zoukankan      html  css  js  c++  java
  • SQL Server的安全模型

     

    下面我们来学习一下SQL Server的安全模型,首先看一张图:

     

    <?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />

     

    <?xml:namespace prefix = v ns = "urn:schemas-microsoft-com:vml" />

    这就是SQLServer的三层安全管理体系,我们打个比方,假设您住在一个防卫森严的小区,您如果希望进入您的房间,当然需要闯三关。

    第一关:您需要通过小区的门卫检查,进入小区;

    第二关:到了您所在的单元楼门前,您还需要单元门的钥匙或门铃密码;

    第三关:进了单元门后,您还需要您自己房间的钥匙。

     

    看一下上面的图,SQLServer的安全管理是不是非常类似小区的三层验证关口?同样的,我们想操作数据库的某张表也要闯三关:

    第一关:我们需要登录到SQL Server系统,即需要登录帐户;

    第二关:我们需要访问某个数据库(相当于我们的单元楼),即需要成为该数据库的用户

    第三关:我们需要访问数据库中的表(相当于打开我们的房间),即需要数据库管理员DBA给您授权,如增添、修改、删除、查询等权限。

     

    咱们都知道,登录验证有两种方式:

    1.SQL身份验证:适合于非windows平台的用户或Internet用户, 需要提供帐户和密码

    2.Windows身份验证:适合于windows平台用户,不需要提供密码,和windows集成验证

    那么,登录帐户相应有两种:SQL 帐户和Windows帐户

     

    下面我们就一起来看看如何创建登录帐户、如何创建数据库用户以及如何给用户授权。

    1.创建登录

              添加 Windows登录帐户

        EXEC sp_grantlogin   ‘leno/123‘   /*域名/用户名 */  

              添加 SQL登录帐户

    EXEC sp_addlogin  ‘zhangsan', ‘<?xml:namespace prefix = st1 ns = "urn:schemas-microsoft-com:office:smarttags" />1234’   /*用户名/密码*/

     

    2.创建数据库用户

    创建数据库用户需要调用系统存储过程sp_grantdbaccess,其用法为:

    EXEC sp_grantdbaccess ‘登录帐户名数据库用户名        

     

    其中,数据库用户名为可选参数,默认为登录帐户名,即数据库用户默认和登录帐户同名。

    USE stuDB

    GO

    EXEC sp_grantdbaccess

           'leno/123', 'lenoDBUser' 

    EXEC sp_grantdbaccess

            'zhangsan', 'zhangsanDBUser'

    其实,系统本身就内置了两个数据库用户:

    q       dbo  用户

    q       表示数据库的所有者(DB Owner

    q       无法删除 dbo 用户,此用户始终出现在每个数据库中

    q       guest 用户

    q       适用于没有数据库用户的登录帐号访问

    q       每个数据库可有也可删除

     

    dbo用户:表示DataBase Owner数据库的主人,一般来说,谁创建的数据库,谁就是数据库的主人,但是可以转让,就像房屋产权证转让一样。

    guest来宾用户:就像你不是某个公司的员工,您进入该公司就是作为一个来宾(guest)身份一样。数据库中的guest用户含义一样:如果登录到SQL Server中了,希望访问某个数据库,但又不是该数据库的用户,那么当你访问时,SQL Server就认为你作为guest用户的身份访问数据库,至于你作为guest来宾用户是否能够访问数据库,那就看管理员的授权了。如果管理员给guest帐户授予了访问的权限,那么你就能访问。那么,什么叫做访问权限呢?打个比方:对于某间房屋来说,房屋的权限就是指房产出售权(房主)、转租(可能是租房人有事不住了,但又没到期)、只能居住(租房人)等。对于数据库来说,访问权限指的就是数据库的增(insert)、删(delete)、改(update)、查(select)权限以及其它执行权限等。

     

    3.给数据库用户授权

    授权的语法

              GRANT 权限 [ON  表名 ]  TO  数据库用户

    USE  stuDB

    GO

    /*--zhangsanDBUser分配对表stuInfoselect, insert, update权限--*/

    GRANT select, insert, update

        ON  stuInfo  TO  zhangsanDBUser 

    /*--lenoDBUser分配建表的权限--*/

    GRANT  create  table  TO  lenoDBUser

     

    注意授权只能向数据库用户授权,而不是给登录帐户授权。而且数据库的权限仅限于当前数据库,如果希望访问其他数据库,还需要成为其他数据库的用户。所以,现在大家应该清楚了:登陆账号->数据库用户->访问权限,这三道关口就是SQL Server的安全模型。

     

     

     

  • 相关阅读:
    .gitignore不生效-git上传忽略解决方案的配置文件
    JAVA
    Java
    python-函数基础01
    Java常见数据结构
    分代垃圾回收机制及垃圾回收算法
    设计模式【9】------>观察者模式
    设计模式【8】------>策略模式
    设计模式【7】------>原型模式
    设计模式【6】------>外观模式
  • 原文地址:https://www.cnblogs.com/CharmingDang/p/9663741.html
Copyright © 2011-2022 走看看