[英]How to grant only local login access to user in Oracle 11g?
嗨,我已經閱讀了一些教程和Oracle官方文檔。 我正在嘗試創建一個只能在本地訪問實例的用戶。
例如在MySQL中是如此簡單:
如果要僅在本地主機中創建用戶:
創建用戶Bob @ localhost'pass'標識;
但是在Oracle中,我不知道該怎么做,而且看起來很復雜。
任何評論或文檔將不勝感激,謝謝。
在MySQL中,用戶是通過user
和host
的組合來標識的。 即使使用相同的user
值和不同的host
值,mysql.user中的那些行也是單獨的條目,每個行都有自己的單獨密碼和單獨的特權集。
Oracle不會這樣做。
阻止用戶從某些指定的終端或主機之外登錄的唯一方法是使用AFTER LOGON
觸發器執行某些檢查並引發異常。
作為一個粗略的示例(注意,這沒有經過測試。這將需要修改,具體取決於您要如何識別從“允許的”主機,協議,IP地址等中登錄的用戶)
CREATE OR REPLACE TRIGGER afterlogon
AFTER LOGON ON DATABASE
BEGIN
IF USERNAME='BOB' THEN
IF SYS_CONTEXT('USERENV','IP_ADDRESS') = '127.0.0.1' THEN
-- logon allowed
NULL;
ELSIF SYS_CONTEXT('USERENV','TERMINAL') = 'myserver'
-- logon allowed
NULL;
ELSE
RAISE_APPLICATION_ERROR(-20001,'Logon not allowed');
END IF;
END IF;
END;
使用AFTER LOGON
觸發器時要非常小心,該觸發器會在每次登錄時觸發。 只有具有足夠特權的帳戶才能繞過觸發器。
您需要修改要檢查的條件,以確定是否允許登錄。 SYS_CONTEXT('USERENV', )
有幾個不同的值。
另一種選擇是將用戶創建為OPS$BOB
,這是經過本地操作系統驗證的用戶。 (用戶名的前綴由OS_AUTHENT_PREFIX
參數確定,該參數的默認值(我相信)仍為'OPS$'
... ...但與MySQL明顯不同。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.