首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Oracle目录-无法读取已禁用组读取的文件(oracle在组中)

Oracle目录-无法读取已禁用组读取的文件(oracle在组中)
EN

Stack Overflow用户
提问于 2014-12-10 02:54:55
回答 2查看 217关注 0票数 0

我的Solaris用户oscar是包含oracle用户帐户的一部分或一个组。

我创建了一个目录,并在其中放置了一个文件;使其所有者和组可读

代码语言:javascript
复制
mkdir /tmp/tdir
echo $$ > /tmp/tdir/foo.txt
chmod 440 /tmp/tdir/foo.txt

然后,我以system身份登录并创建Oracle目录

代码语言:javascript
复制
CREATE OR REPLACE DIRECTORY tmp_tdir AS '/tmp/tdir';

然后,我以unix用户oscar的身份登录,从数据库服务器启动一个sqlplus会话(作为系统)。

我可以通过在sqlplus中执行以下代码片段来读取文件内容。

代码语言:javascript
复制
set serveroutput on
DECLARE
  fileHandler UTL_FILE.FILE_TYPE;
  buffer    CLOB;
BEGIN
  fileHandler := UTL_FILE.FOPEN('TMP_TDIR', 'foo.txt', 'r');
  UTL_FILE.GET_LINE(fileHandler, buffer);
  dbms_output.put_line('File Data: '||buffer);
  UTL_FILE.FCLOSE(fileHandler);
END;
/

现在,当我从文件中删除组读权限时,上面的代码片段不再起作用。相反,我看到的是这个错误

代码语言:javascript
复制
ERROR at line 1:
ORA-29283: invalid file operation
ORA-06512: at "SYS.UTL_FILE", line 536
ORA-29283: invalid file operation
ORA-06512: at line 5

如果oracle sqlplus进程是以文件所有者身份运行的,为什么在删除组权限后无法读取该文件?

EN

回答 2

Stack Overflow用户

发布于 2014-12-10 23:11:28

在这个问题的上下文中,操作系统身份验证似乎并不重要。

问题是,如果oracle用户没有访问权限,utl_file将不允许访问文件。

与文件关联的组包含oracle用户。因此,当启用组读取位时,我只能使用utl_file读取文件。

票数 1
EN

Stack Overflow用户

发布于 2014-12-10 03:07:53

OS用户和Oracle用户是两个不同的东西。

OS身份验证并不意味着您的oracle实例将以给定用户的身份运行。例如,在我的Linux系统上,oracle XE以操作系统用户Oracle的身份运行。这是作为操作系统级别授予或拒绝文件访问权限的唯一重要标识。

您可以使用一个简单的ps命令检查这一点。

请注意,如果您的OS/文件系统使用的是或 (在某种程度上相当于SELinux),事情可能会比这复杂得多。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27386648

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档