我想知道,如何解析SQLIte查詢,並將其標記爲獲得未來在執行查詢後受到影響的條目,以便能夠在單個SQLite數據庫上設置策略?SQLite代碼分析C#
到目前爲止,我已經創建了一個接受模塊的項目。還有一個SQLite數據庫。我的目標是創建一個控制器,它將接收來自每個模塊的查詢,並從本質上檢查是否允許此模塊更改數據庫中的特定事物。
有關如何完成此任何想法?有沒有任何圖書館?我搜查了很多,但在6個月內沒有找到任何解決方案。
我想知道,如何解析SQLIte查詢,並將其標記爲獲得未來在執行查詢後受到影響的條目,以便能夠在單個SQLite數據庫上設置策略?SQLite代碼分析C#
到目前爲止,我已經創建了一個接受模塊的項目。還有一個SQLite數據庫。我的目標是創建一個控制器,它將接收來自每個模塊的查詢,並從本質上檢查是否允許此模塊更改數據庫中的特定事物。
有關如何完成此任何想法?有沒有任何圖書館?我搜查了很多,但在6個月內沒有找到任何解決方案。
解析SQLite查詢的最簡單方法是讓SQLite自己運行它們。
如果繼續使用EXPLAIN
的SQL語句,將會得到一個包含虛擬機指令(而不是實際執行查詢)的結果集。如果您查看具有opcode = 'TableLock'
的行,則p4
列將顯示受影響的表的名稱。
一個庫?可能不會。您希望的軟件很少存在。這通常意味着你必須自己構建或者沒有。
你需要的是
做這一切的是簡單的使用傳統的靜態分析技術,你可能要學點讀筆他如果你想編碼自己的答案。
要在數據庫上設置的策略,你可以使用一個Compile-Time Authorization Callback:在編譯過程中
在不同的點,爲正在創建的邏輯來執行各種操作時,授權調用回調函數,看看那些行動是允許的。授權人回調應該返回SQLITE_OK以允許操作SQLITE_IGNORE禁止特定的操作,但允許繼續編譯SQL語句,或者SQLITE_DENY導致整個SQL語句被拒絕並出現錯誤。
授權人員在準備來自不受信任源的SQL語句時使用,以確保SQL語句不會嘗試訪問他們不被允許查看的數據,或者他們不會嘗試執行損壞數據庫。
需要處理來自不受信任來源的SQL的應用程序還可能考慮使用sqlite3_limit()降低資源限制,並使用max_page_count PRAGMA限制數據庫大小以及使用授權程序。
但是,您必須擴展您的C#數據庫驅動程序才能使此API可用。
這聽起來像一個XY問題。當然,問題_「如何找出SQL查詢要觸及哪個表和行」是可以回答的,但答案將不實際。你想做什麼_exactly_?那些「模塊」是什麼以及是誰創造的?有一個原因(例如)插件系統公開一個API,而不是原始數據源。 – CodeCaster
看來你是對的。我非常關注解析sql查詢,完全忽略了創建一個可以完成這項工作的api的可能性。我猜我傻了。 – Devian
這聽起來與[授權回調](http://www.sqlite.org/c3ref/set_authorizer.html)相似。 –