永遠不要給使用者直接存取資料表的權限。 這是建立安全資料庫的第一要訣。
SELECT、INSERT、UPDATE、DELETE 於檢視表,或 EXECUTE 於預存程序。dbo,且其參考的資料表/檢視表擁有者同為 dbo,授與 EXECUTE 權限即可,資料庫引擎將不再檢查底層資料表權限 (擁有權鏈結)。透過預存程序參數與邏輯,精確控制使用者可存取的欄位與列 (Row-Level Security),例如依部門、職位過濾資料。
檢視表可授與 SELECT/INSERT/UPDATE/DELETE 等細緻權限,預存程序僅能授 EXECUTE。視情況選擇適當物件。
跨資料庫查詢時,擁有權鏈結要求所有參與資料庫的擁有者 (DBO) 必須為同一登入帳號。若資料庫擁有者不同 (即使皆為 sysadmin 角色),鏈結將中斷,導致權限檢查失敗。解決方式:使用 sp_changedbowner 統一資料庫擁有者,或改用憑證/模組簽署 (SQL Server 2005+)。
「不給資料表直接權限、善用擁有權鏈結、在程序/檢視表封裝邏輯」三大原則,配合統一資料庫擁有者,能為 SQL Server 7.0 建立極具彈性且安全的存取控制模型。