如何防止 DBA 以外的使用者創建數據庫連結
首先,請記住我是一個非常綠色的 DBA。我已經進行了先前的研究,並沒有真正發現任何有希望的東西,或者可能看起來就是這樣,因為我仍在努力理解甲骨文這個怪物。因此,如果我的問題聽起來很武斷,請原諒我並指出正確的方向。
設想:
- 一些使用者創建數據庫連結到幾個重型數據倉庫。
- 這些使用者忽略關閉或刪除數據庫連結。
- users 程序繼續執行並拖慢 DW 的性能。
目標:
- 阻止這些使用者創建數據庫連結,但仍然允許 DBA 創建數據庫連結
怎麼可能做到這一點?答案是否在 OID 能力範圍內?似乎對我來說可能有,但我對Oracle的理解似乎不足以確定。
更新: 調查使用者權限後,我發現權限不是問題。只需一條 select 語句,無需 dblink 即可訪問遠端數據庫。撤銷
CREATE DATABASE LINK
權限不會阻止使用者從數據庫 A 訪問數據庫 B。但是,這僅在
DB_DOMAIN
= “blank” 和全域名稱 = “fooDB” 時才成立如果
DB_DOMAIN
= foo.com 且全域名稱 = “fooDB.foo.com”,則需要連結我找不到任何與這種情況類似的文件或解釋為什麼會發生這種情況的文件。為什麼全域名稱=“fooDB.foo.com”時需要創建連結,而全域名稱=“fooDB”時不需要?
我認為你是從錯誤的角度來解決這個問題的。數據庫連結包括連接遠端伺服器的使用者 ID 和密碼;如果遠端伺服器上不存在使用者 ID 或不允許連接,則問題不存在。如果您不希望某些使用者對您的數據倉庫執行查詢,請不要在那裡授權他們。
如果您檢查 SQL 參考,您將看到使用者需要
CREATE DATABASE LINK
創建這些連結的權限。您可以撤銷某些使用者的權限,但這不會阻止他們直接連接到遠端數據庫並在那裡執行他們的查詢。
如果您不希望使用者創建數據庫連結,請不要授予他們
CREATE DATABASE LINK
orCREATE PUBLIC DATABASE LINK
權限。我的猜測是,您授予了開發人員一個您沒有意識到擁有該特權的
CONNECT
角色——至少在某些版本的 Oracle 中,該角色包括CREATE DATABASE LINK
. 我認為這在最近的版本中已被刪除,但我需要驗證這一點。這是使用預定義角色的眾多原因之一,CONNECT
並且RESOURCE
在生產環境中非常不鼓勵使用 - 與它們相關的特權通常比您想要的要廣泛得多(或比名稱暗示的要多),並且它們往往會隨著時間而改變。您最好創建自己的角色,授予這些角色您的使用者實際需要的任何權限,並將這些自定義角色授予您的使用者。至於使用者查詢使數據倉庫陷入困境的潛在問題,我傾向於希望您希望在數據倉庫上使用資源管理器來限制低優先級使用者在資源爭用時獲得的資源。您也許能夠擺脫基於配置文件的更輕量級的解決方案,以及對任何單個查詢在被終止之前可以消耗的資源量設置硬上限。但是,資源管理器是一組更強大的工具來確定請求的優先級。