Шифрование паролей powershell

У меня есть сценарий powershell, который подключается к базе данных MySQL. Конечно, для этого подключения требуется пароль, и я хотел бы каким-то образом зашифровать пароль, а не хранить пароль в виде обычного текста.

Я изучил методы securestring, выводя пароль в файл, однако я не думаю, что они будут работать, потому что зашифрованный пароль может быть расшифрован только первоначальным пользователем, а скрипт будет распространен на несколько машин. по сети.

Любые предложения о любых других методах, которые были бы полезны?

Спасибо


person steve    schedule 15.03.2011    source источник


Ответы (2)


Если сценарий будет распространяться на несколько компьютеров в сети, то все учетные данные, которые будет использовать ваш сценарий, будут доступны для этих пользователей, и это невозможно обойти.

Вы можете сделать две вещи, если есть какие-либо личные данные для каждого пользователя:

  1. создайте новую учетную запись пользователя в базе данных для каждого пользователя вашей программы с ограничительными разрешениями, позволяющими им делать только то, что вы хотите, и ничего более
  2. иметь прокси-сервер, который аутентифицирует их и подключается к базе данных от их имени (так работает большинство веб-сайтов)

Если все данные общедоступны и доступны только для чтения, вы можете:

  1. создайте учетную запись пользователя в базе данных для доступа только для чтения и используйте ее учетные данные во всех распространяемых копиях вашей программы.
  2. иметь прокси-сервер, который не аутентифицирует пользователей, но подключается к базе данных, а не выставляет ее на всеобщее обозрение

Номер 2 каждого из этих параметров обычно рекомендуется для каждой базы данных с историей безопасности MySQL, но номер 1 обоих этих параметров рекомендуется для таких баз данных, как CouchDB.

Никогда не распространяйте никакие учетные данные с вашей программой, которые вы не хотите, чтобы ваши пользователи использовали.

person Zed    schedule 15.03.2011

Я использовал эту библиотеку PowerShell http://lunaticexperiments.wordpress.com/2009/10/23/powershell-string-encryption-and-gpg/ для шифрования паролей Oracle и Informix.

Вот пример

    #Source Encryption Functions
. ./Library-StringCrypto.ps1
#encrypt string using passphrase
$encrypt = Write-EncryptedString $connString "4#&7yaoff"
#Show encrypted string
$encrypt
#Decrypt string
Read-EncryptedString $encrypt "4#&7yaoff"
person Chad Miller    schedule 15.03.2011
comment
Если вы распространяете зашифрованную версию $connString вместе с вашим приложением, вы также должны распространять ключ шифрования ("4#&7yaoff"), который может быть использован кем угодно для расшифровки $connString. По сути, вы поменяли проблему сокрытия пароля базы данных на проблему сокрытия пароля шифрования. И вы не можете просто зашифровать этот пароль другим паролем, с черепахами до конца. - person Zed; 15.03.2011
comment
Вместо этого вы можете использовать GnuPG с Library-StringCrypto. - person Chad Miller; 15.03.2011
comment
Вы можете использовать PGP, вы можете использовать AES, вы можете использовать любой симметричный или асимметричный, блочный или потоковый шифр. Но в конечном итоге вам придется дать вашему приложению ключ для расшифровки ваших данных, не так ли? Сила алгоритма не имеет значения, если вы в первую очередь даете пользователю свой ключ. Вы также можете использовать кодировку Base64, потому что она не обеспечивает никакой безопасности. - person Zed; 15.03.2011
comment
Первоначальный вопрос относился к шифрованию паролей, что в реальном мире необходимо. Да, я согласен, что лучше не иметь дело с шифрованием паролей и использовать аутентификацию Windows или любой другой метод прокси, но в конце концов вам все равно нужно будет где-то надежно хранить пароль. - person Chad Miller; 16.03.2011
comment
Первоначальный вопрос касался шифрования основного пароля базы данных, чтобы защитить его от пользователей скрипта, что по своей сути невозможно. Хорошо, предположим, что вы зашифровали пароль базы данных с помощью самого сильного алгоритма на Земле. Ваш скрипт расшифровывает пароль базы данных с помощью секретного ключа — "4#&7yaoff" в вашем примере. Что вы делаете с ключом? Как вы храните его безопасно, чтобы пользователь вашего скрипта не мог его увидеть, но ваш скрипт мог его использовать? - person Zed; 16.03.2011
comment
Парольная фраза была примером. Я не считаю, что это полное решение, оно просто решает проблему методов защищенной строки PowerShell, которые позволяют только определенному пользователю расшифровывать с помощью своего пользовательского ключа. Согласитесь, это создает другие проблемы. - person Chad Miller; 16.03.2011
comment
ХОРОШО. Я бы предложил использовать решения из обоих наших ответов вместе, т.е. предоставлять отдельные учетные данные для каждого пользователя и хранить их таким образом, чтобы только определенный пользователь мог расшифровывать данные с помощью своего пользовательского ключа. Я думаю, что ваше решение подходит для паролей пользователей. Я беспокоился только о сохранении пароля основной базы данных таким образом, но, возможно, я был недостаточно ясен. Я просто хочу прояснить, что ваши идеи по хранению учетных данных пользователей очень хороши. - person Zed; 16.03.2011
comment
IANASE, но есть и другая опасность... Даже если пользователь не может легко расшифровать пароль, чтобы узнать его, у него все еще есть сценарий, использующий пароль для аутентификации. Затем они могут использовать эту аутентификацию, чтобы делать все, на что эта учетная запись имеет разрешения. Помните, что шифрование — это способ защиты от третьих лиц, а не способ скрыть информацию, которая нужна пользователю. - person JasonMArcher; 16.03.2011