问题描述
嗨,
我在包内进行https调用时遇到问题。它似乎不承认为访问acl所授予的特权。
当我在匿名plsql块中调用utl_http.开始_request时,或在authid定义为当前用户的过程中调用utl_http.开始_request时,我得到一个连接(尽管是一个连接抱怨缺少证书) ,但如果该过程是使用默认设置创建的(即定义)它抱怨网络访问。如果我创建了对角色的特权,我就能理解它,但在为用户创建特权时就不能理解它。是否有任何方法可以解决这个问题,否则我将不得不单独授予数据库中每个用户的访问权限
已连接到Oracle Database 11g Enterprise Edition 11.2.0.3.0版
以sdddba@dev24_DRACO身份连接
SQL>创建由acltest标识的用户acltest ;
用户已创建
SQL>授予到acltest的连接;
授权成功
SQL>将dba授予acltest ;
授权成功
SQL>声明
2 acl_nom varchar2(100) :='/sys/acls/domtest.xml';
3开始
4 dbms_网络_acl_admin.创建_acl (
5 acl => acl_nom ,
6描述=>'mytest acl',
7个主要的=>'ACLTEST',
8为_允许=>为真,
9特权=>'连接',
10 start_date =>系统时间戳,
11 end_date =>空) ;
12
13 dbms_网络_acl_admin.分配_acl(acl => acl_nom ,
14个主机=>
,
15下端口=> 443 ,
16上端口=> 443) ;
17结束;
18
PL/SQL过程已成功完成
SQL>声明
2 v_req utl_http.req ;
3开始
4 v_req := utl_http.开始_request(' https://
',
5'后',
6 utl_http.http_version_1_1) ;
7结束;
8
宣布
v_req utl_http.req ;
开始
v_req := utl_http.开始_request('https:
',
'开机自检',
utl_http.http_version_1_1) ;
结束;
ORA-29273 : HTTP请求失败
ORA-06512 : "SYS.UTL_HTTP" ,行1130
ORA-29024 :证书验证失败
ORA-06512 :在第4行
SQL>将过程myproc创建为或替换为
2
2 v_req utl_http.req ;
3开始
4 v_req := utl_http.开始_request(' https://preprod-ncd.mibhub.org.uk/ncd/api/v1_0/enquire',--'https://preprod-ncd.mibhub.org.uk/ncd/api/v1_0/enquire:443',
5'后',
6 utl_http.http_version_1_1) ;
7结束;
8
过程已创建
SQL> 开始
2 myproc ;
3 结束;
4
开始
myproc ;
结束;
ORA-29273 : HTTP请求失败
ORA-06512 : "SYS.UTL_HTTP" ,行1130
ORA-24247 :网络访问被访问控制列表(ACL)拒绝
ORA-06512 : "ACLEST.MYPROC" ,第4行
ORA-06512 :在第2行
SQL>将过程myproc authid当前用户创建为或替换为
2
2 v_req utl_http.req ;
3开始
4 v_req := utl_http.开始_request(' https://preprod-ncd.mibhub.org.uk/ncd/api/v1_0/enquire',--'https://preprod-ncd.mibhub.org.uk/ncd/api/v1_0/enquire:443',
5'后',
6 utl_http.http_version_1_1) ;
7结束;
8
过程已创建
SQL> 开始
2 myproc ;
3 结束;
4
开始
myproc ;
结束;
ORA-29273 : HTTP请求失败
ORA-06512 : "SYS.UTL_HTTP" ,行1130
ORA-29024 :证书验证失败
ORA-06512 : "ACLEST.MYPROC" ,第4行
ORA-06512 :在第2行
我不确定我是否理解了你的问题,但这里有一个定义程序被传递给其他用户的示例,即,我只将ACL授予ACLEST ,但SCOTT可以执行该进程,例如
我在包内进行https调用时遇到问题。它似乎不承认为访问acl所授予的特权。
当我在匿名plsql块中调用utl_http.开始_request时,或在authid定义为当前用户的过程中调用utl_http.开始_request时,我得到一个连接(尽管是一个连接抱怨缺少证书) ,但如果该过程是使用默认设置创建的(即定义)它抱怨网络访问。如果我创建了对角色的特权,我就能理解它,但在为用户创建特权时就不能理解它。是否有任何方法可以解决这个问题,否则我将不得不单独授予数据库中每个用户的访问权限
已连接到Oracle Database 11g Enterprise Edition 11.2.0.3.0版
以sdddba@dev24_DRACO身份连接
SQL>创建由acltest标识的用户acltest ;
用户已创建
SQL>授予到acltest的连接;
授权成功
SQL>将dba授予acltest ;
授权成功
SQL>声明
2 acl_nom varchar2(100) :='/sys/acls/domtest.xml';
3开始
4 dbms_网络_acl_admin.创建_acl (
5 acl => acl_nom ,
6描述=>'mytest acl',
7个主要的=>'ACLTEST',
8为_允许=>为真,
9特权=>'连接',
10 start_date =>系统时间戳,
11 end_date =>空) ;
12
13 dbms_网络_acl_admin.分配_acl(acl => acl_nom ,
14个主机=>
15下端口=> 443 ,
16上端口=> 443) ;
17结束;
18
PL/SQL过程已成功完成
SQL>声明
2 v_req utl_http.req ;
3开始
4 v_req := utl_http.开始_request(' https://
5'后',
6 utl_http.http_version_1_1) ;
7结束;
8
宣布
v_req utl_http.req ;
开始
v_req := utl_http.开始_request('https:
'开机自检',
utl_http.http_version_1_1) ;
结束;
ORA-29273 : HTTP请求失败
ORA-06512 : "SYS.UTL_HTTP" ,行1130
ORA-29024 :证书验证失败
ORA-06512 :在第4行
SQL>将过程myproc创建为或替换为
2
2 v_req utl_http.req ;
3开始
4 v_req := utl_http.开始_request(' https://preprod-ncd.mibhub.org.uk/ncd/api/v1_0/enquire',--'https://preprod-ncd.mibhub.org.uk/ncd/api/v1_0/enquire:443',
5'后',
6 utl_http.http_version_1_1) ;
7结束;
8
过程已创建
SQL> 开始
2 myproc ;
3 结束;
4
开始
myproc ;
结束;
ORA-29273 : HTTP请求失败
ORA-06512 : "SYS.UTL_HTTP" ,行1130
ORA-24247 :网络访问被访问控制列表(ACL)拒绝
ORA-06512 : "ACLEST.MYPROC" ,第4行
ORA-06512 :在第2行
SQL>将过程myproc authid当前用户创建为或替换为
2
2 v_req utl_http.req ;
3开始
4 v_req := utl_http.开始_request(' https://preprod-ncd.mibhub.org.uk/ncd/api/v1_0/enquire',--'https://preprod-ncd.mibhub.org.uk/ncd/api/v1_0/enquire:443',
5'后',
6 utl_http.http_version_1_1) ;
7结束;
8
过程已创建
SQL> 开始
2 myproc ;
3 结束;
4
开始
myproc ;
结束;
ORA-29273 : HTTP请求失败
ORA-06512 : "SYS.UTL_HTTP" ,行1130
ORA-29024 :证书验证失败
ORA-06512 : "ACLEST.MYPROC" ,第4行
ORA-06512 :在第2行
我不确定我是否理解了你的问题,但这里有一个定义程序被传递给其他用户的示例,即,我只将ACL授予ACLEST ,但SCOTT可以执行该进程,例如
SQL> conn / as sysdba Connected. SQL> create user acltest identified by acltest; User created. SQL> grant connect to acltest; Grant succeeded. SQL> grant dba to acltest; Grant succeeded. SQL> declare 2 acl_nom varchar2(100) := '/sys/acls/domtest.xml'; 3 begin 4 dbms_network_acl_admin.drop_acl (acl => acl_nom); 5 end; PL/SQL procedure successfully completed. SQL> declare 2 acl_nom varchar2(100) := '/sys/acls/domtest.xml'; 3 begin 4 dbms_network_acl_admin.create_acl ( 5 acl => acl_nom, 6 description => 'mytest acl', 7 principal => 'ACLTEST', 8 is_grant => true, 9 privilege => 'connect', 10 start_date => systimestamp, 11 end_date => null); 13 dbms_network_acl_admin.assign_acl(acl => acl_nom, 14 host => '*', 15 lower_port => 443, 16 upper_port => 443); 18 END; 19 / PL/SQL procedure successfully completed. SQL> commit; Commit complete. SQL> connect acltest/acltest Connected. SQL> create or replace procedure acltest.myproc as 2 v_req utl_http.req; 3 begin 4 v_req := utl_http.begin_request('https://preprod-ncd.mibhub.org.uk/ncd/api/v1_0/enquire','POST',utl_http.http_version_1_1); 5 end; Procedure created. SQL> grant execute on acltest.myproc to public; Grant succeeded. SQL> connect acltest/acltest Connected. SQL> exec acltest.myproc BEGIN acltest.myproc; END; ERROR at line 1: ORA-29273: HTTP request failed ORA-06512: at "SYS.UTL_HTTP", line 1130 ORA-29024: Certificate validation failure ORA-06512: at "ACLTEST.MYPROC", line 4 ORA-06512: at line 1 SQL> connect scott/tiger Connected. SQL> exec acltest.myproc BEGIN acltest.myproc; END; ERROR at line 1: ORA-29273: HTTP request failed ORA-06512: at "SYS.UTL_HTTP", line 1130 ORA-29024: Certificate validation failure ORA-06512: at "ACLTEST.MYPROC", line 4 ORA-06512: at line 1