gpt4 book ai didi

php - 无法在PHP页面创建的shell脚本中执行sqlplus命令

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:26:20 25 4
gpt4 key购买 nike

长话短说:

我有一个 PHP 页面,它执行一个包含 impdp 的 shell 脚本,它将转储导入一个新的模式。
PHP 文件:

echo shell_exec("./DumpCreator.sh 22");

DumpCreator.sh

#!/bin/bash
echo $1
impdp U_$1/Pass DIRECTORY=dmpdir DUMPFILE=MYDMP.DMP remap_schema=PARENT:U_$1

它回显 22 但 impdp 没有执行,尽管所有权限都授予了单个用户(管理员)。

完整

我有一个 PHP 页面,它创建一个 shell 脚本文件并覆盖其内容,如下所示:

$shellFile = fopen("myfile.sh" , "w");
$field = "1";
$command = "#!/bin/bash\n"
."echo $field\n"
."sqlplus system/pass as sysdba << SQLEND\n"
."create user U_$field identified by newpass;\n"
."grant dba to U_$field;\n"
."exit;\n"
."SQLEND\n";
fwrite($shellFile, $command);
$output = shell_exec("bash myfile.sh");
echo $output;
fclose($shellFile);

.sh 文件的内容

#!/bin/bash
echo 1
sqlplus system/pass sysdba << SQLEND
create user U_1 identified by pass;
grant dba to U_1;
exit;
SQLEND

我的问题是 sqlplus 的部分没有执行。那么这有什么问题,在此先感谢。更新
当我执行 .sh 文件本身时,一切都执行良好(添加并授予用户)。
更新 2
我尝试使用 php oci 执行上面提到的操作并且它成功运行。
现在的问题是,当用户被授予权限时,我需要使用脚本将一些转储复制到它,我将需要使用 PHP 执行该脚本。
我的新 .sh 文件

#!/bin/bash
echo $1
impdp U_$1/pass DIRECTORY=DATA_PUMP_DIR DUMPFILE=something.DMP remap_schema=something:U_$1

即使我删除了 $1,它也不会执行这部分,我认为它不需要 sudosu 到 root,所以我在做什么错误的 ?在此过程中还可能缺少哪些权限?

更新 3
使用安装 Oracle 的“admin”帐户直接从终端执行脚本,同时在 PHP 中获取当前用户显示它是“admin”。
所以问题是如何从我的 PHP 页面执行任何与操作系统无关的命令(除了 echo、ls .. 等)?

最佳答案

所以在搜索权限之后,我发现可以通过编辑 sudoers 文件来执行任何操作(root 或非 root 命令),这将允许任何 php 执行任何命令,据我所知这是一个非常糟糕的解决方案。
引用:How to call shell script from php that requires SUDO?

关于php - 无法在PHP页面创建的shell脚本中执行sqlplus命令,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34396439/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com