Oracle

SET_AUTHENTICATION_FROM_WALLET 呼叫返回 ACL 錯誤

  • November 19, 2018

執行 Oracle Database 12c 企業版 12.2.0.1.0 - 64 位生產。有一個包含基本身份驗證憑據的錢包設置。

PL/sql 包正在通過 https 向外部伺服器執行請求。acl 似乎設置正確,因為當我發出如下請求並執行一些操作時,我得到了結果。

D_Request_context := UTL_HTTP.CREATE_REQUEST_CONTEXT(
                                wallet_path     => D_Path,
                                wallet_password => NULL,
                                enable_cookies  => FALSE
                             );

   D_Req := UTL_HTTP.BEGIN_REQUEST(
                 url             => D_Url,
                 method          => C_METHOD,
                 http_version    => C_VERSION,
                 request_context => D_Request_context      )

如果我呼叫相同的程式碼,但包含此呼叫

  UTL_HTTP.SET_AUTHENTICATION_FROM_WALLET(
           r         => D_Req,
           alias     => 'myalias',
           scheme    => C_SCHEME,
           for_proxy => false
        ); 

我收到此錯誤:

ORA-29273: HTTP request failed
ORA-06512: at line 52
ORA-24247: network access denied by access control list (ACL)
ORA-06512: at "SYS.UTL_HTTP", line 450
ORA-06512: at "SYS.UTL_HTTP"

那麼為什麼對 BEGIN_REQUEST 的呼叫通過了 ACL,而 SET_AUTHENTICATION_FROM_WALLET 卻報錯了呢?

使用錢包也需要 ACE(ACL 的新名稱)。

SET_AUTHENTICATION_FROM_WALLET 過程

使用說明

要在錢包中使用密碼憑證,UTL_HTTP 使用者必須在錢包上具有使用密碼權限。

配置對 Oracle 錢包的訪問控制

例子:

BEGIN
DBMS_NETWORK_ACL_ADMIN.APPEND_WALLET_ACE (
 wallet_path => 'file:/home/oracle/wallet',
 ace         => xs$ace_type(privilege_list => xs$name_list('use_passwords'),
                            principal_name => 'YOUR_USER',
                            principal_type => xs_acl.ptype_db));
END;
/

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