首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> SQL Server 資料庫 >> 關於SqlServer

SQL Server 資料庫安全最佳實務:拒絕直接存取資料表

     編輯:關於SqlServer

核心原則

永遠不要給使用者直接存取資料表的權限。 若需讓使用者透過 Access 等工具互動,僅授予檢視表與預存程序的權限。

所有權鏈結

若預存程序擁有者為 dbo,且其參考的資料表/檢視表擁有者同為 dbo,則授予使用者對預存程序的 EXECUTE 權限即足夠,SQL Server 將不再檢查底層資料表的權限(所有權鏈結機制)。

進階控管手段

  • 預存程序內嵌商業邏輯:控制可存取的欄位與列(行級安全性)。
  • 檢視表:另一種阻擋直接存取資料表的途徑,可授予 SELECT/INSERT/UPDATE/DELETE 權限,預存程序僅能授 EXECUTE。

跨資料庫查詢的所有權陷阱

執行跨資料庫查詢時,所有權鏈結不跨資料庫生效。若三個資料庫的擁有者不同,即使登入皆為 sysadmin 角色,仍無法直接聯結。解法:

  1. 將相關資料庫擁有者統一為同一帳號(如 sa)。
  2. 或使用 sp_changedbowner 變更資料庫擁有者。
  3. 或在預存程序中以動態 SQL + EXECUTE AS 處理跨庫存取。

總結

採用「僅授權預存程序/檢視表 + 統一 dbo 擁有權」策略,可大幅簡化權限管理、強化安全性、避免權限鏈斷裂導致的跨庫查詢失敗。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved