分级的数据库访问实体机制
在以往的SQL Server中,SQL Server采用的是SQL Server Instance层次的Login和数据库层次的Role、User,总而言是从SQL Server自身的角度确认那些访问实体(用户或者是应用程序)可以访问数据库。SQL Server2005 按照访问的范围把访问实体化分为三大类Principal:Windows级、SQL Server级和Database级。具体包括如下。
Windows-级的Principal:Windows Domain login、Windows Local login
SQL Server级的Principal:SQL Server login
Database级的Principal:Database User、Database Role、Application Role
SQL Server 2005中增加了一个新的概念——Securable,它代表由数据库引擎控制访问的各种数据库资源。根据三层访问实体的划分,对应的在每个层次也出现了不同的Securable对象,如下说明。
数据库服务器范围内的:EndPoint、Login、Database
数据库范围内的:User、Role、Application role、Assembly 、Message Type、Route、Service 、Remote Service Binding、Fulltext Catalog、Certificate、Asymmetric Key 、Symmetric Key 、Contract、Schema
而在Schema范围内:Type 、XML Schema Collection 、Object
Object他包括如下几类:Aggregate、Constraint、Function 、Procedure、Queue、Statistic、Synonym 、Table、View
因此,在明确了Principal、Securable和Object三者关系之后,每一个Principal对于SQL Server的访问控制就可以通过如下关系获得:

图3:配置Principal、Securable与Securable的关系
在明确上文分层的Principal和分层的Securable之后,相信读者自然而然会发现其实在SQL Server 2005的设计中,权限(Permission)本身也是具有层次性的,可以用DCL语言(GRANT、DENY、REVOKE)来管理与配置它们。下图是一个完整的SQL Server 2005Principal、Securable和Permission的层次嵌套关系:

图4:Principal、Securable和Permission层次嵌套关系
在Management Studio中的配置界面如下:

图5:配置Principal对Securable访问权限的过程