WEB开发网
开发学院数据库MSSQL Server 面向数据库管理员的SQL Server 2008安全性概述 阅读

面向数据库管理员的SQL Server 2008安全性概述

 2010-03-06 15:43:13 来源:WEB开发网   
核心提示:下面是 SQL Server 2005 中的新权限类型:CONTROL,授予与所有者类似的权限,面向数据库管理员的SQL Server 2008安全性概述(8),可有效地将所有已定义的权限授予对象及其范围内的所有对象,包括能够授予其他被授予者任何权限,但是,通过排查问题,CONTROL SERVER 相当于授予 sys

下面是 SQL Server 2005 中的新权限类型:

CONTROL。授予与所有者类似的权限,可有效地将所有已定义的权限授予对象及其范围内的所有对象,包括能够授予其他被授予者任何权限。CONTROL SERVER 相当于授予 sysadmin 特权。

ALTER。授予权限以更改安全实体对象的任何属性,但修改所有权除外。从本质上讲,它将为同一范围内的 ALTER、CREATE 或

DROP 安全实体对象授予权限。例如,为数据库授予 ALTER 权限就可以修改它的表。

ALTER ANY <安全实体对象>。授予权限以修改指定类型的任何安全实体对象。例如,授予 ALTER ANY ASSEMBLY 就可以修改数据库中的任何 .NET 程序集,而在服务器级别授予 ALTER ANY LOGIN,则用户将可修改该服务器上的任何登录。

IMPERSONATE ON <登录或用户>。 授予权限以扮演特定用户或登录。本章稍后将讲到,该权限是为存储过程切换执行上下文所必需的。在以批处理方式执行扮演时也需要该权限。

TAKE OWNERSHIP。授予权限以保证获得对安全实体的所有权,使用的是 ALTER AUTHORIZATION 语句。

SQL Server 2008 仍然使用大家熟悉的 GRANT、DENY 和 REVOKE 架构,将安全实体对象的权限分配或拒绝分配主体。GRANT 语句现在提供了所有的新权限选项,如授予范围以及主体是否能够向其他主体授予权限等。SQL Server 不允许使用跨数据库权限。要授予此类权限,要在每个数据库中创建复制用户,并分别为各个数据库的用户分配该权限。

与旧版 SQL Server 类似,激活应用程序角色时,其他权限在角色激活期间内都会被暂时取消。然后,在 SQL Server 2008 和 SQLServer2005中,可以取消设置应用程序角色。SQLServer2000 与新版本之间的另一个区别就是,在激活应用程序角色时,角色也会暂时取消任何服务器特权,包括 public。例如,如为 public 授予 VIEW ANY DEFINITION,则应用程序角色将不会允许使用该权限。在应用程序角色上下文中访问服务器级元数据时,这一点最明显。

注释 应用程序角色的新首选替代方法就是在代码模块中使用执行上下文。有关更多信息,请参阅本文的“执行上下文”部分。i

授予特定权限隐含地可以传送其他权限的权利。例如,架构的 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 权限层次结构的理想方法。

考虑可用的主体数量和类型、服务器和典型数据库中的安全实体对象数量,以及可用权限、涵盖权限、隐含权限的数量时,会很容易发现 SQL Server 2008中的权限的粒度非常细。创建数据库需要对其安全需要进行更详细的分析,并谨慎控制所有对象的权限。不过,这种分析工作是值得做的,使用SQLServer2008中的这些功能会使数据库更加安全。

元数据安全

细粒度权限架构的一个优点就是 SQL Server不仅保护元数据,也保护数据。在 SQLServer 2005之前,能够访问数据库的用户可以看到数据库中所有对象的元数据,无论该用户是否可以访问其中的数据或是否能够执行存储过程。

SQL Server2008 仔细检查数据库中主体所拥有的各种权限,仅当主体具有所有者身份或拥有对象的某些权限时,才会显示该对象的元数据。还有一种 VIEW DEFINITION 权限,即使没有该对象的其他权限,利用它也能查看元数据信息。

这种保护扩展到了某些操作返回的出错消息,这些操作试图访问或更新用户无权访问的对象。SQL Server 不会确认确实存在一份名为 Address 的表,使攻击者确信自己的方向是正确的,而是返回提示各种可能性的出错消息。例如,如果用户无权访问数据库中的对象,并且试图访问 Address 表,则 SQL Server 将显示下列出错消息:

Msg 3701, Level 14, State 20, Line 1

Cannot drop the table 'Address', because it does not exist or you do not have permission.

通过这种方式,攻击者无法确认是否真的存在 Address 表。但是,通过排查问题,仍然有很小的攻击可能性。

上一页  3 4 5 6 7 8 9 10 11 12 13  下一页

Tags:面向 数据库 管理员

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接