oracle - Oracle:目录权限
问题描述
我运行 write_test 程序,效果很好。
begin
koll_data_pkg.write_test(p_customer_id=>247, p_addr=>'address', p_dir=>'\\SERVER01\Backup\Log\');
end;
但是,当我将 p_dir 的值更改为另一个目录 p_dir=>\SERVER12\Backup\Log\ 时,会出现以下错误:
ORA-29283: invalid file operation
ORA-06512: by "SYS.UTL_FILE",
ORA-29283: invalid file operation
ORA-06512: by "DATA_PKG",
ORA-06512: by line
我尝试使用以下命令授予权限,但仍然出现相同的错误:
CREATE OR REPLACE DIRECTORY DEVO_INVREC_DIR AS '\\SERVER12\Backup\Log\';
GRANT READ, WRITE ON DIRECTORY DEVO_INVREC_DIR TO USER1;
GRANT READ, WRITE ON DIRECTORY DEVO_INVREC_DIR TO USER1;
GRANT EXECUTE ON UTL_FILE TO USER1;
程序:
procedure write_test(p_customer_id in koll_customer_party.customer_id%type,
p_addr in varchar,
p_dir in varchar,
p_filename in varchar2 default null)
is
lt_id id_tt;
lt_bolagsnamn bolagsnamn_tt;
l_file utl_file.file_type;
l_line varchar2(2048);
l_name varchar2(300):= 'DEVO_INVREC_DIR';
l_filename varchar2(100):= 'testfile.txt';
l_sql varchar2(512);
begin
select devo_id, bolagsnamn
bulk collect into lt_id, lt_bolagsnamn
from documents where customer_id=p_customer_id
if lt_id.count > 0 then
l_sql := 'create or replace directory ' || l_name || ' as ''' || p_dir || '''';
execute immediate l_sql;
if p_filename is not null then
l_filename := p_filename;
end if;
l_file := utl_file.fopen(l_name,l_filename,'w');
if utl_file.is_open(l_file) is not null then
for i in lt_id.first .. lt_devo_id.last loop
l_line:= lt_id(i) || ';' || replace(lt_bolagsnamn(i),';','');
utl_file.put_line(l_file, l_line);
end loop;
end if;
utl_file.fclose(l_file);
end if;
end;
解决方案
查看此论坛回复:https ://community.oracle.com/thread/4145239?start=0&tstart=0
总之,Oracle 无法访问其默认安装配置中的网络共享,因为 Windows SYSTEM 用户无法访问定义的网络共享。您要么必须将 Oracle 重新配置为以 SYSTEM 以外的用户身份运行,并对共享具有权限,要么允许 SYSTEM 访问网络共享(巨大的安全风险)。我打算包含一个链接,描述如何将用户更改为另一个服务帐户,但它们似乎都被破坏或删除了。这也可能取决于您的 Oracle 和 Windows 的确切版本,因此在没有其他文档的情况下,您最好联系 Oracle 支持。您的问题没有简单的 PL/SQL 编程答案。
推荐阅读
- javascript - jquery中要求最少6个字符,至少1个大写字母,1个小写字母,1个数字和1个特殊字符
- html - 收缩时弹性项目的位置高于其他弹性项目
- android - 使用 Firebase 身份验证的电子邮件 firebase 无法正常运行?
- c++ - 保存到静态类时 WIFI 名称 (char*) 行为异常
- unity3d - 图层蒙版问题 - 即使图层蒙版已更改,玩家仍会与敌人发生碰撞(Unity、Bolt 脚本)
- python - Heroku 无法识别 Procfile
- arduino - 用arduino控制360度伺服
- javascript - 如何找到执行 eval 代码的 [content] 脚本
- r - R:如何根据 R 中另一行的值扩展一行中的值?
- html - 当html代码不直接包含选项时如何使一个按钮默认单选按钮