繁体   English   中英

DATABASE自动创建bash脚本:怎么了?

[英]DATABASE autocreation bash script: What's wrong?

我的bash脚本不会创建数据库。 我在这里做错了什么? 请看一看:

#!/bin/bash -x
set -x

function deebee() {

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

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

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

$MYSQL -uroot -p -e "$SQL"

}

deebee $1 $2 $3

我在将脚本放入函数中时正在调用该脚本,但它只是吐出了预期的参数来告诉我语法,即我应该输入bashscrip名称,dbname,dbuser dbpass,但显然存在错误使用我的登录权限或用户的脚本,这样我就无法自动执行此操作...发生了什么,我很想知道! 谢谢!

我会怎么做:

创建一个带有凭据的mysql配置文件(现在更容易自动化):

cat ~/.my.cnf 
[client]
host     = localhost
user     = root
password = xxx

和脚本:

#!/bin/bash
set -x

deebee() {
    EXPECTED_ARGS=3
    E_BADARGS=65
    MYSQL=$(type -p mysql)


    if (($# != $EXPECTED_ARGS))
    then
      echo "Usage: $0 dbname dbuser dbpass"
      exit $E_BADARGS
    fi

    $MYSQL <<EOF
CREATE DATABASE IF NOT EXISTS '$1';
GRANT USAGE ON *.* TO '$2'@'localhost' IDENTIFIED BY '$3';
GRANT ALL PRIVILEGES ON '$1'.* TO '$2'@'localhost';
FLUSH PRIVILEGES;
EOF

}

# TODO tests on input args

deebee "$1" "$2" "$3"

就像Denis评论中所说,请注意用户可以将哪些内容用作防止sql注入的参数。

您应该在输入参数上添加一些测试。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM