SQL Server 2008 和 SQL Server 2005 比旧版安全的诸多方面之一就是改进了权限的粒度。以前,管理员必须授予用户固定服务器角色或固定数据库角色的成员,以执行特定的操作,但这些角色的权限通常会远远超出简单任务的需要。“最少特权”的原则要求用户只能拥有完成工作所需的更低权限,因此为达到小目标而分配用户高级角色就违背了该原则。
从 SQL Server 2000开始,固定服务器和数据库角色集已发生了巨大变化,当用户或应用程序需要所有或大多数已定义的权限时,仍可利用这些预定义的权限。或许更大的变化就是添加了 public 服务器角色。但是,“最少特权”的原则要求用户不能使用无法恰好提供主体完成工作所需权限的角色。虽然为发现及分配主体所需权限需要更多工作,但这会带来更加安全的数据库环境。
主体和安全实体
在 SQL Server 2008中,“主体”就是可以访问受保护资源且能获得访问资源所需权限的任何个人、组或流程。与旧版 SQL Server 一样,可以在 Windows 中定义主体,也可将没有对应 Windows 主体的 SQL Server 登录作为其基础。下面的列表显示了 SQL Server 2008主体的层次结构,但不包括固定服务器和数据库角色,还显示了将登录和数据库用户映射为安全对象的 *** 。主体的影响范围取决于它的定义范围,这样 Windows 级别的主体就比 SQL Server 级别的主体拥有更大的影响范围,而后者的影响范围又大于数据库级别的主体。每个数据库用户都会自动隶属于固定的 public 角色。
Windows 级别的主体
Windows 域登录
Windows 本地登录
Windows 组
SQL Server 级别的主体
SQL Server登录
映射为 Windows 登录的 SQL Server 登录
映射为证书的 SQL Server 登录
映射为不对称密钥的 SQL Server 登录
数据库级别的主体
数据库用户
映射为 SQL Server 登录的数据库用户
映射为 Windows 登录的数据库用户
映射为证书的数据库用户
映射为不对称密钥的数据库用户
数据库角色
应用程序角色
公共角色
授权的另一部分就是可用以保护权限授予操作或拒绝授予操作的对象。图4列出了SQL Server 2008 中安全实体对象的层次结构。在服务器级别,可以保护 *** 端点,以控制进出服务器的通信通道,以及数据库、绑定角色和登录。在数据库和架构级别,用户创建的每一个对象都被当作安全主体,包括那些驻留在架构中的对象。
服务器
数据库
端点
远程绑定
路由
SQL Server登录
数据库
应用程序角色
程序集
不对称密钥
证书
数据库用户
固定数据库角色
全文目录
消息类型
服务
服务合同
对称密钥
架构
默认
函数
过程
查询状态
队列
规则
同义词
表
触发器
类型
视图
XML架构 ***

图1:SQL Server 2008中的安全实体对象层次结构
角色和权限
要了解可在 SQL Server 中可用的权限数量,可以调用 fn_builtin_permissions 系统函数:
SELECT * FROM sys.fn_builtin_permissions(default)
下面是 SQL Server 2005 中的新权限类型:
CONTROL。授予与所有者类似的权限,可有效地将所有已定义的权限授予对象及其范围内的所有对象,包括能够授予其他被授予者任何权限。CONTROL SERVER 相当于授予 sysadmin 特权。
ALTER。授予权限以更改安全实体对象的任何属性,但修改所有权除外。从本质上讲,它将为同一范围内的 ALTER、CREATE 或 DROP 安全实体对象授予权限。例如,为数据库授予 ALTER 权限就可以修改它的表。
ALTER ANY <安全实体对象>。授予权限以修改指定类型的任何安全实体对象。例如,授予 ALTER ANY ASSEMB *** 就可以修改数据库中的任何 .NET 程序集,而在服务器级别授予 ALTER ANY LOGIN,则用户将可修改该服务器上的任何登录。
IMPERSONATE ON <登录或用户>。 授予权限以扮演特定用户或登录。本章稍后将讲到,该权限是为存储过程切换执行上下文所必需的。在以批处理方式执行扮演时也需要该权限。
TAKE OWNERSHIP。授予权限以保证获得对安全实体的所有权,使用的是 ALTER AUTHORIZATION 语句。
SQL Server 2008 仍然使用大家熟悉的 GRANT、DENY 和 REVOKE 架构,将安全实体对象的权限分配或拒绝分配主体。GRANT 语句现在提供了所有的新权限选项,如授予范围以及主体是否能够向其他主体授予权限等。SQL Server 不允许使用跨数据库权限。要授予此类权限,要在每个数据库中创建复制用户,并分别为各个数据库的用户分配该权限。
与旧版 SQL Server 类似,激活应用程序角色时,其他权限在角色激活期间内都会被暂时取消。然后,在 SQL Server 2008 和 SQL Server 2005中,可以取消设置应用程序角色。SQL Server 2000 与新版本之间的另一个区别就是,在激活应用程序角色时,角色也会暂时取消任何服务器特权,包括 public。例如,如为 public 授予 VIEW ANY DEFINITION,则应用程序角色将不会允许使用该权限。在应用程序角色上下文中访问服务器级元数据时,这一点最明显。
注释 应用程序角色的新首选替代 *** 就是在代码模块中使用执行上下文。有关更多信息,请参阅本文的“执行上下文”部分。
授予特定权限隐含地可以传送其他权限的权利。例如,架构的 ALTER 权限“涵盖”更细的粒度和低级权限,这些都是隐式定义的。图5为 ALTER SCHEMA 的隐含权限。请参阅 SQL Server Books Online 上的“Covering/Implied Permissions (Database Engine)”,以了解ImplyingPermissions 用户定义函数的 Transact-SQL 代码,该函数从sys.fn_builtin_permissions 目录视图中收集层次结构列表,并识别层次结构中每种权限的深度。在主数据库中添加 ImplyingPermissions 后,执行该语句将产生图5的结果,传入对象和权限类型:
SELECT * FROM master.dbo.ImplyingPermissions('schema', 'alter')
ORDER BY height, rank
这是浏览 SQL Server 2008 权限层次结构的理想 *** 。

图2:ALTER SCHEMA 的隐含权限层次结构
考虑可用的主体数量和类型、服务器和典型数据库中的安全实体对象数量,以及可用权限、涵盖权限、隐含权限的数量时,会很容易发现 SQL Server 2008中的权限的粒度非常细。创建数据库需要对其安全需要进行更详细的分析,并谨慎控制所有对象的权限。不过,这种分析工作是值得做的,使用SQL Server 2008中的这些功能会使数据库更加安全。
打开IE浏览器的时候、聊QQ的时候、玩游戏的时候… … 这到底是谁惹的祸呢? 很多人都知道Windows 7桌面特效全部开启会使系统性能降低,那到底是哪个特效导致的这一情况呢? 解决办法: 右键计算机,高级系统设置-性能-设置-关闭”任务栏和开始菜单使用动画“和”最大化和最小化动态显示窗口“...
国外媒体CNET NEWS就这个“上帝模式”和微软Windows部门主管Steven Sinofsky进行邮件交流后得知,这其实只是众多快捷方式中的一个,Sinofsky在邮件里给出了十多个这类快捷方式的关键字符串。 它们的建立方法和之前的“上帝模式”一样,在任意位置新建的一个文件夹,然后改名即可...
Intel会在2015年推出Broadwell、Skylake两代14nm处理器,前者可以使用9系芯片组,Skylake升级到了LGA1151插槽,需要搭配新的100系列芯片组,但初期的Skylake-S又不能超倍频,所以今年Q2季度开始会很混杂。Skylake一代会支持DDR4,100系列芯片组升...
重装系统是我们面对许多电脑问题时的终极方法,不过重装系统也不意味着就能将全部的问题都修复。一些用户在重装系统后开机时,电脑卡在“正在启动Windows”开机界面上了,这要怎么解决呢? Windows 7系统重装后卡在开机界面的解决方法: 一、首先可以看看该故障出现的原因是否是因为启动了acp...
解决方法: 其实处理这些使用流氓软件,需要将相关的.exe文件删除,使它不能再运行,或者直接清除这个服务本身,使计算机重启的时候,它不会再启动。比如Hijackthis扫描,在扫描日志中,一般会把非Windows系统的服务以023的方式列出来,如下面这段: O23 - ...
Windows 7系统可以对每个文件夹进行个性化视图设置,可以根据自己的个人喜好和实际需要更改文件或文件夹图标的大小,或者让文件或文件夹以列表、平铺等方式显示。但是,假如你对N个文件夹视图进行了风格各异的个性设置,现在又想让所有文件夹都使用同一种视图怎么办呢 手工一个一个修改,你OUT了,非累得手抽...