需求:
我有一個SSIS項目將運行SQL Server中的數據,可能使用集成身份驗證登錄到SQL Server。 該項目包含一個部分,允許最終用戶將選擇查詢添加爲一個數據流的源。 (該產品允許用戶在配置文件中添加數據分類和過濾類型規則)。
我希望用戶提供的查詢在只讀訪問的限制環境中運行。對於某人通過在他們的查詢中添加DELETE
或DROP
來垃圾數據庫一定是不可能的。在SSIS數據源中切換上下文
首過解決方案:
在數據庫上創建一個只讀用戶,並使用EXECUTE AS ... WITH NO REVERT
將查詢的上下文限制爲只讀用戶。不幸的是,這並沒有完全奏效。 SSIS在數據源組件中使用預準備語句,並且SQL Server在預準備語句中不允許。
問題:
有沒有辦法強制SSIS使用ad-hoc查詢來代替OLEDB數據源組件中的預處理語句?
或...是否有另一種方法來強制SSIS更改數據源組件的執行上下文?
我還有一個解決方案:使用腳本組件源。腳本組件可以通過許多方式設置用戶上下文。
我已經在使用來自變量的SQL命令來獲取用戶提供的查詢到數據源中。問題在於SSIS自動將其包裝在sp_prepare中,並且在這種情況下,SQL Server將不接受'WITH NO REVERT'。只要我不能使用'WITH NO REVERT',智能用戶就可以通過在他們的查詢中加入'REVERT'來打破只讀環境。我需要解決的問題是強制用戶留在只讀上下文中。這可能是通過阻止SSIS使用'sp_prepare'(即:使用臨時的,未準備好的語句)。 –