Просмотр исходного кода

Add check v-add-database-host and v-add-database (#3094)

* Check if user can create database or not

* Add check on drop / create database

* Restore deleted line

* Drop failed due to database doesn't exsits
Jaap Marcus 3 лет назад
Родитель
Сommit
f48bed1ec4
2 измененных файлов с 23 добавлено и 3 удалено
  1. 18 1
      bin/v-add-database-host
  2. 5 2
      func/db.sh

+ 18 - 1
bin/v-add-database-host

@@ -45,13 +45,30 @@ is_mysql_host_alive() {
 
 	chmod 600 $mycnf
 	mysql --defaults-file=$mycnf -e 'SELECT VERSION()' > /dev/null 2>&1
-	rm $mycnf
+	if [ "$?" -ne '0' ]; then
+		echo "Error: MySQL connection to $host failed"
+		rm $mycnf
+		log_event "$E_CONNECT" "$ARGUMENTS"
+		exit "$E_CONNECT"
+	fi
 
+	grants=$(mysql --defaults-file=$mycnf -e 'SHOW GRANTS FOR CURRENT_USER();')
 	if [ "$?" -ne '0' ]; then
 		echo "Error: MySQL connection to $host failed"
+		rm $mycnf
 		log_event "$E_CONNECT" "$ARGUMENTS"
 		exit "$E_CONNECT"
 	fi
+
+	# Check allow to grant user
+	check_grants=$(echo $grants | grep "WITH GRANT OPTION")
+	if [ -z "$check_grants" ]; then
+		echo "Error: MySQL connection to $host failed. Unable to grant other users"
+		rm $mycnf
+		log_event "$E_CONNECT" "$ARGUMENTS"
+		exit "$E_CONNECT"
+	fi
+	rm $mycnf
 }
 
 is_pgsql_host_alive() {

+ 5 - 2
func/db.sh

@@ -91,7 +91,9 @@ mysql_query() {
 	sql_tmp=$(mktemp)
 	echo "$1" > $sql_tmp
 	mysql --defaults-file=$mycnf < "$sql_tmp" 2> /dev/null
+	return_code=$?
 	rm -f "$sql_tmp"
+	return $return_code
 }
 
 mysql_dump() {
@@ -258,7 +260,8 @@ add_mysql_database() {
 	mysql_ver_sub_sub=$(echo $mysql_ver | cut -d '.' -f2)
 
 	query="CREATE DATABASE \`$database\` CHARACTER SET $charset"
-	mysql_query "$query" > /dev/null
+	mysql_query "$query"
+	check_result $? "Unable to create database $database"
 
 	if [ "$mysql_fork" = "mysql" ] && [ "$mysql_ver_sub" -ge 8 ]; then
 		query="CREATE USER \`$dbuser\`@\`%\`
@@ -458,7 +461,7 @@ delete_mysql_database() {
 	mysql_connect $HOST
 
 	query="DROP DATABASE \`$database\`"
-	mysql_query "$query" > /dev/null
+	mysql_query "$query"
 
 	query="REVOKE ALL ON \`$database\`.* FROM \`$DBUSER\`@\`%\`"
 	mysql_query "$query" > /dev/null