Как использовать activeerecord-sqlserver-адаптер с TinyTDS * и * интегрированное соединение безопасности в Windows * без * сохранения пароля в текстовом виде

Я пытаюсь использовать Rails 3.1. с адаптером activerecord-sqlserver (3.1.1) и tiny_tds (0.4.5) на машине Windows. В чтении о TinyTDS и использовании FreeTDS похоже, что я могу использовать Integrated Security (aka Windows Integrated security/NTLM), поместив в качестве имени пользователя имя домена (например, DOMAIN\userbob). Но документы все еще хотят, чтобы я набрал пароль пользователя моего домена в файле database.yml. Эта плохая практика, потому что она небезопасна и не использует преимущества единого входа, что является частью точки интегрированной безопасности.

Можно ли подключиться без сохранения пароля в виде обычного текста в файле? например.

developement:
    adapter: sqlserver
    mode: dblib
    dataserver: localhost
    database: dev_db
    username: DOMAIN\userbob
#    password: no_no_please_dont_make_me_type_it_here

Но даже если я помещаю пароль, я получаю следующую ошибку:

TinyTds::Error: Unable to connect: Adaptive Server is unavailable or does not exist
    from C:/Ruby192/lib/ruby/gems/1.9.1/gems/tiny_tds-0.4.5-x86-mingw32/lib/tiny_tds/client.rb:60:in `connect'
    from C:/Ruby192/lib/ruby/gems/1.9.1/gems/tiny_tds-0.4.5-x86-mingw32/lib/tiny_tds/client.rb:60:in `initialize'

Я знаю, что мой сервер запущен, и текущий контекст пользователя может подключаться, потому что это работает:

sqlcmd -S localhost -d dev_db -E

Любые идеи? Является ли это возможным? Если нет, это должно быть.

Ответ 1

Включить TCP/IP в "Конфигурация сети SQL Server" в утилите SQL Server Configuration Manager. Затем перезапустите службу SQL Server.

Что касается безопасности, вам нужно будет предоставить свои собственные учетные данные, иначе он будет использовать учетную запись sa.

Ответ 2

По-видимому, SQL Server 2008 по умолчанию настроен для ТОЛЬКО для проверки подлинности Windows. Чтобы изменить это, вы должны открыть студию управления, щелкните правой кнопкой мыши на своем сервере и выберите "Свойства". Выберите "Безопасность" и нажмите "Режим проверки подлинности SQL Server и Windows" в разделе "Аутентификация сервера". Это, по крайней мере, позволит вам напрямую подключиться к серверу, пока TinyTDS не сделает необходимые изменения, чтобы разрешить проверку подлинности Windows.

Ответ 3

Я думаю, что код, создающий соединение, пытается заставить процесс олицетворять контекст безопасности, предоставленный учетными данными, вместо передачи учетных данных по умолчанию на сервер SQL.

Это позволит вам указать разные учетные данные для текущего контекста безопасности. Я использовал этот трюк для подключения к серверу, требующему SSIS из ненадежного домена.

Я не знаю TinyTDS/FreeTDS, возможно, нулевые или пустые учетные данные будут использовать контекст безопасности по умолчанию. Попробуйте:

developement:
    adapter: sqlserver
    mode: dblib
    dataserver: localhost
    database: dev_db

или

developement:
    adapter: sqlserver
    mode: dblib
    dataserver: localhost
    database: dev_db
    username:
    password:

Ответ 4

Попробуйте использовать

developement:
    adapter: sqlserver
    mode: dblib
    dataserver: localhost\SQLEXPRESS
    database: dev_db
    username: DOMAIN\userbob

или вы установите 2 варианта аутентификации на вашем сервере sql? затем попробуйте подключиться к пользователю sa...