練習 - 管理安全性
一旦您的 Azure SQL Database 在網路、驗證和資料保護層級上都受到保護後,最後一步就是了解您要如何持續管理安全性。 管理安全性包括稽核、監視和資料分類。
稽核
稽核可以協助您維持法規合規性、了解資料庫活動,以及深入了解可能指出潛在安全性違規的不一致和異常。 在此活動中,您將在伺服器層級設定稽核功能,但您也可以在資料庫層級取得稽核功能。
作為 SQL Server 稽核的替代方案,Azure SQL Database 備有「Azure SQL 稽核」。 其由 SQL Server 稽核來提供技術支援,且如同 SQL Server 支援稽核動作群組和動作。 稽核功能會追蹤資料庫和伺服器事件,並將事件寫入到 Azure 儲存體、記錄分析、或 Azure 事件中樞的稽核記錄中。 如果您指向 Azure Blob 儲存體帳戶,則可以在 XEvents 檔案中儲存並分析結果。 使用 Log Analytics 時,即可使用 Kusto 查詢語言 (KQL) 來查詢記錄,並利用 Log Analytics 稽核儀表板。
設定稽核
在先前的部署 SQL Database 練習中,您於伺服器層級設定稽核功能,但稽核功能也可用在資料庫層級。 在後面的練習中,您將了解如何存取並利用傳送至 Azure Blob 儲存體、KQL 和 Log Analytics 儀表板的檔案。
完成下列步驟以設定 Log Analytics 工作區:
在 Azure 入口網站的搜尋列中,輸入 Log analytics,然後從結果中選取 [Log Analytics 工作區]。 [Log Analytics 工作區] 窗格會隨即出現。
選取建立。 [建立 Log Analytics 工作區] 功能表隨即出現。
在 [基本] 索引標籤上,為每個設定輸入下列值。
設定 值 專案詳細資料 訂用帳戶 指引訂用帳戶 資源群組 從下拉式選單中選取 [沙箱資源群組] 執行個體詳細資料 名稱 輸入 azuresql-la 區域 從下列清單選取最靠近您的位置 免費的沙箱可讓您在 Azure 全球區域的一部分區域建立資源。 建立資源後,從下列清單選取區域:
- 美國西部 2
- 美國中南部
- 美國中部
- 美國東部
- 西歐
- 東南亞
- 日本東部
- 巴西南部
- 澳大利亞東南部
- 印度中部
選取 [檢閱 + 建立],等候您的輸入完成驗證,然後選取 [建立]。 等候資源部署完成。
選取 [前往資源] 。 Log Analytics 工作區的 [概觀] 窗格隨即出現。
在 Azure 入口網站中,移至 AdventureWorks 資料庫。
在功能表上的 [安全性] 下,選取 [稽核]。 檢閱選項。
您可在伺服器層級套用稽核,以套用到 Azure SQL Database 邏輯伺服器內的所有資料庫。 如果您同時在資料庫層級套用稽核 (您會在本單元中這麼做),這兩項稽核會平行發生;彼此不會覆寫。
將滑動開關選取為 [啟用 Azure SQL 稽核]。
選取 [儲存體] 核取方塊,然後完成必要欄位:
- 針對 [訂用帳戶],請從下拉式清單選取 [指引訂用帳戶]。
- 針對 [儲存體帳戶],請從下拉式清單選取開頭為
sql
,且後面接著隨機字母和數字字串的帳戶。 - 將 [儲存體驗證類型] 保留為預設的 [儲存體存取金鑰] 選項。
使用
sql
儲存體帳戶來收集 XEvent 記錄檔,這些記錄檔會在名為 sqldbauditlogs 的容器內儲存為 Blob 檔案的集合。 在稍後的活動中,您將會檢閱容器來了解記錄檔與 Log Analytics 有何不同。提示
如果您沒有看到任何儲存體帳戶,請建立新的帳戶。 您可能需要在幾分鐘後重新整理頁面,帳戶才會顯示出來。
如果您要稽核實際執行環境,請考慮使用不同的儲存體帳戶來儲存稽核記錄。
選取 [進階屬性] 以展開該區段,並設定下列設定項目:
- 針對 [保留期 (天]),輸入 7
- 針對 [儲存體存取金鑰],選取 [主要]。
注意
如果您沒有看到 [進階屬性],請從命令列選取 [儲存],然後重複進行此頁面的設定指示。
選取 [Log Analytics] 核取方塊,然後完成必要欄位:
- 針對 [訂用帳戶],請從下拉式清單選取 [指引訂用帳戶]。
- 針對記錄分析,請選取您稍早在本練習中建立的 [Log Analytics 工作區] (asuresql-la)。
選取 [儲存]。
設定可能需要幾分鐘的時間來進行處理。
您現在已啟用對儲存體帳戶和 Azure Log Analytics 工作區的稽核。 稍後,您將深入了解 Azure SQL 中的稽核功能。 您將了解如何分析稽核記錄來檢視您在整個課程模組中所做的一切變更,以及其他某些有趣的使用案例。
Azure SQL Database 的總帳
總帳功能提供資料庫中資料完整性功能的竄改證明,密碼編譯證明。 這項證明有助於簡化稽核程序。
總帳有助於保護資料不為任何攻擊者,或包括資料庫系統管理員 (DBA)、系統管理員和雲端系統管理員在內的高權限使用者所變更。 此功能和傳統的總帳一樣,會保留歷程記錄資料。 總帳資料表中的異動修改資料時,此事件會使用 Merkle 樹狀資料結構來加密 SHA-256 雜湊,以建立代表異動中所有資料列的根雜湊。 經資料庫處理的交易也會透過 Merkle 樹狀資料結構一起用 SHA-256 雜湊演算。 結果是形成區塊的根雜湊。 然後,這個區塊經過區塊根雜湊的 SHA-256 雜湊演算,和上一個區塊的根雜湊一起輸入雜湊函式。 這樣的雜湊演算就形成一個區塊鏈。 資料庫只要更新資料列,就會將前一個值留存在記錄資料表中並予以保護。 總帳會提供資料庫一段時間內的所有變更紀事輯。
總帳功能以兩種形式引入資料表:
- 可更新的總帳資料表,可讓您更新和刪除資料表中的資料列
- 僅限附加的總帳資料表,只允許您插入資料表
可更新的總帳資料表和僅限附加的總帳資料表都提供竄改證明功能和數位鑑識功能。
使用 Azure SQL 資料庫的總帳練習
在建立 Azure SQL 資料庫的練習中,我們新增了名為 myLedgerDatabase
的資料庫,並建立了名為的 Account.Balance
資料表。 在此練習中,我們將插入資料、對資料進行更新,以及查詢歷程記錄資料表和總帳檢視,以查看發生的追蹤,以及資料表之間的關聯性。
開啟並連線至您的 Azure SQL Database 邏輯伺服器。
以滑鼠右鍵按一下
myLedgerDatabase
資料庫,然後選取 [新增查詢]。插入名稱
Nick Jones
作為期初餘額為美金 $50 元的新客戶。INSERT INTO [Account].[Balance] VALUES (1, 'Jones', 'Nick', 50);
插入名稱
John Smith
、Joe Smith
和Mary Michaels
作為期初餘額分別為美金 $500、$30 和 $200 元的新客戶。INSERT INTO [Account].[Balance] VALUES (2, 'Smith', 'John', 500), (3, 'Smith', 'Joe', 30), (4, 'Michaels', 'Mary', 200);
檢視可更新的總帳資料表
[Account].[Balance]
,並指定新增至資料表的 GENERATED ALWAYS 資料行。 選取 [執行] 以執行查詢。SELECT [CustomerID] ,[LastName] ,[FirstName] ,[Balance] ,[ledger_start_transaction_id] ,[ledger_end_transaction_id] ,[ledger_start_sequence_number] ,[ledger_end_sequence_number] FROM [Account].[Balance];
在結果視窗中,您會先看到 T-SQL 命令所插入的值,以及用於資料譜系用途的系統中繼資料。
ledger_start_transaction_id
資料行會註明與插入資料之交易相關聯的唯一交易識別碼。 由於John
、Joe
和Mary
都是使用相同的交易來插入,因此會共用相同的交易識別碼。ledger_start_sequence_number
資料行會註明交易插入值的順序。
將
Nick
的餘額從50
更新為100
。UPDATE [Account].[Balance] SET [Balance] = 100 WHERE [CustomerID] = 1;
檢視
[Account].[Balance]
總帳檢視及交易總帳系統檢視,以識別進行變更的使用者。 選取 [執行] 以執行查詢。SELECT t.[commit_time] AS [CommitTime] , t.[principal_name] AS [UserName] , l.[CustomerID] , l.[LastName] , l.[FirstName] , l.[Balance] , l.[ledger_operation_type_desc] AS Operation FROM [Account].[Balance_Ledger] l JOIN sys.database_ledger_transactions t ON t.transaction_id = l.ledger_transaction_id ORDER BY t.commit_time DESC;
Nick
的帳戶餘額在已更新的總帳資料表中已成功更新為100
。
總帳檢視會顯示總帳資料表的更新作業是DELETE
具有50
的原始資料列。 對應INSERT
具有100
之新資料列的餘額會顯示Nick
的新餘額。
監視
有兩個層面可以監視及管理安全性:
- Azure 層級
- 資料庫或伺服器層級
在 Azure 中,您可套用活動記錄和角色型存取控制稽核等工具。
在 Azure SQL Database 中,您可設定 Azure SQL 稽核,並套用動態管理檢視、計量和警示來監視安全性相關事件。 例如,sys.event_log
可讓您追蹤失敗和成功連線的數目,以及防火牆封鎖的連線數目。
Microsoft 建議設定適用於雲端的 Microsoft Defender,包括設定進階威脅防護的警示。 我們將在下一個章節和練習中討論這些安全性元素。 最後,您可使用適用於雲端的 Microsoft Defender 來監視、管理和接收 Azure 資產中所有資源的建議。
資料探索與分類
數據探索與分類服務會為 Azure SQL 資料庫 形成新的資訊保護範例。 此服務的目標是要保護資料,而不只是保護資料庫。 這個範例包括:
- 針對應該分類的潛在敏感性資料的探索及建議。
- 使用中繼資料屬性,將標籤持續新增至資料行的功能。
- 稽核及查詢敏感性資料存取的功能
Azure SQL 在資料分類中同時提供 SQL 資訊保護原則和 Microsoft 資訊保護原則,您可以根據您的需求選擇任一原則。
入口網站檢視僅適用於 Azure SQL,但 SQL Server 會透過 SQL Server Management Studio 中的精靈來支援類似功能。
如需詳細資訊,請參閱 數據探索與分類。
適用於雲端的 Microsoft Defender
適用於雲端的 Microsoft Defender 是進階 SQL 安全性功能的整合套件。 其可供從單一位置啟用及管理兩個主要功能:
- 弱點評量
- 進階威脅防護
弱點評量
在最高層級上,SQL 弱點評定是一種掃描服務,其可供檢視安全性狀態,並提供可操作的步驟來解決任何潛在問題。 當您設定週期性掃描時,就會讓服務每七天掃描一次資料庫,並檢查其中是否有任何弱點。 然後,您可選擇將這些報告傳送給系統管理員、訂用帳戶擁有者,或其他任何可能需要收到變更通知的人員。 為了讓此服務運作,您必須指定將儲存結果的儲存體帳戶。
進階威脅防護
使用進階威脅防護時,您可藉由接收異常活動其安全性警示來偵測並回應發生的潛在威脅。 進階威脅防護會套用進階的監視和機器學習技術,來偵測是否有發生下列任何威脅:
- SQL 資料隱碼
- SQL 插入漏洞
- 資料外流
- 不安全的動作
- 暴力密碼破解嘗試
- 異常的用戶端登入
在接下來的兩個練習中,您將深入了解適用於雲端的 Microsoft Defender (以及在大部分的情況下的 Azure SQL) 所會啟用的功能,以及能加以防護的案例。
資料列層級安全性
資料列層級安全性讓您能夠使用群組成員資格或執行內容,對資料庫資料表中資料列的存取。
資料列層級安全性 (RLS) 可協助您在資料列存取上進行實作限制。 例如,您可以確保員工只能存取與其部門相關的資料列。 另一個範例是將客戶的資料存取限制為只能存取與其公司相關的資料。
存取限制邏輯是位於資料庫層,而不是離開這些資料,到另一個應用程式層。 資料庫系統會在每次於任何層嘗試存取該資料時套用存取限制。 這可藉由縮小安全性系統的接觸區,讓安全性系統更加可靠和健全。
RLS 可支援兩種類型的安全性述詞。
- 篩選器述詞以無訊息方式篩選可讀取作業 (SELECT、UPDATE 及 DELETE) 的資料
- 封鎖述詞會明確封鎖違反述詞的寫入作業 (AFTER INSERT、AFTER UPDATE、BEFORE UPDATE、BEFORE DELETE)