ваше сообщение коммита
This commit is contained in:
73
decrypt-all-tables.sh
Executable file
73
decrypt-all-tables.sh
Executable file
@@ -0,0 +1,73 @@
|
||||
#!/bin/bash
|
||||
|
||||
# Скрипт для расшифровки всех таблиц
|
||||
# Использование: ./decrypt-all-tables.sh
|
||||
|
||||
ENCRYPTION_KEY=$(cat ./ssl/keys/full_db_encryption.key)
|
||||
|
||||
echo "🔓 Расшифровка всех таблиц..."
|
||||
|
||||
# Получаем список всех таблиц
|
||||
TABLES=$(docker exec dapp-postgres psql -U dapp_user -d dapp_db -t -c "
|
||||
SELECT table_name
|
||||
FROM information_schema.tables
|
||||
WHERE table_schema = 'public'
|
||||
AND table_type = 'BASE TABLE'
|
||||
ORDER BY table_name;")
|
||||
|
||||
# Функция для расшифровки таблицы
|
||||
decrypt_table() {
|
||||
local table_name="$1"
|
||||
echo "🔓 Расшифровка таблицы: $table_name"
|
||||
|
||||
# Получаем зашифрованные колонки
|
||||
local encrypted_columns=$(docker exec dapp-postgres psql -U dapp_user -d dapp_db -t -c "
|
||||
SELECT column_name
|
||||
FROM information_schema.columns
|
||||
WHERE table_name = '$table_name'
|
||||
AND table_schema = 'public'
|
||||
AND column_name LIKE '%_encrypted'
|
||||
ORDER BY ordinal_position;")
|
||||
|
||||
if [ -z "$encrypted_columns" ]; then
|
||||
echo " ⏭️ Нет зашифрованных колонок"
|
||||
return
|
||||
fi
|
||||
|
||||
echo " 📝 Зашифрованные колонки:"
|
||||
echo "$encrypted_columns" | while read -r column_name; do
|
||||
if [ -n "$column_name" ]; then
|
||||
echo " $column_name"
|
||||
# Определяем тип колонки
|
||||
data_type=$(docker exec dapp-postgres psql -U dapp_user -d dapp_db -t -c "
|
||||
SELECT data_type FROM information_schema.columns
|
||||
WHERE table_name = '$table_name' AND column_name = '$column_name' AND table_schema = 'public';" | xargs)
|
||||
# Определяем первичный ключ для таблицы
|
||||
primary_key=$(docker exec dapp-postgres psql -U dapp_user -d dapp_db -t -c "
|
||||
SELECT column_name FROM information_schema.key_column_usage
|
||||
WHERE table_name = '$table_name' AND constraint_name LIKE '%_pkey'
|
||||
AND table_schema = 'public' LIMIT 1;" | xargs)
|
||||
|
||||
if [ "$data_type" = "jsonb" ] || [ "$data_type" = "json" ]; then
|
||||
# Расшифровываем json/jsonb
|
||||
docker exec dapp-postgres psql -U dapp_user -d dapp_db -c "
|
||||
SELECT $primary_key, decrypt_json($column_name, '$ENCRYPTION_KEY') as ${column_name%_encrypted}_decrypted
|
||||
FROM $table_name WHERE $column_name IS NOT NULL LIMIT 5;"
|
||||
else
|
||||
# Расшифровываем текстовые
|
||||
docker exec dapp-postgres psql -U dapp_user -d dapp_db -c "
|
||||
SELECT $primary_key, decrypt_text($column_name, '$ENCRYPTION_KEY') as ${column_name%_encrypted}_decrypted
|
||||
FROM $table_name WHERE $column_name IS NOT NULL LIMIT 5;"
|
||||
fi
|
||||
fi
|
||||
done
|
||||
}
|
||||
|
||||
# Расшифровываем каждую таблицу
|
||||
echo "$TABLES" | while read -r table_name; do
|
||||
if [ -n "$table_name" ]; then
|
||||
decrypt_table "$table_name"
|
||||
fi
|
||||
done
|
||||
|
||||
echo "✅ Расшифровка завершена!"
|
||||
Reference in New Issue
Block a user