SQL Server 2012安全性:功能更新
【編者按】:本系列關于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數據庫引擎中存在的可能性。