Изменение работы с БД
This commit is contained in:
141
install.sh
141
install.sh
@@ -909,6 +909,7 @@ EOF
|
|||||||
|
|
||||||
log_step "Настройка базы данных MariaDB..."
|
log_step "Настройка базы данных MariaDB..."
|
||||||
|
|
||||||
|
# Проверка и запуск MariaDB
|
||||||
if ! systemctl is-active --quiet mariadb; then
|
if ! systemctl is-active --quiet mariadb; then
|
||||||
log_info "MariaDB не запущен. Попытка запуска..."
|
log_info "MariaDB не запущен. Попытка запуска..."
|
||||||
systemctl start mariadb
|
systemctl start mariadb
|
||||||
@@ -919,39 +920,151 @@ EOF
|
|||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
CURRENT_USER=$(logname 2>/dev/null || whoami)
|
||||||
|
log_info "Текущий пользователь: $CURRENT_USER"
|
||||||
|
|
||||||
|
# Функция для выполнения SQL с подробным логированием
|
||||||
|
execute_sql() {
|
||||||
|
local user="$1"
|
||||||
|
local password="$2"
|
||||||
|
local sql_script="$3"
|
||||||
|
local connection_params=""
|
||||||
|
|
||||||
|
if [[ -n "$password" ]]; then
|
||||||
|
connection_params="-u $user -p$password"
|
||||||
|
else
|
||||||
|
connection_params="-u $user"
|
||||||
|
fi
|
||||||
|
|
||||||
|
log_info "Попытка выполнения SQL как пользователь: $user"
|
||||||
|
|
||||||
|
# Создаем временный файл для вывода ошибок
|
||||||
|
local error_file="/tmp/mysql_error_$$.log"
|
||||||
|
|
||||||
|
if echo "$sql_script" | mysql $connection_params 2>"$error_file"; then
|
||||||
|
rm -f "$error_file"
|
||||||
|
return 0
|
||||||
|
else
|
||||||
|
log_error "Ошибка выполнения SQL:"
|
||||||
|
cat "$error_file" >&2
|
||||||
|
rm -f "$error_file"
|
||||||
|
return 1
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
# Функция для проверки подключения
|
||||||
|
test_connection() {
|
||||||
|
local user="$1"
|
||||||
|
local password="$2"
|
||||||
|
local connection_params=""
|
||||||
|
|
||||||
|
if [[ -n "$password" ]]; then
|
||||||
|
connection_params="-u $user -p$password"
|
||||||
|
else
|
||||||
|
connection_params="-u $user"
|
||||||
|
fi
|
||||||
|
|
||||||
|
mysql $connection_params -e "SELECT 1;" >/dev/null 2>&1
|
||||||
|
}
|
||||||
|
|
||||||
log_info "Выполнение базовой настройки безопасности MariaDB..."
|
log_info "Выполнение базовой настройки безопасности MariaDB..."
|
||||||
|
|
||||||
if mysql -u root -e "SELECT 1;" >/dev/null 2>&1; then
|
# Сценарий 1: Подключение как root без пароля
|
||||||
log_info "Первичная настройка MariaDB (подключение без пароля доступно)..."
|
if test_connection "root" ""; then
|
||||||
|
log_info "Подключение как 'root' без пароля успешно. Настраиваем root-пользователя..."
|
||||||
|
|
||||||
MYSQL_SECURE_SCRIPT="/tmp/mysql_secure.sql"
|
SQL_SCRIPT="
|
||||||
cat > "$MYSQL_SECURE_SCRIPT" << MYSQL_SCRIPT
|
SET sql_mode = '';
|
||||||
ALTER USER 'root'@'localhost' IDENTIFIED BY '$DB_PASSWORD';
|
UPDATE mysql.user SET authentication_string = PASSWORD('$DB_PASSWORD') WHERE User = 'root' AND Host = 'localhost';
|
||||||
|
UPDATE mysql.user SET plugin = 'mysql_native_password' WHERE User = 'root' AND Host = 'localhost';
|
||||||
DELETE FROM mysql.user WHERE User='';
|
DELETE FROM mysql.user WHERE User='';
|
||||||
DELETE FROM mysql.user WHERE User='root' AND Host NOT IN ('localhost', '127.0.0.1', '::1');
|
DELETE FROM mysql.user WHERE User='root' AND Host NOT IN ('localhost', '127.0.0.1', '::1');
|
||||||
DROP DATABASE IF EXISTS test;
|
DROP DATABASE IF EXISTS test;
|
||||||
DELETE FROM mysql.db WHERE Db='test' OR Db='test\\_%';
|
DELETE FROM mysql.db WHERE Db='test' OR Db='test\\_%';
|
||||||
|
FLUSH PRIVILEGES;
|
||||||
CREATE DATABASE IF NOT EXISTS ALTCor CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
|
CREATE DATABASE IF NOT EXISTS ALTCor CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
|
||||||
GRANT ALL PRIVILEGES ON ALTCor.* TO 'root'@'localhost';
|
GRANT ALL PRIVILEGES ON ALTCor.* TO 'root'@'localhost';
|
||||||
FLUSH PRIVILEGES;
|
FLUSH PRIVILEGES;"
|
||||||
MYSQL_SCRIPT
|
|
||||||
|
|
||||||
if mysql -u root < "$MYSQL_SECURE_SCRIPT" >/dev/null 2>&1; then
|
if execute_sql "root" "" "$SQL_SCRIPT"; then
|
||||||
log_success "Первичная настройка MariaDB выполнена успешно"
|
log_success "Первичная настройка MariaDB выполнена успешно"
|
||||||
else
|
else
|
||||||
log_error "Не удалось выполнить первичную настройку MariaDB"
|
log_error "Не удалось выполнить первичную настройку MariaDB"
|
||||||
rm -f "$MYSQL_SECURE_SCRIPT"
|
|
||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
rm -f "$MYSQL_SECURE_SCRIPT"
|
|
||||||
|
|
||||||
elif mysql -u root -p"$DB_PASSWORD" -e "SELECT 1;" >/dev/null 2>&1; then
|
# Сценарий 2: Подключение как root с паролем
|
||||||
log_info "MariaDB уже настроен с текущим паролем..."
|
elif test_connection "root" "$DB_PASSWORD"; then
|
||||||
mysql -u root -p"$DB_PASSWORD" -e "CREATE DATABASE IF NOT EXISTS ALTCor CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;" >/dev/null 2>&1
|
log_info "MariaDB уже настроен с текущим паролем для root..."
|
||||||
|
|
||||||
|
SQL_SCRIPT="CREATE DATABASE IF NOT EXISTS ALTCor CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;"
|
||||||
|
|
||||||
|
if execute_sql "root" "$DB_PASSWORD" "$SQL_SCRIPT"; then
|
||||||
log_success "База данных ALTCor создана/проверена"
|
log_success "База данных ALTCor создана/проверена"
|
||||||
|
else
|
||||||
|
log_error "Не удалось создать базу данных ALTCor"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Сценарий 3: Подключение как текущий пользователь без пароля
|
||||||
|
elif test_connection "$CURRENT_USER" ""; then
|
||||||
|
log_info "Подключение как '$CURRENT_USER' без пароля успешно."
|
||||||
|
|
||||||
|
# Проверяем права пользователя
|
||||||
|
if mysql -u "$CURRENT_USER" -e "SELECT User FROM mysql.user WHERE User='root';" >/dev/null 2>&1; then
|
||||||
|
log_info "Пользователь '$CURRENT_USER' имеет доступ к системным таблицам. Настраиваем root..."
|
||||||
|
|
||||||
|
SQL_SCRIPT="
|
||||||
|
SET sql_mode = '';
|
||||||
|
UPDATE mysql.user SET authentication_string = PASSWORD('$DB_PASSWORD') WHERE User = 'root' AND Host = 'localhost';
|
||||||
|
UPDATE mysql.user SET plugin = 'mysql_native_password' WHERE User = 'root' AND Host = 'localhost';
|
||||||
|
DELETE FROM mysql.user WHERE User='';
|
||||||
|
DELETE FROM mysql.user WHERE User='root' AND Host NOT IN ('localhost', '127.0.0.1', '::1');
|
||||||
|
DROP DATABASE IF EXISTS test;
|
||||||
|
DELETE FROM mysql.db WHERE Db='test' OR Db='test\\_%';
|
||||||
|
FLUSH PRIVILEGES;
|
||||||
|
CREATE DATABASE IF NOT EXISTS ALTCor CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
|
||||||
|
GRANT ALL PRIVILEGES ON ALTCor.* TO 'root'@'localhost';
|
||||||
|
FLUSH PRIVILEGES;"
|
||||||
|
|
||||||
|
if execute_sql "$CURRENT_USER" "" "$SQL_SCRIPT"; then
|
||||||
|
log_success "Первичная настройка MariaDB выполнена успешно"
|
||||||
|
else
|
||||||
|
log_error "Не удалось выполнить первичную настройку MariaDB"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
else
|
||||||
|
log_info "Пользователь '$CURRENT_USER' не имеет прав администратора. Создаем только базу данных..."
|
||||||
|
|
||||||
|
SQL_SCRIPT="CREATE DATABASE IF NOT EXISTS ALTCor CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;"
|
||||||
|
|
||||||
|
if execute_sql "$CURRENT_USER" "" "$SQL_SCRIPT"; then
|
||||||
|
log_success "База данных ALTCor создана"
|
||||||
|
else
|
||||||
|
log_error "Не удалось создать базу данных ALTCor"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Сценарий 4: Подключение как текущий пользователь с паролем
|
||||||
|
elif test_connection "$CURRENT_USER" "$DB_PASSWORD"; then
|
||||||
|
log_info "MariaDB уже настроен с текущим паролем для пользователя '$CURRENT_USER'..."
|
||||||
|
|
||||||
|
SQL_SCRIPT="CREATE DATABASE IF NOT EXISTS ALTCor CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;"
|
||||||
|
|
||||||
|
if execute_sql "$CURRENT_USER" "$DB_PASSWORD" "$SQL_SCRIPT"; then
|
||||||
|
log_success "База данных ALTCor создана/проверена"
|
||||||
|
else
|
||||||
|
log_error "Не удалось создать базу данных ALTCor"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
else
|
else
|
||||||
log_error "Не удалось подключиться к MariaDB. Попробуйте проверить пароль root вручную."
|
log_error "Не удалось подключиться к MariaDB."
|
||||||
|
log_info "Попробуйте выполнить настройку вручную:"
|
||||||
|
log_info "1. sudo mysql_secure_installation"
|
||||||
|
log_info "2. mysql -u root -p"
|
||||||
|
log_info "3. Проверьте состояние службы: systemctl status mariadb"
|
||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user