【问题标题】:.NET Authentication issue.NET 身份验证问题
【发布时间】:2012-07-17 14:27:47
【问题描述】:

我最近一直在为客户开发一个 ASP.NET 项目。该项目是将数据库从旧的 Oracle 数据库迁移到新的 SQL Server 2008 数据库。迁移进行得很顺利,大部分程序并没有花很长时间来修复。但是我们现在遇到了一个问题,到目前为止,我们一直在使用 SQL Server 身份验证并使用用户名和密码从 .NET 代码访问数据库。下面显示了连接字符串:

<add key="DatabaseConnectionString" value="Data Source=DATASOURCE;Initial Catalog=DATABASE;User Id=USERID;Password=PASSWORD;"/>

这工作正常,但是最近我收到了客户的一封电子邮件:

“请使用 Active Directory 帐户,而不是使用 .NET 应用程序的本地 SQL 帐户来访问数据库。在 web.config 中,它会显示 &lt;domain name&gt;/&lt;username&gt; 而不仅仅是 &lt;username&gt;。”

我感到困惑的是:

我是否必须将 SQL Server 中的身份验证模式更改为 Windows 身份验证? 客户是否打算将其从&lt;username&gt; 更改为&lt;domain&gt;/&lt;username&gt; 或相反? 我需要在 web.config 中的什么位置对用户名进行此更改?它在连接字符串中吗?

在这方面的任何帮助都会很棒。

我也不确定你是否需要知道这一点,但我还是添加了它......

这是 web.config 的 Authentication 部分:

<identity impersonate="true"/>
<authentication mode="Windows"/>

【问题讨论】:

    标签: sql sql-server authentication migration connection-string


    【解决方案1】:

    我是否必须将 SQL Server 中的身份验证模式更改为 Windows 身份验证?

    否,因为始终启用 Windows 身份验证。但是,禁用 Sql Server 身份验证是一种很好的做法。

    客户端的意思是把“用户名”改成“域/用户名”

    没有。这不仅仅是添加域名。您需要针对活动目录对用户进行身份验证,并使用委托进行 sql 连接。要使用 windows 帐户,您需要决定是要特定帐户访问 Sql Server,还是要登录网站的用户帐户。 我认为第一种方法几乎总是更好。为此,您需要从连接字符串中删除用户 ID 和密码,并将其替换为“Integrated Security=SSPI”,并将应用程序池标识设置为活动目录用户帐户。在 Sql Server 中,您需要授予此帐户执行所需操作的权限。 对于第二种方式,您需要对网站中的用户进行 Windows 身份验证,并使用委托进行连接。我不知道模仿是否足够。

    【讨论】:

    • 登录过程在应用程序中的工作方式(我认为)是它允许用户在数据库授权的域内连接到数据库。然后,一旦他们连接,它就会检查他们的用户名(域/用户名)是否存在于用户表中。如果是,则授予他们访问权限。
    • 我已经添加了 Intergrated Security=SSPI,这确实让我可以连接到数据库。但是在我的数据库中,我有一个模式前缀。所以我所有的存储过程都在一个模式中。当 .NET 代码尝试调用过程时,它没有添加前缀架构并且无法找到存储过程。我知道更改默认架构可以解决此问题,但是因为我们使用的是一组用户(用户的域组),所以我们无法更改默认架构。
    • 在您更改为集成安全之前,是否在过程调用中添加了前缀?
    • 在 .NET 代码中不添加前缀,因为 Oracle 数据库不需要它。但是,当迁移助手创建存储过程时,它会将模式前缀添加到所有表、函数、存储过程和触发器的开头。 .NET 代码中有太多存储过程,无法添加前缀。
    • 我认为你应该发布另一个关于此的问题
    猜你喜欢
    • 2020-02-24
    • 1970-01-01
    • 2011-06-08
    • 1970-01-01
    • 2021-05-16
    • 2013-07-23
    • 2015-08-25
    • 2010-11-17
    相关资源
    最近更新 更多