在oralce 11g中假如你想獲取server的ip或者hostname,執行如下語句
SELECT utl_inaddr.get_host_address FROM dual;? //獲取IP
SELECT? utl_inaddr.get_host_name FROM dual; //獲取host 名字
如果在oracle 9i中能夠正常執行,但在11g中你可能會得到一個莫名其妙的錯誤提示:
ORA-24247: network access denied by access control list(ACL)
?
你可能馬上想到是需要啥額外的權限,而我們平時賦予權限一般是grant XXX to user_name;但你找不到有啥跟ACL對應的權限.
實際上這里確實需要額外權限,但賦予權限的方式相當變態,跟grant的方式太不一樣了.
?
細粒度訪問網絡服務
為了更細致的控制網絡權限,Oracle 11g中針對這么幾個PL/SQL API(UTL_TCP, UTL_SMTP, UTL_MAIL, UTL_HTTP和 UTL_INADDR)的訪問設置了單獨的權限訪問控制方式.
其中UTL_SMTP,UTL_MAIL是跟郵件相關的,比如你可以在觸發器中設定當在某些表中做插入刪除操作時就發個郵件知識某個負責人.
?
賦予權限
假如要給用戶賦予訪問上面提到的那些函數咋整呢? 要通過如下的一段pl/sql語句
BEGIN
DBMS_NETWORK_ACL_ADMIN.CREATE_ACL ( acl => 'abc.xml' , --這個xml文件名字隨便取的,但不同出現同名的情況
description => 'ACL list' ,
principal => 'ARWEN' , --表示賦予權限給哪個用戶
is_grant => true, --為true表示賦予權限,如果是false相當取消權限
privilege => 'connect' );
?
?
DBMS_NETWORK_ACL_ADMIN.ADD_PRIVILEGE ( acl => 'abc.xml' ,
principal => 'ARWEN' ,
is_grant => true,
privilege => 'resolve' );
?
?
DBMS_NETWORK_ACL_ADMIN.ASSIGN_ACL ( acl => 'abc.xml' ,
host => 'Oracle_Host_name' ); --因為那些網絡操作的權限是針對某一個server的,所以這里是指定一臺機器的名字
?
END;
?
?
如果要刪除上面的控制列表
BEGIN
DBMS_NETWORK_ACL_ADMIN.drop_acl ( acl => ' abc .xml');
END;
刪除這個列表,那用些列表賦予權限的那些用戶自然也被取消相應的權限了.
?
關于DBMS_NETWORK_ACL_ADMIN的詳細介紹參看Oracle 官方文檔:
http://docs.oracle.com/cd/B28359_01/appdev.111/b28419/d_networkacl_adm.htm
?
更多文章、技術交流、商務合作、聯系博主
微信掃碼或搜索:z360901061

微信掃一掃加我為好友
QQ號聯系: 360901061
您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對您有幫助就好】元
