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

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