【编者按】:本系列关于SQL Server安全的文章共分四部分。本文是第二部分,将重点介绍SQL Server 2012中的安全性更新。在第一部分中,我们对SQL Server安全问题进行了案例研究。
数据库基础架构的安全对于任何组织来说都是及其重要的,这也正是微软公司近几年在SQL Server安全功能方面投入巨大的原因。微软公司为SQL Server 2005重新设计了数据库安全引擎,从那时起,SQL Server安全在每次更新都会有所提升。
SQL Server 2012继续延续了这个趋势,增加了许多安全功能和增强功能。这些增强功能不只可以帮助组织改善数据访问控制,而且可以实现最高级别的数据保护和遵守。另外,这些功能还使得SQL Server成为了从安全角度看不容辩驳的最强大的通用数据库平台,漏洞更少,维护系统需要的安全补丁也更少。
安全可管理性改善
SQL Server 2012引入了两个比较小但是非常有价值的变更来改善安全可管理性。第一个特性是Windows组的默认模式,第二个特性是用户定义的服务器角色。
Windows组默认模式
在SQL Server 2012引入之前,我们不可能为Windows组指定默认模式。这样一来,当用户通过Windows组成员获得访问时,SQL Server会自动创建一个独立用户(与admin账户映射),并会在数据库中创建同名模式。由于这一安全可管理性问题,最后数据库中出现了数百个用户和模式,这就给管理工作带来了困难,对管理员也是一场噩梦。所以,SQL Server社区通过微软公司连接站点发起请求要求修复这一安全问题。
幸运的是,SQL Server 2012解决了这个安全问题,它允许我们为Windows组赋给默认模式,这就帮助组织简化了他们的数据库对象管理。
下面的Transact SQL(T-SQL)证明了Windows组默认对象赋值过程:
-- Creating Default Schema "ProdAdmins" for Windows Group "MyDomain\ProdDBAs"
CREATE SCHEMA [ProdAdmins] AUTHORIZATION [MyDomain\ProdDBAs]
GO
-- Set Default Schema for Windows Group "MyDomain\ProdDBAs"
ALTER USER [MyDomain\ProdDBAs] WITH DEFAULT_SCHEMA=[ProdAdmins]
GO
用户定义的服务器角色
用户定义的服务器角色与固定服务器角色类似:唯一差异在于它们是由SQL Server管理员创建和管理的。用户定义的角色允许管理员们创建和分配服务器范围权限给用户定义角色,然后给他们添加成员。下面的T-SQL返回这些服务器权限列表:
USE [master]
GO
SELECT * FROM sys.fn_builtin_permissions(DEFAULT)
WHERE [class_desc] IN ('ENDPOINT'
,'LOGIN'
,'SERVER'
,'AVAILABILITY GROUP'
,'SERVER ROLE')
ORDER BY [class_desc], [permission_name]
GO
用户定义角色的主要优点在于它们通过按照职责划分限制授权用户访问简化了DBA工作。
我们可以通过T-SQL或者通过SQL Server管理工具(SSMS)来创建和管理用户定义角色,请看下面演示。
使用SSMS创建用户定义角色
◆在对象浏览器中,展开SQL Server实例,然后展开“安全”文件夹。
◆右击“服务器角色”文件夹,然后点击菜单“新建服务器角色”,运行“新建服务器角色”向导。
◆在“常规”页,指定服务器角色的名称,所有者以及适当的安全对象。
◆点击“成员”打开成员页面,然后给你定义的服务器角色添加成员。
◆最后,点击“成员组”页面,在这里你可以把新建的服务器角色作为一个成员,添加到现存的服务器角色中。
使用T-SQL创建用户定义角色
我们可以使用“CREATE SERVER ROLE, ALTER SERVER ROLE 和 DROP SERVER ROLE ”Transact-SQL语句来创建,修改和删除用户定义服务器角色。请看下面说明:
-- Creating user-defined roles
CREATE SERVER ROLE [JuniorDBA]
-- Granting server-wide permissions
GRANT CREATE ANY DATABASE TO [JuniorDBA]
-- Adding members to user-defined roles
ALTER SERVER ROLE [JuniorDBA]
ADD MEMBER [Domain\JuniorDBA_Group1]
ALTER SERVER ROLE [JuniorDBA]
ADD MEMBER [Domain\JuniorDBA_Group1]
-- Making user-defined role member of fixed server role
ALTER SERVER ROLE [processadmin]
ADD MEMBER [JuniorDBA]
-- Dropping user-defined roles
DROP SERVER ROLE [JuniorDBA]
SQL Server审计增强功能
在SQL Server 2008和SQL Server2008 R2中增加了服务器和数据库审计具体规范功能,这是SQL Server中最有用的功能特性,可以帮助组织满足各种法规遵从需求,但这些审计功能只有企业版才支持。
幸运的是,服务器级别的审计规范特性目前在SQL Server 2012的所有版本中都支持了。SQL Server 2012的审计规范功能对于写审计日志的失败更富弹性,可以支持限制审计日志的数量,无需设置回滚日志。SQL Server 2012审计规范特性还支持用户定义组,这意味着我们现在可以给审计日志中写审计事件,使用“ sp_audit_write (Transact-SQL) ”存储过程就能做到。最后,SQL Server 2012支持过滤审计事件,包括新增审计组来监视其包含的数据库用户。
数据库认证功能增强
在SQL Server 2012之前,用户需要用windows或者SQL登录SQL Server数据库引擎进行数据库身份验证。很明显,当从一个SQL Server实例向另一个实例迁移时,这种依赖会引起认证问题,而数据库管理员不得不确保所有可以登录源SQL Server的用户也存在于目标SQL Server。如果由于某种原因,在目标SQL Server上登录用户不存在,那么用户就不能通过数据库登录验证了。
SQL Server 2012通过引入内含数据库验证来解决这个问题,它支持用户认证到数据库,而无需登录SQL Server。所有包含数据库认证的元数据被存储在数据库本身内部。内含数据库认证的另一个优势是它消除了孤立或未使用登录信息在SQL Server数据库引擎中存在的可能性。