oracle的ACL

花花蘑菇發表於2016-10-31
ACL用於定義哪些使用者擁有哪個遠端主機的什麼許可權,主要使用的是DBMS_NETWORK_ACL_ADMIN這個自帶的包來完成。
==============================================
首先要建立一個ACL。
BEGIN
DBMS_NETWORK_ACL_ADMIN.CREATE_ACL (
  acl          => 'test_ast_server_permissions.xml',    --->acl的名字
  description  => 'Enables network permissions for the quark servers',
  principal    => 'APP',    ----->使用者
  is_grant     => TRUE, 
  privilege    => 'connect');    ------->許可權為connect
END;
/
==============================================
新使用者新增到已經建立的acl中(必須兩個許可權同時擁有,新建ACL的時候已經給了connect許可權的話,只需要在給一個resolve許可權)
BEGIN
DBMS_NETWORK_ACL_ADMIN.ADD_PRIVILEGE(
  acl => 'test_acs_server_permissions.xml',
  principal => 'APP',     ----->使用者
  is_grant => true,
  privilege => 'resolve');    ------->許可權為resolve
END;
/

BEGIN
DBMS_NETWORK_ACL_ADMIN.ADD_PRIVILEGE(
 acl => 'test_acs_server_permissions.xml',
  principal => 'APP',
  is_grant => true,
  privilege => 'connect');
END;
/
================================================
為使用者指定網址以及埠
BEGIN
DBMS_NETWORK_ACL_ADMIN.ASSIGN_ACL (
  acl         => 'test_ast_server_permissions.xml',
  host        => '192.16.250.219',
  upper_port  => 80,     ---->如果已經知道確切的埠號,可以將upper_port和lower_port寫成確切的埠號。
  lower_port  => 80); 
END;
/
commit;   記得提交事務。
================================================
也可以將已經存在的ACL刪除掉:
begin
DBMS_NETWORK_ACL_ADMIN.DROP_ACL('quark_ast_server_permissions.xml');
commit;
end;
/
================================================
查詢網路訪問控制列表 acl:
select * from DBA_NETWORK_ACLS;  
查詢訪問控制許可權列表:
select * from DBA_NETWORK_ACL_PRIVILEGES;

驗證使用者是否已經可以訪問外部地址:
conn app/app
select utl_http.request('http://192.16.250.219:8080/api/db/xdtCompleteCall') From dual;
只要返回的不是error,就可以認為已經配通,可以訪問外部地址了。

注:有時候ACL配好了,訪問外部地址也會報錯,如:
    ORA-29273: HTTP 請求失敗
    ORA-06512: 在 "SYS.UTL_HTTP", line 1722
    ORA-12541: TNS: 無監聽程式
    ORA-06512: 在 line 1
這個時候需要檢查的是外部地址在IE端是否能被正確開啟。


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/28497416/viewspace-2127372/,如需轉載,請註明出處,否則將追究法律責任。

相關文章