Вам нужно добавить уровень столбца
df.columns = pd.MultiIndex.from_product([['John'], df.columns])
John
Season_1 Season_2
Wins 151 120
Losses 124 110
Последующий вопрос1: «Джон» для Сезонов_1 и «Адам» для Сезона_2
df.columns = pd.MultiIndex.from_tuples([('John', 'Season_1'), ('Adam', 'Season_2')])
Последующий вопрос2: 5 столбцы («A», «B», «C», «D», «E») и назначить уровень «One» для «A», «B», «C» и уровень «Two» для «D» "," E ".
df.columns = pd.MultiIndex.from_tuples([('One', 'A'),('One', 'B'),('One', 'C'), ('Two', 'D'),('Two', 'E')])
Я не уверен, что использование MySQL для шифрования будет лучшим решением вашей проблемы.
Считается, что пакет PHP M_CRYPT довольно хорош, и он дает вам гибкость в выборе алгоритма, который лучше всего подходит для ваших нужд.
Хранение вашего ключа на каком-либо другом сервере имеет одно большое преимущество: ключ находится не на том же компьютере, что и зашифрованные данные *) . Поэтому, пока злоумышленник не имеет достаточного контроля над взломанным компьютером, он не может получить ключ.
Если злоумышленник получит полный контроль над машиной, на которой хранятся данные, он, скорее всего, сможет запросить ключ у веб-службы.
Однако передача ключа с одной машины на другую открывает целую новую область. это должно быть обеспечено. Возможно, потребуется больше ключей и больше уровней шифрования, что увеличит вероятность ошибок.
*) Другой вариант - вводить пароль при запуске веб-сервера и хранить его только в памяти.
Возможное решение
Если было замечено решение, которое использовало следующий метод для шифрования файлов для пользователей с веб-доступом (я не уверен в вашей среде, но это могло бы быть полезным):
Преимущества этого подхода:
1 , Случайный ключ зашифрован в базе данных. Таким образом, у вас все еще есть дополнительная безопасность сервера базы данных в сочетании с зашифрованным столбцом.
2. Документы хранятся с разными ключами, если злоумышленник завладеет ключом, скомпрометирована только часть документов.
Однако:
Если злоумышленник завладеет главным паролем и получит доступ для чтения к пользователю В этом случае вся система снова сломана.
Я, вероятно, сохранил бы его в файле, который находится в non-web-accessible каталоге и заблокирован вниз с полномочиями файловой системы как можно больше.
Ваш стоящий с сетью сценарий не должен открывать файлы файловой системы с помощью переменных, особенно обеспеченных пользователями. Даже не давайте им опцию скольжения, что-то передало Ваш входной фильтр (Вы фильтруете свое обеспеченное пользователями право данных?) и возможно отказ от содержания файла ключей. Сохраните пути к файлам к трудно кодированным строкам и определите () только. Начиная с большинства Ваших данных хранится в MySQL, это не должно быть проблемой.
При выполнении дешифрования считайте ключ в чисто инициализированную переменную, сделайте дешифрование, затем перезапишите ключевую переменную (скажите со строкой x's), и сбросьте переменную. Это, вероятно, все немного параноидальные звуки, но если Вы минимизируете время ключ, находятся в ясном в памяти, и изолируйте его от всех других переменных, облетающих вокруг Вашего Сценария PHP, это не может сделать Вас немного менее безопасными.
Если Вы и еще один человек - единственные, которые имеют физический доступ к машине, это, вероятно, очень хорошо. Если кто-то врывается и крадет поле, ну, в общем, у них есть все Ваши данные так или иначе так игра закончена.
Кажется, что Вы полагаете, что использование 'определенного для столбца' ключа использует с 'AES_ENCRYPT' и 'AES_DECRYPT'. Как комментатор сказал, это - плохая идея, потому что любое проникновение будет иметь доступ ко всем данным.
При использовании 'предоставленного пользователями' пароля, с/без солью, Вы намного более безопасны.
Тем не менее, если ключ шифрования только читаем приложением с помощью него, Вы, вероятно, 'достаточно хороши'. Если в машину врываются, они собираются получить Ваши данные быстрее с единственным ключом все же.