對查詢執行進行驗證的制作方法
【專利說明】對查詢執行進行驗證
【背景技術】
[0001] 在關系數據庫管理系統從用戶接收查詢時,系統產生查詢計劃以執行請求。在某 些情況下,產生查詢計劃是昂貴的,因此查詢及其關聯的計劃被存儲在本地緩存中。如果在 將來的某個時候請求了同一查詢,則保存的查詢和計劃可以通過重復使用較早產生的查詢 計劃來節約時間。
【附圖說明】
[0002] 附圖圖示本文描述的原理的各種示例并且是說明書的一部分。圖示的示例僅僅是 示例,并不限制權利要求的范圍。
[0003] 圖1是根據本文描述的原理的驗證系統的示例的示意圖。
[0004] 圖2是根據本文描述的原理的查詢識別表的示例的示意圖。
[0005] 圖3是根據本文描述的原理的中央散列表的示例的示意圖。
[0006] 圖4是根據本文描述的原理的用于對查詢執行進行驗證的方法的示例的示意圖。
[0007] 圖5是根據本文描述的原理的驗證系統的示例的示意圖。
[0008] 圖6是根據本文描述的原理的驗證系統的示例的示意圖。
【具體實施方式】
[0009] 因為避免了重復查詢計劃的產生,因此重復使用保存至本地緩存的查詢可以節約 時間和資源。然而,查詢的條件可能隨著時間而改變。例如,第一次用戶請求查詢,用戶具有 實施請求的權限,并且編譯的查詢計劃可以被緩存。隨后,用戶可以請求同一查詢。然而,在 第一次和后一次之間的時間流逝期間,用戶的權限可能已經改變以阻止用戶運行查詢。在 時間流逝期間,其他條件可能已經改變,像查詢索引可能已經改變、行可能已經被添加至數 據庫表、數據庫對象之間的關系可能已經改變、其他條件可能已經改變、或上述條件的組 合。這些關系可以包括觸發器、參照完整性約束、視圖、其他類型的關系或其組合。因此,以 其最初的形式重復使用保存的查詢計劃可能是不正確的或不理想的。
[0010] 本文描述的原理包括用于對適用于單個計算機以及服務器集群兩者的查詢執行 進行驗證的方法。這樣一種方法可以包括確定查詢的條件是否已經改變,以及如果條件已 經改變則重新編譯查詢。這樣一種方法的細節將在下面更詳細地描述。
[0011]在下面的描述中,出于解釋的目的,提出許多具體細節以便提供本系統和方法的 徹底理解。然而,對于本領域技術人員將顯而易見的是,可在沒有這些具體細節的情況下實 踐本裝置、系統和方法。說明書中引用的"示例"或類似的語言意思是描述的特定特征、結構 或特性被包括在至少該一個示例中,而不一定在其他示例中。
[0012]圖1是根據本文描述的原理的驗證系統(100)的示例的示意圖。在此示例中,條件 改變發布器(102)發布數據庫條件的改變,并且密鑰產生器(104)產生反映該改變的無效密 鑰。密鑰,或者這種像散列值一樣的密鑰的衍生物,被記錄在密鑰公布表(106)中。表修改器 將行或多個行插入密鑰公布表(106)以反映該改變。
[0013] 密鑰可以包括任意適當類型的信息。在一些示例中,密鑰包括主題字段、對象字段 和類型字段。主題字段可以識別受改變影響的一個用戶或多個用戶。對象字段可以識別受 改變影響的數據庫對象。類型字段可以識別改變的類型。例如,如果改變是撤銷第一用戶訪 問諸如數據庫中表A的表權限,則密鑰可以由{:第一用戶、表A、撤銷}表示,其中第一用戶被 插入到主題字段,表A被插入到對象字段,并且撤銷被插入到類型字段。在一些示例中,權限 改變僅是表的一部分。在這種示例中,撤銷訪問表的該部分的權限不會影響用戶訪問該表 其他部分的能力。
[0014] 在密鑰包括識別受改變影響的用戶的信息時,識別的用戶之外的其他用戶不會受 改變影響。例如,第二用戶不會受僅識別第一用戶的密鑰影響。因此,由第二用戶提交的查 詢不會經歷任何差異,而第一用戶可以被拒絕訪問同一提交查詢。
[0015] 密鑰公布表(106)可以包括影響數據庫的每個改變條件的行。例如,如果允許訪問 表A的權限針對第一用戶而撤銷,則表修改器可以插入識別這個改變的行。如果改變影響多 個用戶或多個對象,則多個行可以被表修改器插入到密鑰公布表(106)中。例如,如果改變 包括針對第一用戶和第二用戶的撤銷,則兩個新的行可以被插入到密鑰公布表(106)中,每 個用戶一個行。在另一示例中,如果第一用戶訪問表A和表B的權限被撤銷,則兩個行可以被 添加至密鑰公布表(106),每個對象(表A和表B)-個行,并且兩個都指示第一用戶作為主 題。
[0016] 第一節點(108)可以包括查詢驗證監控進程(110)和主執行器(112)。主執行器 (112)可以與包括消息廣播器(116)的運行時間管理系統(114)通信。查詢驗證進程監控器 (110)可以接收被發布的每個成功的撤銷聲明的通知。在一些示例中,通知包括密鑰中的信 息,信息諸如主題、對象、類型或包括在密鑰中的其他信息。在其他示例中,通知包括表示主 題、對象、類型或包括在密鑰中的其他信息的散列值。在又一個示例中,通知只包括改變的 通知,并且查詢驗證進程監控器(110)從元數據或另一個位置主動獲取改變。
[0017] 第一節點(108)的主執行器(112)可以將消息發送至指示已經存在改變的運行時 間管理系統(114)。運行時間管理系統(114)可以促使消息廣播器(116)或另一個發送機構 來將密鑰或其信息發送至網絡中的其他節點。這些其他節點(118、120)可以包括能夠使用 網絡資源執行查詢的其他本地主執行器(122)。這些節點(118、120)可以在任意給定時間上 共同運行多個查詢。例如,這些節點(118、120)可以在任意給定時間上執行許多查詢。雖然 此示例只使用兩個附加節點(118、120)來描繪,但是可以使用任意適當數量的節點。
[0018] 節點(118、120)的查詢語言統計控制進程(124)可以從消息廣播器(116)接收廣播 的消息。統計控制進程(124)可以將消息寫入與本地主執行器(122)共享的存儲器(126)。以 這種方式,本地主執行器(122)意識到改變已經被作出。本地緩存(128)存儲之前執行的查 詢,并且重新使用這些查詢來通過避免重新作出之前實施的查詢計劃產生而節約時間和資 源。本地主執行器(122)可以促使編譯器(130)重新編譯緩存或只重新編譯緩存的一部分, 以使用改變來更新存儲的查詢。
[0019] 如本文所使用的,編譯器(130)是將文本查詢轉換成適用于被數據庫系統執行的 格式的引擎。例如,寫入共享存儲器(126)的密鑰信息或改變可以被重新寫入查詢,使得最 初查詢被轉換以反映將影響查詢執行的當前條件。
[0020] 在一些示例中,本地主執行器(122)使用統計控制進程(124)來檢查共享存儲器 (126),以確定在執行查詢之前是否已經作出改變。如果已經作出改變,則本地主執行器 (122)可以促使存儲相關查詢的緩存的至少部分在執行該查詢之前被重新編譯。
[0021 ]在其中第一用戶訪問表A的權限在第一提交查詢和第二提交查詢之間的時間流逝 被撤銷的示例中,本地主執行器(122)將拒絕第一用戶訪問表A,即使本地主執行器(122)正 重新使用已經最初給予第一用戶訪問表A的保存的查詢計劃。除了只反映權限改變之外,保 存的查詢還可以被更新以反映其他改變。例如,如果包括在保存的查詢的查詢計劃中的關 系數據庫中的表之間的關系存在改變,則執行計劃可以被更新以反映此關系改變。
[0022]圖2是根據本文描述的原理的查詢識別表(200)的示例的示意圖。在此示例中,查 詢識別表(200)包括查詢識別列(202)、驗證狀態列(204)和無效密鑰列(206)。查詢識別表 (200)可以使用每個本地主執行器本地存儲。
[0023] 本地主執行器可以使用查詢識別表(200)以確定存儲在緩存中的查詢中的哪一些 與無效密鑰中的每一個關聯。例如,如果對與編號2的保存的查詢對應的查詢進行實施的請 求從第一用戶接收,則本地主執行器可以查找與編號2的查詢關聯的無效密鑰。如果編號2 的查詢具有指示第一用戶可能不再具有適當的權限訪問查詢中引用的表的無效密鑰,則本 地主執行器可以將查詢重新提交至編譯器。編譯器可以確定第一用戶是否仍然具有適當的 權限訪問表,或是否采取一些其他適當動作。在一些示例中,密鑰每一個消耗10比特的空 間。然而,可以使用任意適當的空間量。
[0024] 查詢識別表可以是現有數據結構。驗證狀態列可以具有"是"或"否"的狀態。每個 查詢識別符以驗證"是"的狀態開始。隨后,由條件改變發布器發布的撤銷聲明可以促使驗 證狀態改變為"否"的狀態。無效密鑰列(206)包括無效密鑰列表,每個密鑰消耗10比特的空 間。
[0025]在一些示例中,針對其編譯的每個數據操作語言(DML)語句,SQL編譯器生成被稱 為安全無效密鑰的密鑰列表。安全無效密鑰的結構可以包括主題的散列值(持有權限的用 戶或角色)、對象的散列值(表、視圖、存儲過程、用戶限定功能、權限被授予的模式或角色) 和動作的類型(諸如選擇動作、插入動作、刪除動作、更新動作等)。安全無效密鑰的這三個 部件還可以被反映在任意撤銷聲明的結構中