SQL Server 2012安全性:功能更新
【編者按】:本系列關(guān)于SQL Server安全的文章共分四部分。本文是第二部分,將重點(diǎn)介紹SQL Server 2012中的安全性更新。在第一部分中,我們對(duì)SQL Server安全問題進(jìn)行了案例研究。
數(shù)據(jù)庫(kù)基礎(chǔ)架構(gòu)的安全對(duì)于任何組織來(lái)說都是及其重要的,這也正是微軟公司近幾年在SQL Server安全功能方面投入巨大的原因。微軟公司為SQL Server 2005重新設(shè)計(jì)了數(shù)據(jù)庫(kù)安全引擎,從那時(shí)起,SQL Server安全在每次更新都會(huì)有所提升。
SQL Server 2012繼續(xù)延續(xù)了這個(gè)趨勢(shì),增加了許多安全功能和增強(qiáng)功能。這些增強(qiáng)功能不只可以幫助組織改善數(shù)據(jù)訪問控制,而且可以實(shí)現(xiàn)最高級(jí)別的數(shù)據(jù)保護(hù)和遵守。另外,這些功能還使得SQL Server成為了從安全角度看不容辯駁的最強(qiáng)大的通用數(shù)據(jù)庫(kù)平臺(tái),漏洞更少,維護(hù)系統(tǒng)需要的安全補(bǔ)丁也更少。
安全可管理性改善
SQL Server 2012引入了兩個(gè)比較小但是非常有價(jià)值的變更來(lái)改善安全可管理性。第一個(gè)特性是Windows組的默認(rèn)模式,第二個(gè)特性是用戶定義的服務(wù)器角色。
Windows組默認(rèn)模式
在SQL Server 2012引入之前,我們不可能為Windows組指定默認(rèn)模式。這樣一來(lái),當(dāng)用戶通過Windows組成員獲得訪問時(shí),SQL Server會(huì)自動(dòng)創(chuàng)建一個(gè)獨(dú)立用戶(與admin賬戶映射),并會(huì)在數(shù)據(jù)庫(kù)中創(chuàng)建同名模式。由于這一安全可管理性問題,最后數(shù)據(jù)庫(kù)中出現(xiàn)了數(shù)百個(gè)用戶和模式,這就給管理工作帶來(lái)了困難,對(duì)管理員也是一場(chǎng)噩夢(mèng)。所以,SQL Server社區(qū)通過微軟公司連接站點(diǎn)發(fā)起請(qǐng)求要求修復(fù)這一安全問題。
幸運(yùn)的是,SQL Server 2012解決了這個(gè)安全問題,它允許我們?yōu)閃indows組賦給默認(rèn)模式,這就幫助組織簡(jiǎn)化了他們的數(shù)據(jù)庫(kù)對(duì)象管理。
下面的Transact SQL(T-SQL)證明了Windows組默認(rèn)對(duì)象賦值過程:
-- 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
用戶定義的服務(wù)器角色
用戶定義的服務(wù)器角色與固定服務(wù)器角色類似:唯一差異在于它們是由SQL Server管理員創(chuàng)建和管理的。用戶定義的角色允許管理員們創(chuàng)建和分配服務(wù)器范圍權(quán)限給用戶定義角色,然后給他們添加成員。下面的T-SQL返回這些服務(wù)器權(quán)限列表:
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
用戶定義角色的主要優(yōu)點(diǎn)在于它們通過按照職責(zé)劃分限制授權(quán)用戶訪問簡(jiǎn)化了DBA工作。
我們可以通過T-SQL或者通過SQL Server管理工具(SSMS)來(lái)創(chuàng)建和管理用戶定義角色,請(qǐng)看下面演示。
使用SSMS創(chuàng)建用戶定義角色
◆在對(duì)象瀏覽器中,展開SQL Server實(shí)例,然后展開“安全”文件夾。
◆右擊“服務(wù)器角色”文件夾,然后點(diǎn)擊菜單“新建服務(wù)器角色”,運(yùn)行“新建服務(wù)器角色”向?qū)А?/p>
◆在“常規(guī)”頁(yè),指定服務(wù)器角色的名稱,所有者以及適當(dāng)?shù)陌踩珜?duì)象。
◆點(diǎn)擊“成員”打開成員頁(yè)面,然后給你定義的服務(wù)器角色添加成員。
◆最后,點(diǎn)擊“成員組”頁(yè)面,在這里你可以把新建的服務(wù)器角色作為一個(gè)成員,添加到現(xiàn)存的服務(wù)器角色中。
使用T-SQL創(chuàng)建用戶定義角色
我們可以使用“CREATE SERVER ROLE, ALTER SERVER ROLE 和 DROP SERVER ROLE ”Transact-SQL語(yǔ)句來(lái)創(chuàng)建,修改和刪除用戶定義服務(wù)器角色。請(qǐng)看下面說明:
-- 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審計(jì)增強(qiáng)功能
在SQL Server 2008和SQL Server2008 R2中增加了服務(wù)器和數(shù)據(jù)庫(kù)審計(jì)具體規(guī)范功能,這是SQL Server中最有用的功能特性,可以幫助組織滿足各種法規(guī)遵從需求,但這些審計(jì)功能只有企業(yè)版才支持。
幸運(yùn)的是,服務(wù)器級(jí)別的審計(jì)規(guī)范特性目前在SQL Server 2012的所有版本中都支持了。SQL Server 2012的審計(jì)規(guī)范功能對(duì)于寫審計(jì)日志的失敗更富彈性,可以支持限制審計(jì)日志的數(shù)量,無(wú)需設(shè)置回滾日志。SQL Server 2012審計(jì)規(guī)范特性還支持用戶定義組,這意味著我們現(xiàn)在可以給審計(jì)日志中寫審計(jì)事件,使用“ sp_audit_write (Transact-SQL) ”存儲(chǔ)過程就能做到。最后,SQL Server 2012支持過濾審計(jì)事件,包括新增審計(jì)組來(lái)監(jiān)視其包含的數(shù)據(jù)庫(kù)用戶。
數(shù)據(jù)庫(kù)認(rèn)證功能增強(qiáng)
在SQL Server 2012之前,用戶需要用windows或者SQL登錄SQL Server數(shù)據(jù)庫(kù)引擎進(jìn)行數(shù)據(jù)庫(kù)身份驗(yàn)證。很明顯,當(dāng)從一個(gè)SQL Server實(shí)例向另一個(gè)實(shí)例遷移時(shí),這種依賴會(huì)引起認(rèn)證問題,而數(shù)據(jù)庫(kù)管理員不得不確保所有可以登錄源SQL Server的用戶也存在于目標(biāo)SQL Server。如果由于某種原因,在目標(biāo)SQL Server上登錄用戶不存在,那么用戶就不能通過數(shù)據(jù)庫(kù)登錄驗(yàn)證了。
SQL Server 2012通過引入內(nèi)含數(shù)據(jù)庫(kù)驗(yàn)證來(lái)解決這個(gè)問題,它支持用戶認(rèn)證到數(shù)據(jù)庫(kù),而無(wú)需登錄SQL Server。所有包含數(shù)據(jù)庫(kù)認(rèn)證的元數(shù)據(jù)被存儲(chǔ)在數(shù)據(jù)庫(kù)本身內(nèi)部。內(nèi)含數(shù)據(jù)庫(kù)認(rèn)證的另一個(gè)優(yōu)勢(shì)是它消除了孤立或未使用登錄信息在SQL Server數(shù)據(jù)庫(kù)引擎中存在的可能性。