Bạn không cần bất kỳ commit
, vì các hoạt động DML rõ ràng không được thực hiện cho các hoạt động này. Và sử dụng begin..end
khối không cần thiết cho mọi lệnh gọi phương thức.
Vấn đề của bạn bắt nguồn từ thực tế là tính cần thiết của việc gọi Dbms_Network_Acl_Admin.Add_Privilege
phương thức với privilege => 'connect'
tùy chọn cũng có. Vì vậy, bạn có thể sử dụng như sau:
BEGIN
DBMS_NETWORK_ACL_ADMIN.CREATE_ACL(
acl => 'apex_user.xml',
description => 'access to apex email',
principal => 'DBUSER',
is_grant => TRUE,
privilege => 'connect',
start_date => SYSTIMESTAMP,
end_date =>Null
);
DBMS_NETWORK_ACL_ADMIN.ADD_PRIVILEGE(
acl => 'apex_user.xml',
principal => 'DBUSER',
is_grant => true,
privilege => 'connect'
);
DBMS_NETWORK_ACL_ADMIN.ADD_PRIVILEGE(
acl => 'apex_user.xml',
principal => 'DBUSER',
is_grant => true,
privilege => 'resolve'
);
DBMS_NETWORK_ACL_ADMIN.ASSIGN_ACL(
acl => 'apex_user.xml',
host => 'smtp.gmail.com',
lower_port =>587,
upper_port =>587
);
END;
Với truy vấn sau, tất cả các quyền truy cập đặc quyền có thể được kiểm tra ( thông qua các lược đồ SYS hoặc SYSTEM ):
select a.host,p.*
from dba_network_acl_privileges p
join dba_network_acls a on a.aclid = p.aclid
order by a.host, p.principal, p.privilege;