簡體   English   中英

如何在Oracle 11g中僅向用戶授予本地登錄訪問權限?

[英]How to grant only local login access to user in Oracle 11g?

嗨,我已經閱讀了一些教程和Oracle官方文檔。 我正在嘗試創建一個只能在本地訪問實例的用戶。

例如在MySQL中是如此簡單:

如果要僅在本地主機中創建用戶:

創建用戶Bob @ localhost'pass'標識;

但是在Oracle中,我不知道該怎么做,而且看起來很復雜。

任何評論或文檔將不勝感激,謝謝。

在MySQL中,用戶是通過userhost的組合來標識的。 即使使用相同的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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM