首页 > 解决方案 > 使用 PHP 应用程序使用 .sh 文件创建用户和数据库

问题描述

我有一个 sh 脚本,当我使用 root 用户在命令行运行它时,它运行良好。这将创建一个数据库和一个带密码的用户。

$ ./create-database.sh dbname dbuser dbpass

    #!/bin/bash
exec 3>&1 4>&2
trap 'exec 2>&4 1>&3' 0 1 2 3
exec 1>log.out 2>&1
# Everything below will go to the file 'log.out':

# Functions
ok() { echo -e '\e[32m'$1'\e[m'; } # Green

EXPECTED_ARGS=3
E_BADARGS=65
MYSQL=`which mysql`

Q0="DROP DATABASE IF EXISTS $1;"
Q1="CREATE DATABASE IF NOT EXISTS $1;"
Q2="GRANT ALL ON $1.* TO '$2'@'localhost' IDENTIFIED BY '$3';"
Q3="FLUSH PRIVILEGES;"
SQL="${Q0}${Q1}${Q2}${Q3}"

if [ $# -ne $EXPECTED_ARGS ]
then
  echo "Usage: $0 dbname dbuser dbpass"
  exit $E_BADARGS
fi

$MYSQL -u root -pXXXXXXX -e "$SQL"

ok "Database $1 and user $2 created with a password $3"

当我使用 php 运行相同的文件时,它不起作用。PHP 代码如下,与 sh 文件位于同一文件夹中。

    <?php

$db_name = $_GET['db_name'];
$db_user = $_GET['db_user'];
$db_pass = $_GET['db_pass'];

$output = shell_exec ("sh ./create-database.sh $db_name $db_user $db_pass");

echo "Output $output";

PHP 脚本拥有 777 权限,并在用户pakerp拥有的应用程序中运行

log.out 文件给了我以下错误

错误 1698 (28000): 拒绝用户 'root'@'localhost' 的访问

当我在命令行运行时,相同的脚本工作正常。

我错过了什么。请告诉我。

标签: phpbashdebian

解决方案


您可能需要在 localhost 上允许 root 或更好地使用非 root 用户!

好像和这个问题一样


推荐阅读