Security

有許多外鍵引用單個表是否存在任何安全風險?

  • May 25, 2017

我有一位老師告訴我,擁有一個包含大約 60% 其他表引用的表的數據庫是安全禁忌。問題是他沒有解釋為什麼這是一個安全風險。

在此處輸入圖像描述

這擴大了可信度的範圍。我唯一能想到的是,通過故意造成參照完整性錯誤,攻擊者能夠收集錯誤消息並從底層模式中獲取資訊。

但是,如果攻擊者能夠做到這一點,您就會有更大的擔憂。

我相信,風險是什麼——我相信,如果您在拒絕帳戶直接訪問對象時忽略了對象的 REFERENCES 權限,則 REFERENCES 可用於讀取某人不應該能夠讀取的數據至少從引用的鍵列中讀取。關鍵列可能是銀行帳號或 SSN。至少,您可以利用它來查找數據值 ABCDEF 是否在表中。Oracle 的文件說“保守地授予特權”,這意味著根本不授予它們,理想情況下明確拒絕它們。尤其是讓他們遠離不需要對您的數據庫擁有權限的“公共”或“訪客”帳戶。

在高標準伺服器(我使用 Microsoft SQL Server)上,當表 A 被表 B 以及表 C 到 Z 引用時,這可能會得到緩解,但其他表本身有權查找表 A 中的外鍵,它不是使用者的權利。除非使用者可以更新表 M 中的數據,這允許他們再次探查表 A 中保存的數據的值。

至於安全性以外的風險……鑰匙放在那里以供參考。如果一個表被所有其他表引用,一個好的伺服器不應該崩潰,儘管在“我用 Javascript 編寫我自己的 SQL Server”(我希望這是虛構的)中可能會出錯。當然,如果一個鍵列被關係和查詢大量引用,則必須仔細考慮其規範和索引。例如,Microsoft SQL 允許列 A 和 B 上的索引作為表數據的單獨副本執行,並允許列 C、D 和 E 也包含在分身表中(INCLUDE 關鍵字)。同時,另一個索引也在鍵 A 和 B 上,列 F 和 G 也包括在內。如果這代表了您最常進行的兩個查詢,那麼這是一個需要考慮的設計。

此外,根據經驗,如果需要在所有表中更改您經常引用的數據鍵,同時保持其餘數據相同,那將非常不方便。例如,如果它是客戶的電話號碼(比如說這是電話公司數據庫),那麼您必須在騷擾電話後更改客戶的電話號碼。好吧,這就是不在整個數據庫中使用這種數字作為鍵的原因——即使使用這個方便的值在表 PDQOK 的查詢中查找數據非常方便。或者,更糟糕的是,那個客戶退出了——然後,你把他們的號碼發給其他人……

引用自:https://dba.stackexchange.com/questions/156983