问题描述
汤姆,
是否可以在角色中授予目录权限,还是必须将其直接授予用户/方案?我遇到了一种情况,我无法写入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行
我做错了什么?
是否可以在角色中授予目录权限,还是必须将其直接授予用户/方案?我遇到了一种情况,我无法写入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进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。




