一、新增
步骤 1: 创建 ACL 文件并授予权限
首先,我们创建一个新的 ACL 文件,并允许 INFODBA用户访问外部 HTTP 服务。
BEGIN-- 创建一个新的ACL,允许bakmes用户进行网络访问DBMS_NETWORK_ACL_ADMIN.create_acl(acl => 'http_acl.xml', -- ACL 文件名description => 'ACL for HTTP access for INFODBA', -- 描述principal => 'INFODBA', -- 用户名is_grant => TRUE, -- 是否授予权限privilege => 'connect' -- 权限类型); END;
步骤 2: 为目标主机分配网络访问权限
接下来,您需要为目标主机(xxx.xxx.xxxx)的指定端口(8655
)分配访问权限。
BEGIN-- 为指定的主机(10.68.240.218)和端口(8655)授予访问权限DBMS_NETWORK_ACL_ADMIN.assign_acl(acl => 'http_acl.xml', -- 使用前面创建的ACLhost => 'xxx.xxx.xxxx', -- 目标IP地址lower_port => 8655, -- 端口号(开始)upper_port => 8655 -- 端口号(结束)); END; /
步骤 3: 确认 ACL 配置是否正确
使用以下查询来查看当前的网络访问控制列表(ACL)配置,确认配置已经生效:
SELECT * FROM dba_network_acls;
步骤 4: 测试 HTTP 请求
完成上述配置后,可以使用以下 SQL 来测试 bakmes
用户是否可以成功通过 UTL_HTTP
发起 HTTP 请求:
SELECT utl_http.request('http://xxx.xxx.xxxx:8655') FROM dual;
如果配置成功,应该能够正常返回 HTTP 请求的响应内容。
二、修改
步骤 1: 如果需要修改或删除 ACL 配置
如果您需要修改或删除已配置的 ACL,可以使用以下步骤。
修改 ACL
如果需要修改已存在的 ACL,可以先删除相关权限,然后重新分配权限。
BEGIN-- 删除指定的权限DBMS_NETWORK_ACL_ADMIN.remove_privilege(acl => 'http_acl.xml',principal => 'INFODBA',privilege => 'connect');-- 重新添加新的权限,若需要DBMS_NETWORK_ACL_ADMIN.add_privilege(acl => 'http_acl.xml',principal => 'INFODBA',is_grant => TRUE,privilege => 'connect'); END; /
删除 ACL
如果您需要删除不再需要的 ACL 文件,可以使用以下命令:
BEGIN DBMS_NETWORK_ACL_ADMIN.drop_acl('http_acl.xml'); END;
总结
通过上述步骤,您为用户 bakmes
配置了访问控制列表(ACL),允许其通过 UTL_HTTP
请求 xxx.xxx.xxxx:8655
。这包括创建 ACL 文件、授予权限、分配主机和端口的访问权限以及验证配置是否生效。