oracle 触发器中使用UTL_INADDR.GET_HOST_ADDRESS时出现ORA-24247的解决方法

最近数据库中有张表要用触发器把本机的IP取出来,写到另一张表,使用了UTL_INADDR.GET_HOST_ADDRESS(),结果触发器在执行时报ORA-24247错误。在9i上不会报错,在11G上报错。好容易在网上找到了解决方法,三个步骤解决,在oracle 11GR2 for linux上成功取到了IPV4的IP,记下来:

用sys用户通过sqlplus连接数据库:sqlplus / as sysdba,然后执行以下三个存储过程。

1 创建 ACL

 begin
 dbms_network_acl_admin.create_acl (
 acl => 'UTL_INADDR.xml',
 description => 'utl_inaddr',
 principal => 'MYDBUSER',   --即将要为之授权的用户,要大写,小写会报找不到该用户
 is_grant => TRUE,
 privilege => 'resolve'
 );
 commit;
 end;
 /

2  增加权限

begin
 dbms_network_acl_admin.add_privilege (
 acl => 'UTL_INADDR.xml',
 principal => 'MYDBUSER',  --即将要为之授权的用户,要大写,小写会报找不到该用户
 is_grant => TRUE,
 privilege => 'connect'
 );
 commit;
 end;
 /

3  授予用户权限
 

 begin
 dbms_network_acl_admin.assign_acl(
 acl => 'UTL_INADDR.xml',
 host => '*'
 );
 commit;
 end;
 /

延伸:
1、如果想查看一下数据里有几个ACL文件呢?如下:

SELECT * FROM DBA_NETWORK_ACLS

2、如果想看看ACL都为哪些用户授权了呢?如下:

SELECT * FROM DBA_NETWORK_ACL_PRIVILEGES

 

 

网上找到一个比较全的对于以上命令的解释,原文地址:https://blog.csdn.net/zxnlmj/article/details/22877743

begin
  dbms_network_acl_admin.create_acl (       -- 创建访问控制文件(ACL)
    acl         => 'utl_http.xml',          -- 文件名称
    description => 'HTTP Access',           -- 描述
    principal   => 'ITS',                   -- 授权或者取消授权账号,大小写敏感
    is_grant    => TRUE,                    -- 授权还是取消授权
    privilege   => 'connect',               -- 授权或者取消授权的权限列表
    start_date  => null,                    -- 起始日期
    end_date    => null                     -- 结束日期
  );
 
  dbms_network_acl_admin.add_privilege (    -- 添加访问权限列表项
    acl        => 'utl_http.xml',           -- 刚才创建的acl名称 
    principal  => 'ITS',                    -- 授权或取消授权用户
    is_grant   => TRUE,                     -- 与上同 
    privilege  => 'resolve',                -- 权限列表
    start_date => null,                     
    end_date   => null
  );
 
  dbms_network_acl_admin.assign_acl (       -- 该段命令意思是允许访问acl名为utl_http.xml下授权的用户,使用oracle网络访问包,所允许访问的目的主机,及其端口范围。
    acl        => 'utl_http.xml',
    host       => '100.1.2.1',              -- ip地址或者域名,填写http://localhost:9000/hello与http://localhost:9000/是会报host无效的
                                            -- 且建议使用ip地址或者使用域名,若用localhost,当oracle不是安装在本机上的情况下,会出现问题
    lower_port => 9000,                     -- 允许访问的起始端口号
    upper_port => Null                      -- 允许访问的截止端口号
  );
  commit;
end;
 
begin
  dbms_network_acl_admin.assign_acl (       -- 可以授权多个主机,或者多个主机的多个端口
    acl        => 'utl_http.xml',
    host       => '10.100.49.138',
    lower_port => 80,
    upper_port => NUll
  );
  commit;
end;

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值