暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

Oracle ORA 29289 :是否可以在角色中授予目录权限,还是必须将其直接授予用户/方案?

askTom 2016-06-09
1324

问题描述

汤姆,

是否可以在角色中授予目录权限,还是必须将其直接授予用户/方案?我遇到了一种情况,我无法写入Unix文件系统上的文件。我工作的客户坚持认为,大多数或所有权限都属于某个角色,而由于安全原因,不能直接授予用户/方案。我不允许在我的数据库上具有创建任何目录目录的权限,因此我无法通过直接向用户/架构授予PRI来进行实验。请注意,我整理了这个例子,所以我还没有测试这个确切的代码。

以下是我的例子:

在Oracle...

创建或替换目录MY_DIR AS'/my_apps/my_files';

创建角色MY_ROLE未标识;
将MY_ROLE授予MY_USER ;
授权读取,写入目录MY_DIR至MY_ROLE ;

对MY_USER SYS.UTL_FILE授权执行;

创建或替换过程MY_USER.TEST_WRITEFILE为
out_File UTL_FILE.FILE_TYPE ;
开始
out_File := UTL_FILE.FOpen ('MY_DIR','test.txt','W') ;
UTL_FILE.PUT_line ( out_File,'Hello world') ;
UTL_FILE.FN_ (out_File) ;
结束;


在Unix中...

在我们的系统上, Oracle始终以所有者“oracle”和组“dba”的身份写入文件。我有一个名为“my_帐户”的服务帐户和组“my_group”。目录“/my_apps/my_files”归“my_帐户”所有,并且在组“my_group”中。“/my_apps/my_files”上的权限对于所有者和组都是770或读取/写入/执行,而对于其他用户则没有权限。我让Unix管理员向Oracle用户“oracle”添加组“my_group”。

/my_apps>组oracle
dba my_group
/my_apps>ll
drwxrwx-- 2 my_帐户my_group 1024 6月9日10:04 my_files


错误...

执行过程MY_USER.TEST_WRITEFILE时,我得到以下错误:

宣布
开始
my_user.test_写入文件;
结束;
第1行出错
ORA 29289 :目录访问被拒绝
ORA-06512 : "SYS.UTL_FILE" ,第41行
ORA-06512 :“SYS.UTL_FILE”,第478行
ORA-06512 :“MY_USER.TEST_WRITEFILE”,第4行
ORA-06512 :在第3行

我做错了什么?

专家解答

看来肯定是直接发给用户的。下面是Windows上的一个示例(因此我们将Unix排除在外)


SQL> conn / as sysdba
Connected.

SQL> CREATE OR REPLACE DIRECTORY MY_DIR AS 'c:\temp';

Directory created.

SQL>
SQL> CREATE ROLE MY_ROLE;

Role created.

SQL> GRANT READ, WRITE ON DIRECTORY MY_DIR TO MY_ROLE;

Grant succeeded.

SQL>
SQL> GRANT connect, MY_ROLE TO MY_USER identified by my_user;

Grant succeeded.

SQL>
SQL> GRANT EXECUTE ON SYS.UTL_FILE TO MY_USER;

Grant succeeded.

SQL>
SQL> CREATE OR REPLACE PROCEDURE MY_USER.TEST_WRITEFILE IS
  2    out_File UTL_FILE.FILE_TYPE;
  3  BEGIN
  4    out_File := UTL_FILE.FOPEN ('MY_DIR', 'test.txt', 'W');
  5    UTL_FILE.PUT_LINE (out_File, 'hello world');
  6    UTL_FILE.FCLOSE (out_File);
  7  END;
  8  /

Procedure created.

SQL>
SQL>
SQL> conn my_user/my_user
Connected.

SQL> exec TEST_WRITEFILE
BEGIN TEST_WRITEFILE; END;

*
ERROR at line 1:
ORA-29289: directory access denied
ORA-06512: at "SYS.UTL_FILE", line 41
ORA-06512: at "SYS.UTL_FILE", line 478
ORA-06512: at "MY_USER.TEST_WRITEFILE", line 4
ORA-06512: at line 1

SQL> conn / as sysdba
Connected.

SQL> GRANT READ, WRITE ON DIRECTORY MY_DIR TO my_user;

Grant succeeded.

SQL> conn my_user/my_user
Connected.

SQL>
SQL> exec TEST_WRITEFILE

PL/SQL procedure successfully completed.

SQL>
SQL>





「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论