你或許已經(jīng)把按需定制的系統(tǒng)遷移到了微軟Azure平臺,這種遷移通常會引起安全和保密問題。因為至少在一定程度上,離開了完全托管環(huán)境自然存在的監(jiān)管,這是在所難免的。控制級別的降低肯定是一個要考慮的因素,尤其是在處理PaaS(平臺即服務(wù))資源(比如Azure SQL數(shù)據(jù)庫)時,你有很多可選技術(shù),這些技術(shù)產(chǎn)品都支持你控制監(jiān)管狀態(tài)和對駐留Azure其中服務(wù)的訪問,足以緩解這類安全問題的大部分。SQL 數(shù)據(jù)庫審計就是這種技術(shù)之一,也是本文的討論主題。
你應(yīng)該會注意到,這個功能還是相對較新的,但是其相對近期的亮相主要是為了跟得上Azure更新的步伐。在經(jīng)歷過三個月的試用階段后,在2014年11月12日它達到了一般可用的程度,因此它現(xiàn)在支持在生產(chǎn)環(huán)境可用。然而,它不能在傳統(tǒng)的定價層次上應(yīng)用,因此如果你的數(shù)據(jù)庫配置用于Web或者業(yè)務(wù),你首先需要將其升級為基本配置,標準配置或者增強配置。你可以在兩個版本的Azure門戶中直接操作來修改配置(傳統(tǒng)版本門戶從Scale標簽頁操作,也可以從預(yù)覽版門戶報價層次操作)。其主要目的是實現(xiàn)數(shù)據(jù)庫級別的安全相關(guān)事件跟蹤,同時處理合規(guī)需求。日志可以根據(jù)事件類型選擇性地打開或者關(guān)閉,其中包括數(shù)據(jù)訪問、庫結(jié)構(gòu)變化、數(shù)據(jù)變化、安全故障和權(quán)限授予收回。
一旦啟用了功能,響應(yīng)這些事件的條目會自動記錄并存儲在任意指定的Azure存儲賬戶指定的審計表中(表名是“SQLDBAuditLogs20140928”),這也意味著由于其消耗的資源會存在額外的成本。另外,也會存在輕微的延遲影響(大概幾毫秒之內(nèi)),但是不會對數(shù)據(jù)庫的計算性能有負面影響(因為審計服務(wù)是自給自足的,占用獨立的計算資源)。在指定存儲賬戶的時候,你可以選擇指定是否使用主密鑰或者輔助密鑰來設(shè)置對內(nèi)容的安全訪問。這項設(shè)置意在遵守一些內(nèi)部法規(guī)或者安全程序,加密保護存儲內(nèi)容的周期性變化。在此期間有一個鍵值會重新生成,而其他鍵值則保持不變。這樣的話,你可以確保與安全相關(guān)的事件審計不中斷地持續(xù)進行。這種機制使用你選擇的密鑰自動生成共享訪問簽名(SAS),它的訪問被限制在表“SQLDBAuditLogs20140928 ”上,而且只有寫權(quán)限。
另外,我們還可以指定記錄到SQL Server級的事件類型。設(shè)置配置結(jié)果可以被應(yīng)用到托管在同一個SQL Server中的所有SQL數(shù)據(jù)庫,只需要選擇數(shù)據(jù)庫繼承審計設(shè)置就可以了,菜單在傳統(tǒng)門戶頁的“審計與安全”標簽頁,如果用預(yù)覽版門戶則在“審計”頁,該功能可提高配置效率。在以上各操作界面,你都可以把審計保存為傳統(tǒng)門戶命令欄的默認命令(在預(yù)覽版門戶的標簽是“保存為默認”),該操作會重置SQL Server審計設(shè)置,向當前數(shù)據(jù)庫審計設(shè)置同步保持一致。
此外,為了審計切實產(chǎn)生效用,你必須修改客戶端或者用戶與SQL數(shù)據(jù)庫交互的連接串。正確的配置串格式可以從門戶頁面獲得,只需要點擊“顯示啟用安全的連接串”鏈接就可以了,兩種版本中都一樣,界面會展示適用于ADO.NET,ODBC(包括Node.js),PHP和基于JDBC連接方式的各類連接串示例。它們與原來的連接串只有一個地方不同,就是其中增加了secure關(guān)鍵字來區(qū)分以安全模式連接到目標SQL Server。例如,如果針對ADO.NET的連接串原來是下面形式:
Server=tcp:server_name.database.windows.net,1433;Database=AdventureWorks2012;UserID=login_name;Password=login_password;Encrypt=True;TrustServerCertificate=False;ConnectionTimeout=30;
其中“server_name, login_name,and login_password”分別代表服務(wù)器名,主數(shù)據(jù)庫中定義的登錄用戶名以及對應(yīng)密碼,增加了審計設(shè)置的新連接串示例如下:
Server=tcp:server_name.database.secure.windows.net,1433;Database=AdventureWorks2012;UserID=login_name;Password=login_password;Encrypt=True;TrustServerCertificate=False;ConnectionTimeout=30;
要記得帶審計配置的連接,與無審計連接一樣,都必須能通過網(wǎng)絡(luò)防火墻設(shè)置。
很明顯,以上這些設(shè)置尚不足以完全滿足你的審計需求,因為默認的不帶審計標識的連接字符串仍然是有效可用的。要堵住這個安全漏洞,你可以禁用無審計標識的連接。在兩種門戶界面把“啟用安全訪問”選項由“可選”改為“必須”就可以了。
一旦啟用了審計功能,并設(shè)置為必選項,所有連接事件就都會記錄在“SQLDBAuditLogs20140928”表中,存儲在你選擇的賬號里。你可以利用任何現(xiàn)有可以訪問Azure表存儲的工具去查看其中保存的原始數(shù)據(jù)。在MSDN博客上有他們的完整列表。此外,你可能還需要使用預(yù)配置計分板模板,你可以在傳統(tǒng)門戶的“審計與安全”標簽中點擊“下載審計日志報告模板”或者在預(yù)覽版門戶“審計”頁選擇“在Excel中打開”鏈接。該模板包含有交互和定制的Power View和基于 PowerPivot的報表,利用Excel 2013中的商業(yè)智能功能可以非常有效地簡化審計日志數(shù)據(jù)的分析。該模板包含有樣例數(shù)據(jù),它們是對七個數(shù)據(jù)庫三個月范圍內(nèi)的審計示例。
下載了該模板之后,你還需要下載并安裝Excel的Power Query插件。具體可以參考Excel手冊瀏覽文檔《02如何在Excel中查看Azure SQL DB審計日志報表》。它會要求你配置事件源,指向指定存儲賬號的“SQLDBAuditLogs20140928”表,可能還需要調(diào)整記錄數(shù)限制(默認限制是一百萬,但是如果需要的話,這個值可以增加到六百萬)。該手冊還包含有多個表格頁,其中包括以下內(nèi)容(請注意默認只有前五項可以直接顯示,其它項可以通過電子表格右鍵菜單中的“取消隱藏”全部顯示出來):
整體定位。包括配置模板需要的步驟清單,都有超鏈接指向詳細介紹;還包含有與每個可視表格關(guān)聯(lián)的報表簡述。異常信息。顯示事件概覽。需要的話可以進一步研究,比如大數(shù)據(jù)集的變化或者無效登錄嘗試,還有對不常用的安全原則的觸犯。它還對數(shù)據(jù)訪問異常提供報表展示百分比,它可能代表了不正常的應(yīng)用程序用法。向下鉆取。它提供了獲取更多明細統(tǒng)計數(shù)據(jù)的支持,展現(xiàn)審計事件的不同側(cè)面,比如事件類型、目標數(shù)據(jù)庫或者用于訪問的安全原則名稱。事件類型分布。它提供了審計事件類型分布的綜合視圖,基于幾方面緯度。比如:目標數(shù)據(jù)庫、月份和日期,周某天或小時規(guī)律等。事件時間分析。它幫助分析一段時間內(nèi)的事件類型。默認情況下,它由兩個圖表組成:第一個顯示數(shù)據(jù)訪問量、數(shù)據(jù)變化和存儲過程執(zhí)行事件;第二個顯示了成功登陸的統(tǒng)計。指定區(qū)域范圍的事件類型可以很容易地添加或者去除,使用每個圖標獨立配置的事件類型切片就可以做到。數(shù)據(jù)庫位置信息。它包含有數(shù)據(jù)庫位置列表(在我們的例子中是相應(yīng)的Azure數(shù)據(jù)中心位置)。這些信息必須把電子表格設(shè)置為“顯示隱藏表格”之后才可以看到。研究視圖。它根據(jù)數(shù)據(jù)庫位置表生成基于映射的可視化統(tǒng)計。它主要是為了幫助識別事件類型的變化趨勢。時間分析Upper Pivot和Lower Pivot。它充當基礎(chǔ)支持數(shù)據(jù)的角色,在時間類型分析統(tǒng)計表中會用到它,這個表不應(yīng)該修改。工作日統(tǒng)計。它充當基礎(chǔ)支持數(shù)據(jù)的角色,在事件類型分布統(tǒng)計表會用到它,這個表不應(yīng)該修改。事件訪問時段統(tǒng)計。它提供一段時間內(nèi)總的事件統(tǒng)計技術(shù),用于預(yù)測分析。數(shù)據(jù)訪問時段統(tǒng)計,數(shù)據(jù)變更時段統(tǒng)計,成功登陸時段統(tǒng)計,庫結(jié)構(gòu)變更時段統(tǒng)計,存儲過程時段統(tǒng)計。這些信息分別提供一段時間內(nèi)數(shù)據(jù)訪問,數(shù)據(jù)變更,成功登陸,庫結(jié)構(gòu)變化和存儲過程調(diào)用事件的統(tǒng)計,也是用于預(yù)測分析。
值得注意點是,在web應(yīng)用中,使用相同的認證憑據(jù)代表它們的用戶對數(shù)據(jù)庫建立連接是相對常見的做法。這些憑據(jù)是在應(yīng)用級別配置的。雖然所有這些連接事件都會記錄到相應(yīng)安全原則的審計日志中,但是你并不能有所區(qū)分它們。因此你可以在應(yīng)用中獲取實際應(yīng)用用戶名,把該用戶名信息已參數(shù)的形式也發(fā)送到SQL數(shù)據(jù)庫中去,可以解決這個問題。
對SQL數(shù)據(jù)庫審計功能的介紹到這里就結(jié)束了。在以后的文章中,我們還會探索此PaaS服務(wù)最近發(fā)布的其它增強功能。