簡體   English   中英

SQL Server安全性-存儲過程

[英]SQL Server security - stored procedures

我正在嘗試在我們的應用程序(主要由使用SQL Server存儲過程的網站組成)上實現安全性。

Microsoft似乎建議最佳實踐是將所有數據功能包裝在我們已完成的存儲過程中。 我們的結構類似於:

  • SQL Server數據庫- [data1]
  • SQL Server數據庫- [webSPs]
  • PHP / Symfony網絡應用

所有數據都駐留在[data1]中的表中,並且在同一服務器上是另一個“數據庫”,其中僅包含Web應用程序使用的存儲過程。

SQL Server具有登錄名“ webapp”,作為[webSPs]上的用戶,其權限僅用於運行[webSPs]的存儲過程。

但是,當這些存儲過程在[data1]表上讀取,寫入和追加數據時,該用戶必須是[data1]db_datawriterdb_datareader數據庫角色的成員。

這一切都很好,但是這里的安全性似乎有漏洞,因為訪問[webSPs]的用戶不僅可以運行存儲過程,而且可以寫入任何基礎表,而且可能會授予如下權限:就像是:

您只能通過SP讀取/寫入此數據庫上的表-不能直接

從我所讀的內容中,我認為如果沒有第二個數據庫,我認為它會破壞所有權鏈接,那么它將像我希望的那樣工作。

先感謝您。

是的,但坦率地說,實施起來很痛苦。 您可以使用模塊簽名。 本質上,您:

  1. 在WebSps數據庫中創建一個證書。
  2. 將證書備份並還原到data1數據庫
  3. 從證書創建用戶
  4. 向data1中基於證書的用戶授予任何讀寫權限
  5. 通過調用add signature語法,對要與證書一起使用跨數據庫的任何存儲過程進行add signature

請記住,每次更改過程(通過alter或drop and create)時,簽名都會丟失。 因此,您將處於不斷的重新簽名周期中。 您可以在此處閱讀有關模塊簽名過程的更多信息

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM