最先答对且答案未经编辑的puber将获得纪念章一枚(答案不可编辑但可发新贴补充或纠正),其他会员如果提供有价值的分析、讨论也可获得纪念章一枚。
以往旧题索引:
http://www.itpub.net/forum.php?m ... eid&typeid=1808
原始出处:
http://www.plsqlchallenge.com/
作者:Frank Schmitt
运行环境:SQLPLUS, SERVEROUTPUT已打开
注:本题给出答案时候要求给予简要说明才能得到奖品
我们的内部WEB服务器优点不靠谱,所以我们的经理要求我写一个PL/SQL过程来检查服务器是否可用。
为了达到这个目的,我创建了一个用户名为PLCH_WWW,在它的模式下创建了一个过程:
CREATE OR REPLACE PROCEDURE plch_connect_to(p_Host IN varchar2)
IS
c utl_tcp.connection;
BEGIN
c := utl_tcp.open_connection(remote_host => p_Host,
remote_port => 80);
utl_tcp.close_connection(c);
dbms_output.put_line('SUCCESS');
END plch_connect_to;
/
当我试图运行这个过程,我看到了这个错误:
ORA-24247: network access denied by access control list (ACL)
哪些选项(由DBA执行)可以解决这个问题,使得下列代码块以PLCH_WWW执行之后:
BEGIN
plch_connect_to('www.plsqlchallenge.com');
END;
/
会显示 "SUCCESS" ?
假设下列条件成立:
1. DBA具备执行所有选项所必需的权限。
2. 数据库有网络连接并且可以访问www.plsqlchallenge.com
(A)
BEGIN
DBMS_NETWORK_ACL_ADMIN.CREATE_ACL(acl => 'plch.xml',
description => 'PLCH URI',
principal => 'PLCH_WWW',
is_grant => true,
privilege => 'connect');
DBMS_NETWORK_ACL_ADMIN.ADD_PRIVILEGE(acl => 'plch.xml',
principal => 'PLCH_WWW',
is_grant => true,
privilege => 'resolve');
DBMS_NETWORK_ACL_ADMIN.ASSIGN_ACL(acl => 'plch.xml',
host => 'www.plsqlchallenge.com');
COMMIT;
END;
/
(B)
BEGIN
DBMS_NETWORK_ACL_ADMIN.CREATE_ACL(acl => 'plch.xml',
description => 'PLCH URI',
principal => 'PLCH_WWW',
is_grant => true,
privilege => 'connect');
DBMS_NETWORK_ACL_ADMIN.ADD_PRIVILEGE(acl => 'plch.xml',
principal => 'PLCH_WWW',
is_grant => true,
privilege => 'resolve');
DBMS_NETWORK_ACL_ADMIN.ASSIGN_ACL(acl => 'plch.xml',
host => '*');
COMMIT;
END;
/
(C)
BEGIN
DBMS_NETWORK_ACL_ADMIN.CREATE_ACL(acl => 'plch.xml',
description => 'PLCH URI',
principal => 'PLCH_WWW',
is_grant => true,
privilege => 'connect');
DBMS_NETWORK_ACL_ADMIN.ADD_PRIVILEGE(acl => 'plch.xml',
principal => 'PLCH_WWW',
is_grant => true,
privilege => 'resolve');
DBMS_NETWORK_ACL_ADMIN.ASSIGN_ACL(acl => 'plch.xml',
host => 'www.plsqlchallenge.com',
lower_port => 80,
upper_port => 80);
COMMIT;
END;
/
(D)
BEGIN
dbms_network_acl_admin.disable_acl;
COMMIT;
END;
/
(E)
GRANT CONNECT ANY PORT TO PLCH_WWW
/
(F)
GRANT DBA TO PLCH_WWW
/