Ситуация 1 - подключение сервера к базе данных
Здесь нет простого ответа. Для подключения серверу нужен пароль (или симметричный ключ, или закрытый ключ, или что-то еще). Он должен получить его либо с диска, либо с помощью каких-либо внешних средств (например, администратор вводит его при запуске). Добавление некоторой косвенности, такой как шифрование всех конфиденциальных данных под мастер-паролем, может добавить некоторое удобство, но в остальном не меняет ситуацию.
Как правило, можно поместить пароль или ключ в файл на сервере. Если вы сделаете это, убедитесь, что права доступа к файлу установлены таким образом, чтобы доступ к нему имели только те пользователи, которым он нужен. Это отличная причина для того, чтобы разные процессы в вашей системе выполнялись под разными пользователями и для каждого из них устанавливались отдельные роли / учетные записи и пароли.
Ситуация 2 - пользователи, входящие на сервер с удаленного компьютера
Я думаю, вы движетесь в правильном направлении. Похоже, что вы просите, это безопасный протокол аутентификации. Вам нужен тот, который обеспечивает взаимную аутентификацию и предотвращает атаку типа «человек посередине», если он не выполнен, если попытка такой атаки предпринята. Конечно, есть из чего выбирать.
Также стоит подумать, должна ли ваша аутентификация работать на основе «что-то, что вы знаете» (пароли) или «что-то, что у вас есть» (открытый / закрытый ключи). Исходя из вашего вопроса, что мы ищем пароли, мне нравятся два: SRP и Kerberos.
SRP был упомянут ранее, и это не привлекает почти того внимания, которого оно заслуживает. Преимущество SRP состоит в том, что ему не требуется, чтобы сервер знал пароль или ключ, или что-либо еще, что злоумышленник мог использовать для получения доступа. Если вы взломали правильно настроенный сервер с помощью SRP и украли все данные, вам все равно нужно будет выполнить что-то вроде атаки по словарю на каждый ключ индивидуально, прежде чем вы сможете использовать что-либо, чтобы выдать себя за пользователя.
Мне также нравится Kerberos, потому что он поддерживается тоннами программного обеспечения (я знаю, что Postgres поддерживает его, я только нашел упоминания о mysql, не поддерживающем какую-либо хорошую технологию аутентификации) и имеет систему «билетов», которая обеспечивает единый знак по возможности. Kerberos нужна какая-то другая технология, чтобы усилить свой первоначальный обмен аутентификацией, и SRP был бы хорош для этого, но я не уверен, что они это уже сделали. Я думаю, что-то в этом делает KDC (сервер ключей) с состоянием.
Слабость Kerberos в том, что вы должны быть более осторожны с сервером, хранящим ключи. Хотя он не хранит пароли в виде открытого текста, он хранит ключи, которые по сути являются хешированными версиями паролей. И хотя клиент точно не отправляет ни пароль, ни ключ при аутентификации (в конце концов, это настоящий протокол аутентификации), он использует хешированный пароль в качестве ключа, и поэтому любой другой, кто знает алгоритм и знает ключ может сделать то же самое. Мы говорим, что сервер хранит «эквивалент пароля». В результате все руководства говорят администраторам размещать сервисы Kerberos в своих отдельных, заблокированных полях, чтобы свести к минимуму вероятность компрометации их содержимого.
Приятно то, что, как только вы установили строгий обмен аутентификацией, другие хорошие вещи обычно выпадают из него бесплатно. В итоге обе стороны делятся общим «секретом», который можно использовать один раз в течение сеанса, никогда не отправлять по проводам и не может узнать третья сторона. Хотите шифрование? Там ключ, все готово к работе. Именно так определен защищенный SRP SSL в RFC 5054.