gpt4 book ai didi

.net - 将凭据从 ASP.NET 传递到 SQL Server 时出现问题

转载 作者:行者123 更新时间:2023-12-03 02:48:03 24 4
gpt4 key购买 nike

设置:

Windows 2008 Server R2 Enterprise、SQL Server 2008 R2 Enterprise、ASP.NET 2.0 Web 应用程序上的 IIS。

目的:

我们正在将旧 Web 应用程序的安全模型从使用单个 SQL Server 帐户转换为使用 Active Directory 帐户。在 ASP.NET 应用程序中,我们添加了 <identity impersonate="true" />作为 <system.web> 中的第一项web.config 部分。我们添加了数据库角色,其中包含 Active Directory 组,用于授予对现有存储过程的访问权限。我们的 web.config 已经包含 <authentication mode="Windows"/> 。这是我的连接字符串,编辑了服务器和数据库名称:

<add name="DbConn" 
connectionString="
Data Source=SERVER;
Initial Catalog=DBNAME;
Integrated Security=SSPI;"
providerName="System.Data.SqlClient"
/>

问题:

尝试打开数据库的 SqlConnection 时出现错误:

Login failed for user 'NT AUTHORITY\ANONYMOUS LOGON'.

我没有遍历应用程序的所有逻辑层(网页到 .DLL 层),而是放入了一个快速、简单的网页来执行一些操作 Response.WritePage_Load() 。我得到这个(帐户信息已编辑):

HttpContext.Current.User.Identity.Name = domain\my account

My.User.Name = domain\my account

然后Page_Load调用一个执行某些操作的 Sub Response.Write并尝试运行现有的存储过程。我明白了:

Before opening the DB connection ...

HttpContext.Current.User.Identity.Name = domain\my account

My.User.Name = domain\my account

Sub TestDbCall() Failed! ex.Message = Login failed for user 'NT AUTHORITY\ANONYMOUS LOGON'.

打开 SqlConnection 失败,并显示上述错误消息(登录失败...)。显然,ASP.NET 应用程序识别了我的域帐户。我的 Windows 凭据似乎没有从 ASP.NET 应用程序传播到 SQL Server。我不知道为什么。

编辑:

我找到了这个page on microsoft.com也就是说,为了访问不在 IIS 服务器上的 SQL Server(谁会这样做???),您不能在 IIS 中使用 Windows 身份验证。相反,您必须使用基本身份验证。它有效,但我不喜欢用户帐户名和密码以纯文本形式在公司网络中 float 的想法。因此,即使它“有效”,我也不接受我自己的发现作为答案。

最佳答案

当您的 IIS 使用 Windows 身份验证对用户进行身份验证,然后在模拟连接的用户时,它连接到本地 IIS 框之外的任何资源(例如 SQL Server 实例),该过程称为委派,如 Kerberos Protocol Transition and Constrained Delegation 中所述。该过程有时被非正式地称为“双跳”,是许多 How-Tos 的主题:

关于.net - 将凭据从 ASP.NET 传递到 SQL Server 时出现问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7730575/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com