如何在Windows *上使用带有TinyTDS *和*集成安全连接的activerecord-sqlserver-adapter,而无需在纯文本中保存密码

时间:2011-10-04 23:54:06

标签: ruby-on-rails sql-server windows activerecord

我正在尝试使用Rails 3.1。在Windows机器上使用activerecord-sqlserver-adapter(3.1.1)和tiny_tds(0.4.5)。在阅读有关TinyTDS及其使用FreeTDS时,看起来我可以通过将域限定名称作为用户名(例如DOMAIN \ userbob)来使用集成安全性(也称为Windows集成安全性/ NTLM)。 但是文档仍然要我在database.yml文件中键入我的域用户密码。这是不好的做法,因为它不安全,不利用单点登录,这是集成安全的一部分。

我可以在不保存文件中的明文密码的情况下进行连接吗? e.g。

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

任何见解?可能吗?如果没有,应该

4 个答案:

答案 0 :(得分:2)

在SQL Server配置管理器实用程序的“SQL Server网络配置”中启用TCP / IP。 然后重新启动SQL Server服务。

关于安全性,您需要提供自己的凭据,否则将使用sa帐户。

答案 1 :(得分:2)

显然,SQL Server 2008默认设置为仅允许Windows身份验证。要更改它,您必须打开Management Studio,右键单击您的服务器并选择“属性”。选择安全性,然后单击服务器身份验证下的“SQL Server和Windows身份验证模式”。这将至少允许您直接连接到服务器,直到TinyTDS进行必要的更改以允许Windows身份验证。

答案 2 :(得分:1)

我认为进行连接的代码正在尝试使进程模拟凭据提供的安全上下文,而不是将默认凭据传递给SQL Server。

这将允许您为当前安全上下文指定不同的凭据。我已经使用这个技巧连接到需要来自不受信任域的SSIS的服务器。

我不知道TinyTDS / FreeTDS,也许null或空凭据会使它使用默认的安全上下文。尝试:

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

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

答案 3 :(得分:0)

尝试使用

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

或者你在sql server中设置了2个 authentification 吗?然后尝试与sa用户联系......