您的位置:首页 > 数据库

MSSQL安全相关的几个概念

2010-01-04 23:28 239 查看
  登录名和用户名的区别?什么是角色?用户和架构的区别?

  这几个概念一直都比较模糊。翻了翻MSDN,还是一贯看微软帮助的感觉:好像什么都说了,又好像什么都没解释清楚。

  在网上找了几篇文章,看完之后又重新回去翻帮助才好像明白了一点。先把现在的理解记下来,以后有时间再好好研究一下。

  上面几个概念的区别真要说清楚,还得从MSSQL的权限层次结构说开去。MSSQL管理着一套分成各个级别的实体。大体来说可以分成3个级别。

  1、Windows级

  2、SQL Server级

  3、数据库级

  跟上面第一个概念相关的是后两个级别。(第一个级别的相关内容涉及到的主要是身份验证方式,也就是我们常说的Windows验证方式和混合验证方式---混合中另外一种是SQL Server验证方式,以后会专门解释这两种验证方式的不同,此处就不再赘述)。简而言之,登录名是用来登录到SQL Server服务器上的,如果这个登录名没有一个对应的用户名,它本身是没有什么权限去操作数据库的,它仅仅是登录进了这个服务器而已,它是通过sp_addlogin来添加的。而用户名则是和具体数据库紧密联系在一起的概念,它和数据库的访问权限是有关的,当然MSSQL并不会对用户名直接加权限,它是通过角色来控制用户的权限。用户名是通过sp_adduser来添加的。在这里,角色这个概念你可以简单把它理解为为了方便赋予权限,否则的话,每个用户MSSQL都得单独给他维护一套权限相关的数据,有了角色这个概念,用户就可以从角色继承权限,相同的权限的用户可以继承一个角色。那么用户和架构的区别呢?答案是在MS SQL 2000中,两者就没有区别,尽管2000中已经有了架构的概念,并提供了架构的DDL语法(创建架构),但因为架构和用户名是绑定在一起的,所以这个语法实质上没什么用。从MS SQL 2005开始,才实现了真正的用户与架构的分离。至于为什么分离?因为有N多的好处,比如删除用户更方便了,比如一个用户可以拥有不同的架构,一个架构也可以属于不同的用户等等。总之,对于架构的理解,就可以直接把它简化为命名空间,实际上MSDN上也是这么描述的。如果命名空间你还不懂的话,就直接把它看成一个容器吧:表,视图什么的相当于文件,架构相当于文件夹,就起到一个归类的作用。

  拿我们平常经常打交道的sa来说,它其实是个登录名。那为什么我们用sa登录之后可以操作各种数据库呢?那是因为MS SQL默认把sa映射为数据库的dbo用户,每创建一个新的数据库,MS SQL会默认创建一个dbo用户,这个用户的角色是db_owner,顾名思义,它可以在这个数据库里面为所欲为。忘了说了,sa登录名在服务器那个级别也属于一个服务器级别的角色:sysadmin,这也是一个可以在服务器上为所欲为的角色。

  架构既然是命名空间,那为什么我们访问一个表的时候,比如写类似于这种语句:SELECT * FROM Table1不需要制定架构名称呢(数据库中对象的全名称写法应该是:服务器名.数据库名.架构名.对象名)?那是因为MS SQL内部解析的机制是这样的(你不写明架构名的话):第一步先在sys架构中找这个表,找不到就在默认架构中找,再找不到就跑到dbo架构中找。创建一个用户的时候,MS SQL都会让你选择一个默认架构,如果你不选的话,那就是dbo。dbo架构是怎么来的?创建出来的---还记得建立数据库的时候会创建一个dbo的用户么,就是那个时候自动给你添加了一个同名dbo架构。

  另外,在创建新的用户时,好像无法指定登录名为sa,必须选择其他的登录名。其实原因是sa这个登录名已经被默认的dbo用过了,你不能在同一个数据库里用一个登录名建立两个用户。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: