Oracle

根據正在使用的 SQL 客戶端限制 Oracle DB 登錄

  • April 1, 2021

我們的組織中有一個基於 Oracle Forms 11g(在 Oracle Fusion Middleware/WLS 上)的應用程序。使用者可以通過在數據庫中創建的帳戶訪問應用程序(即它們存在於 中dba_users)。每個使用者都根據他們的工作領域分配了一個特定的角色,他們使用使用者 ID 登錄到應用程序。使用者可能對應用程序中的某些功能具有讀/寫訪問權限,為此他們的角色具有以下權限 -

EXECUTE ANY LIBRARY   
SELECT  ANY SEQUENCE   
EXECUTE ANY TYPE      
EXECUTE ANY PROCEDURE 
UPDATE  ANY TABLE      
SELECT  ANY TABLE      
DELETE  ANY TABLE      
EXECUTE ANY INDEXTYPE 
INSERT  ANY TABLE  

現在我們有一些使用者請求 SQL 客戶端訪問(即 TNS 設置),以便他們可以連接到數據庫並為他們的研究執行查詢。這些業務使用者當然精通 SQL,但我們希望根據他們用於登錄數據庫的客戶端類型來限制他們的訪問。除應用程序本身之外的任何客戶端都應將它們限制為“只讀”。

有沒有辦法做到這一點?

您可以使用數據庫觸發器檢查它,例如:

CREATE ROLE ROLE_POWER_USER NOT IDENTIFIED;

CREATE OR REPLACE TRIGGER LOG_T_LOGON 
   AFTER LOGON ON DATABASE
DECLARE
   
   osUser VARCHAR2(30);
   machine VARCHAR2(100); 
   prog VARCHAR2(100)
   ip VARCHAR2(15);
   
BEGIN
       
   IF ora_login_user IS NULL THEN 
       RETURN;
   END IF;
   
   SELECT OSUSER, MACHINE, PROGRAM, ora_client_ip_address
   INTO osUser, machine, prog, ip
   FROM V$SESSION 
   WHERE SID = SYS_CONTEXT('USERENV', 'SID');
   
   IF NOT DBMS_SESSION.IS_ROLE_ENABLED('ROLE_POWER_USER') THEN     
       IF LOWER(prog) <> 'your_application_name.exe' THEN
           RAISE_APPLICATION_ERROR(-20000, 'Logon denied: You must use only the official client application');
       END IF;
   ELSE
       IF LOWER(prog) NOT IN ('sqlplus.exe', 'toad.exe') THEN
           RAISE_APPLICATION_ERROR(-20000, 'Logon denied: You must use only SQL*Plus or TOAD for you private queries');
       END IF; 
   END IF;
   -- Successful login, continue as normal
END;
/

您還可以檢查其他條件,例如 IP 地址或機器名稱。

SELECT您必須以“經典”方式授予使用者或 ROLE 的表和視圖的權限。此觸發器僅阻止使用某些工具登錄到數據庫。

請注意,具有系統特權的使用者ADMINISTER DATABASE TRIGGER(例如DBA角色,或者SYS當然)永遠不會出現異常,即他們可以在任何情況下登錄到數據庫並且您不能通過觸發器阻止它。

另一個注意事項:此觸發器不安全!例如,您可以簡單地複制您的本地文件sqlplus.exe並為其命名your_application_name.exe。然後這個觸發器將允許使用它。

使用 JDBC,它甚至是一個可以設置的簡單屬性,請參閱https://stackoverflow.com/questions/42027389/programatically-set-vsession-program-property

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