大家好,
我繼承了多個桌面應用程式,這些應用程式嚴重依賴于資料操作的存盤程序。這些應用程式是用 VB6 撰寫的,我目前正試圖弄清楚如何將它們移植到 .Net 5 或 .Net 6。
我了解 Entity Framework Core 能夠執行存盤程序。但是,在我最近觀看的視頻中,我了解到 Entity Framework Core 通過存盤程序 sp_executesql 執行資料函式,以允許執行開發人員可能動態生成的任何程序。
但是,正如上面鏈接的視頻所述,這為桌面應用程式帶來了安全漏洞。要觸發 sp_executesql,桌面應用程式的用戶必須擁有可以在他們的系統上觸發它的憑據。這些值可能會被加密,但加密并非無懈可擊。
如果我創建和使用無權訪問 sp_executesql 的資料庫憑據,但可以訪問我的同事創建的存盤程序,那么物體框架是否能夠觸發后者?
uj5u.com熱心網友回復:
您可以使用“原始 SQL 查詢”直接執行您的存盤程序,而無需sp_executesql:
var customers = context.Customers.SqlQuery("dbo.sp_getcustomers");
或者:
var customers = context.Customers.SqlQuery("dbo.sp_getcustomerbyid @p1", customerID);
SqlQuery回傳延遲加載IEnumerable<T>。
順便說一句,原始 SQL 查詢不僅可以用于呼叫存盤程序,還非常有用。您可以直接執行您自己選擇的任意、格式良好的 SQL 陳述句,而不是僅僅依賴于 Entity Framework 的 SQL 生成機制(有時會產生次優的 SQL)。
進一步閱讀:
原始 SQL 查詢 (EF6)
Database.SqlQuery 方法
uj5u.com熱心網友回復:
如果我創建和使用無權訪問 sp_executesql 的資料庫憑據,但可以訪問我的同事創建的存盤程序,那么物體框架是否能夠觸發后者?
這個問題的前提是雙重錯誤的。
sp_executesql 可供所有用戶使用,并且不存在任何型別的安全漏洞。您的用戶將有權訪問 sp_executesql。
EF是不是實際上可以呼叫sp_executesql的。它將存盤程序作為 RPC 而不是 TSQL 批處理呼叫。這是內置的TDS 協議功能。但是探查器使用 sp_executesql 將 RPC 呼叫顯示為 TSQL 批處理,以便您可以將呼叫復制并粘貼到查詢視窗中進行測驗。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/371013.html
上一篇:Newtonsoft.Json.JsonReaderException:無效的JavaScript屬性識別符號字符:,
