【问题标题】:Connection string using Windows Authentication使用 Windows 身份验证的连接字符串
【发布时间】:2012-12-25 13:23:46
【问题描述】:

我正在创建一个网站,但在数据库中我使用 Windows 身份验证。

我知道你用它来进行 SQL 身份验证

<connectionStrings> 
    <add name="NorthwindContex" 
       connectionString="data source=localhost;
       initial catalog=northwind;persist security info=True; 
       user id=sa;password=P@ssw0rd" 
       providerName="System.Data.SqlClient" /> 
</connectionStrings>

如何修改它以使用 Windows 身份验证?

【问题讨论】:

  • 不确定您的意思是不是一个通用的 windows 帐户供不同的人使用

标签: .net asp.net-mvc connection-string windows-authentication


【解决方案1】:

要通过 Windows 身份验证连接到 sql server 数据库,基本上需要您要连接的服务器、您的数据库名称、集成安全信息和提供程序名称。

基本上这是可行的:

<connectionStrings>      
<add name="MyConnectionString"
         connectionString="data source=ServerName;
   Initial Catalog=DatabaseName;Integrated Security=True;"
         providerName="System.Data.SqlClient" />
</connectionStrings> 

设置 Integrated Security 字段 true 基本上意味着您希望通过 Windows 身份验证访问数据库,如果您设置此字段 false Windows 身份验证不起作用。

根据您使用的提供商,它的工作方式也不同。

  • SqlClient Integrated Security=true;IntegratedSecurity=SSPI; 都在工作。

  • OleDb 它是Integrated Security=SSPI;

  • Odbc 它是 Trusted_Connection=yes;
  • OracleClientIntegrated Security=yes;

Integrated Security=true 与 OleDb 提供程序一起使用时会引发异常。

【讨论】:

    【解决方案2】:

    数小时后的正确解决方案:

    1. 打开配置文件
    2. 使用以下内容更改连接字符串

    &lt;add name="umbracoDbDSN" connectionString="data source=YOUR_SERVER_NAME;database=nrc;Integrated Security=SSPI;persist security info=True;" providerName="System.Data.SqlClient" /&gt;

    1. YOUR_SERVER_NAME 更改为您当前的服务器名称并保存
    2. 打开 IIS 管理器
    3. 查找网站或 Web 应用程序正在使用的应用程序池的名称
    4. 右键单击并选择高级设置
    5. Process Model 下的 Advanced settings 中将 Identity 更改为 Custom account 并添加您的服务器管理员详细信息,请参阅所附图片:

    希望这会有所帮助。

    【讨论】:

    • 这个解决方案对我有用,但我想知道这种身份变化如何影响应用程序的行为,就安全性而言?
    • 进程执行的所有操作都将使用该帐户的权限/特权运行。不要授予超出需要的权限。建议使用专门的服务帐户。建议同时检查 DISA IIS 和 Windows Server STIG:public.cyber.mil/stigs/downloads
    【解决方案3】:

    这更短并且有效

    <connectionStrings>      
    <add name="DBConnection"
                 connectionString="data source=SERVER\INSTANCE;
           Initial Catalog=MyDB;Integrated Security=SSPI;"
                 providerName="System.Data.SqlClient" />
    </connectionStrings> 
    

    不需要保留安全信息

    【讨论】:

      【解决方案4】:

      将用户名和密码替换为Integrated Security=SSPI;

      所以连接字符串应该是

      <connectionStrings> 
      <add name="NorthwindContex" 
         connectionString="data source=localhost;
         initial catalog=northwind;persist security info=True; 
         Integrated Security=SSPI;" 
         providerName="System.Data.SqlClient" /> 
      </connectionStrings> 
      

      【讨论】:

      • 我知道您可以将特定的 AD 用户设置为应用程序池(网络应用程序)。你可以为 windows 应用做同样的事情吗?
      • Persist Security Info 可能不需要:stackoverflow.com/a/2010059/1869660
      • @heads5150:我的项目中可能没有连接字符串吗?我错过了什么吗?我已经搜索了整个解决方案以找到如上所述的连接字符串。我找不到任何东西。我创建的那个在网络版本和网络配置中被评论了。我正在使用 vs express 2013 和本地数据库。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-02-08
      • 1970-01-01
      • 1970-01-01
      • 2012-08-29
      • 1970-01-01
      相关资源
      最近更新 更多