Oracle
SET_AUTHENTICATION_FROM_WALLET 呼叫返回 ACL 錯誤
執行 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 使用者必須在錢包上具有使用密碼權限。
例子:
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; /