In Oracle 11g-Netzwerkpaketen/Systempaketen wie UTL_MAIL,UTL_SMTP,UTL_TCP von einem normalen Benutzer werden mithilfe der Zugriffssteuerungsliste (Access Control List, ACL) eingeschränkt. Oracle hat Fine-grained Access eingeführt, um externe Netzwerkdienste zu nutzen.
Wenn Sie diesen Paketen einfach die Berechtigung „Execute“ erschließen, ist die Verwendung dieser Pakete möglicherweise nicht unbedingt erforderlich.
Wir müssen die folgende Zugriffssteuerungsliste erstellen, um die Verwendung dieser Pakete für einen normalen Benutzer zu ermöglichen.
Im Folgenden finden Sie das Verfahren zum Erstellen einer Zugriffssteuerungsliste (Access Control List, ACL) mit einer anfänglichen Berechtigungseinstellung.
Eine ACL muss über mindestens eine Berechtigungseinstellung verfügen. Die Zugriffssteuerungseffekt hat keinen Zugriffssteuerungseffekt, es sei denn, sie ist dem Netzwerkziel zugewiesen.
BEGIN
DBMS_NETWORK_ACL_ADMIN.CREATE_ACL (
acl =>’SCOTT.xml‘,
description => ‚ACL for users to send mail.‘,
principal => ‚SCOTT‘,
is_grant => TRUE,
privilege => ‚connect‘,
start_date => null,
end_date => null
);
END;
/
Verwenden Sie unten, um eine Berechtigung zum Gewähren oder Verweigern des Netzwerkzugriffs für den Benutzer hinzuzufügen. Der Zugriffssteuerungseintrag (Access Control Entry, ACE) wird erstellt, wenn er nicht vorhanden ist.
BEGIN
DBMS_NETWORK_ACL_ADMIN.ADD_PRIVILEGE(
acl => ‚SCOTT.xml‘,
principal => ‚SCOTT‘,
is_grant => TRUE,
privilege => ‚connect‘);
END;
/
Verwenden Sie unten, um einem Hostcomputer, einer Domäne oder einem IP-Subnetz und, falls angegeben, dem TCP-Portbereich eine Zugriffssteuerungsliste (Access Control List, ACL) zuzuweisen.
BEGIN
DBMS_NETWORK_ACL_ADMIN.ASSIGN_ACL(
acl => ‚SCOTT.xml‘,
host => ‚Mail Server name‘,
lower_port => 25);
END;
/
commit;
Vergessen Sie nicht, am Ende der Sitzung commit zu geben, um diese Änderungen dauerhaft zu machen.
Mit der folgenden Prozedur wird eine Berechtigung in einer Zugriffssteuerungsliste gelöscht.
BEGIN
DBMS_NETWORK_ACL_ADMIN.delete_privilege (
acl => ‚SCOTT.xml‘,
principal => ‚MN‘,
is_grant => TRUE,
privilege => ‚connect‘);
COMMIT;
END;
/
Die Ausführungsberechtigung muss nach dem Ausführen der oben genannten Prozeduren erforderlich sein.
select grantee , table_name , privilege from dba_tab_privs where table_name = ‚UTL_MAIL‘ and grantee = ‚PUBLIC‘;
GRANTEE TABLE_NAME PRIVILEGE
———- ———– —————–
PUBLIC UTL_MAIL EXECUTE
select acl,host,lower_port,upper_port from DBA_NETWORK_ACLS;
ACL HOST LOWER_PORT UPPER_PORT ———————————————————
/sys/acls/SCOTT.xml mailservername 25 25
/sys/acls/SCOTT.xml Mailservername
/sys/acls/SCOTT.xml mailserver.in.com
select acl,principal,privilege,is_grant from DBA_NETWORK_ACL_PRIVILEGES;
ACL PRINCIPAL PRIVILE IS_GR
—————– ———— ——— —————
/sys/acls/SCOTT.xml SCOTT connect true
SELECT HOST, LOWER_PORT, UPPER_PORT, ACL,
DECODE(
DBMS_NETWORK_ACL_ADMIN.CHECK_PRIVILEGE_ACLID(aclid, ‚SCOTT‘, ‚connect‘),
1, ‚GRANTED‘, 0, ‚DENIED‘, null) PRIVILEGE
FROM DBA_NETWORK_ACLS
WHERE host IN
(SELECT * FROM TABLE(DBMS_NETWORK_ACL_UTILITY.DOMAINS(‚msxsmtp.server.bosch.com‘)))
ORDER BY
DBMS_NETWORK_ACL_UTILITY.DOMAIN_LEVEL(host) DESC, LOWER_PORT, UPPER_PORT;
HOST LOWER_PORT UPPER_PORT ACL PRIVILE
——————– ———- ——————————
smtp.server.in.com 25 25 /sys/acls/SCOTT.xml GRANTED
smtp.server.in.com /sys/acls/SCOTT.xml
GRANTED
Zum Hinzufügen zusätzlicher Benutzer zur ACL-Verwendung unten
BEGIN
DBMS_NETWORK_ACL_ADMIN.ADD_PRIVILEGE(
acl => ‚SCOTT.xml‘,
principal => ‚MN‘,
is_grant => TRUE,
privilege => ‚connect‘);
END;
/
BEGIN
DBMS_NETWORK_ACL_ADMIN.ASSIGN_ACL(
acl => ‚SCOTT.xml‘,
host => ‚Mail Server name‘,
lower_port => 25);
END;
/
commit;