在oralce 11g中假如你想獲取server的ip或者hostname,執(zhí)行如下語句
SELECT utl_inaddr.get_host_address FROM dual;? //獲取IP
SELECT? utl_inaddr.get_host_name FROM dual; //獲取host 名字
如果在oracle 9i中能夠正常執(zhí)行,但在11g中你可能會得到一個莫名其妙的錯誤提示:
ORA-24247: network access denied by access control list(ACL)
?
你可能馬上想到是需要啥額外的權(quán)限,而我們平時賦予權(quán)限一般是grant XXX to user_name;但你找不到有啥跟ACL對應(yīng)的權(quán)限.
實際上這里確實需要額外權(quán)限,但賦予權(quán)限的方式相當(dāng)變態(tài),跟grant的方式太不一樣了.
?
細粒度訪問網(wǎng)絡(luò)服務(wù)
為了更細致的控制網(wǎng)絡(luò)權(quán)限,Oracle 11g中針對這么幾個PL/SQL API(UTL_TCP, UTL_SMTP, UTL_MAIL, UTL_HTTP和 UTL_INADDR)的訪問設(shè)置了單獨的權(quán)限訪問控制方式.
其中UTL_SMTP,UTL_MAIL是跟郵件相關(guān)的,比如你可以在觸發(fā)器中設(shè)定當(dāng)在某些表中做插入刪除操作時就發(fā)個郵件知識某個負責(zé)人.
?
賦予權(quán)限
假如要給用戶賦予訪問上面提到的那些函數(shù)咋整呢? 要通過如下的一段pl/sql語句
BEGIN
DBMS_NETWORK_ACL_ADMIN.CREATE_ACL ( acl => 'abc.xml' , --這個xml文件名字隨便取的,但不同出現(xiàn)同名的情況
description => 'ACL list' ,
principal => 'ARWEN' , --表示賦予權(quán)限給哪個用戶
is_grant => true, --為true表示賦予權(quán)限,如果是false相當(dāng)取消權(quán)限
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' ); --因為那些網(wǎng)絡(luò)操作的權(quán)限是針對某一個server的,所以這里是指定一臺機器的名字
?
END;
?
?
如果要刪除上面的控制列表
BEGIN
DBMS_NETWORK_ACL_ADMIN.drop_acl ( acl => ' abc .xml');
END;
刪除這個列表,那用些列表賦予權(quán)限的那些用戶自然也被取消相應(yīng)的權(quán)限了.
?
關(guān)于DBMS_NETWORK_ACL_ADMIN的詳細介紹參看Oracle 官方文檔:
http://docs.oracle.com/cd/B28359_01/appdev.111/b28419/d_networkacl_adm.htm
?
更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主
微信掃碼或搜索:z360901061
微信掃一掃加我為好友
QQ號聯(lián)系: 360901061
您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對您有幫助就好】元

