Sql-Server
SQL 語句層過濾查詢限制訪問
目標:想要創建一個所謂的“SQL 語句層”來檢查/過濾所有傳入的查詢。如果傳入查詢無效,則應拒絕。
案例:限制數據庫訪問並避免不可恢復的查詢。在多個應用程序中沒有關於相同“觸發器或過程”(集中式)的重複程式碼。
迄今為止的研究:
- 贈款/特權
- 限制儲存過程
描述:我站在一個新項目面前,我們想要限制和最小化對數據庫的訪問。例如:開發者可以
DROP
在應用層創建一個查詢,但是數據庫會拒絕這個查詢,因為DROP
不允許查詢。幾年前,我在 Laravel 工作,並在應用層內完成了大部分“過程和触發器”工作,比如控制器,而不是使用 Mutator 或 Accessor。現在我們希望將其減少到盡可能低的級別,以避免在不同的應用程序中重複程式碼,如 Mutators 和 Accessors。
問題:Grants 和儲存過程是唯一的方法嗎?如果不是,是哪些?
我不太確定是否將內置特權系統與在儲存過程中封裝部分或全部 SQL 程式碼相結合是唯一的方法,但它肯定是限制對數據庫的訪問*的明智方法。*當然,您可以自由地介紹自己的系統,但根據我目前所學到的,沒有必要重新發明輪子。
花點時間決定您可能需要哪些不同級別的訪問權限,並相應地創建數據庫角色,根據角色定義為不同的對象授予不同類型的權限。創建使用者帳戶並將其分配給角色。讓您的應用程序提供一個請求登錄憑據的對話框,並使用這些對話框來呼叫需要執行的任何 SQL 指令,無論是儲存過程呼叫還是臨時查詢。該指令將根據伺服器級別決定的權限執行或不執行。
同樣,這是管理數據庫訪問的常用方法。不尋常的場景可能需要不尋常的方法,但如果不使用內置安全性的原因僅僅是因為它使開發人員的生活更輕鬆,我的建議是重新考慮。