我正在尝试运行以下命令:
select os_command.exec('/bin/mkdir /home/smucha/testdir_ora3') from dual;
/
当我以 SYS 登录时,此功能正常。
当我尝试以用户 SEBA 运行时,我收到以下错误:
ORA-29532: java.security.AccessControlException: the Permission (java.io.FilePermission /bin/mkdir execute) has not been granted to SEBA. The PL/SQL to grant this is dbms_java.grant_permission( 'SEBA', 'SYS:java.io.FilePermission', '/bin/mkdir', 'execute' )
ORA-06512: at "SEBA.OS_COMMAND", line 68
29532. 00000 - "Java call terminated by uncaught Java exception: %s"
*Cause: A Java exception or error was signaled and could not be
resolved by the Java code.
*Action: Modify Java code, if this behavior is not intended.
我尝试使用 SYS 帐户授予所需权限。
执行以下代码后:
call dbms_java.grant_permission( 'SEBA',
'SYS:java.io.FilePermission', '/bin/mkdir', 'execute' );
我明白了:
dbms_java.grant_permission 'SEBA', succeeded.
但是,当我尝试执行命令时:
select os_command.exec('/bin/mkdir /home/smucha/testdir_ora3') from dual;
/
我得到了和以前一样的错误。
请告诉我运行os命令需要做什么?
当我以 SYS 连接时,一切正常,因此用户 SEBA 看起来有一些权限问题。
我只是不知道授予哪些权限?
答案 0 :(得分:0)
我只想分享我的经验,存储过程不会接受通过角色提供的ddl权限。因此,您尝试向用户seba提供的权限是通过角色然后它无效。例如,如果你有角色有权限创建表,如果你把这个角色分配给seba,seba不能通过存储过程创建表。所以我们必须给grant直接创建任何表,或者你必须使用authid当前用户在创建存储过程时。请在这种情况下检查您是否直接授予seba或通过角色。
检查seba是否创建了任何目录权限,如果没有,则提供grant创建任何目录到seba并确保seba从select * from dba_directories获得privilge;