Что-то нужно сказать для варианта 2, если вы находитесь в среде, где приложение сталкивается с Интернетом, а также с внутренними пользователями, которые имеют больше привилегий.
Таким образом, вы можете запустить серверы приложений, обращенные к Интернету, под менее привилегированной (с точки зрения доступа к таблице) учетной записью в БД, и внутренние пользователи смогут получить доступ к отдельному серверу с дополнительным доступом. Преимущество состоит в том, что даже если маршрут, обращенный к Интернету, будет полностью скомпрометирован, у него все равно не будет привилегий связываться с таблицами, к которым внутренние пользователи должны иметь доступ.
Варианты 1 и 2 будут работать хорошо, если ваша система аутентификации будет поддерживать делегирование (например, аутентификация Windows, Kerberos) - потому что тогда серверу приложений не нужно будет хранить или хранить свои собственные учетные данные, он может просто выдать себя за клиента. На самом деле это было бы значительно лучше, чем вариант 3 (потому что, если сервер скомпрометирован, злоумышленник может использовать только привилегии подключенных в данный момент пользователей, но не сможет получить доступ ко всей базе данных). Однако редко вы можете использовать эту функцию.
В обычном интернет-настройке 3 - единственный реалистичный выбор.
Редактировать: ни один из этих вариантов не мешает вам осуществлять дальнейшее управление доступом с помощью бизнес-логики на уровне приложений, поэтому неверно говорить, что это преимущество варианта 3, как предлагали некоторые ответы. Уровень приложения все еще знает, кто его клиент во всех случаях.