部署.NET 6 Razor Pages的ASP.NET应用时数据库登录失败求助
问题分析与解决方案
问题原因
你遇到的Login failed for user 'ERTEBATCITFOOD$'错误,核心原因是连接字符串使用了Integrated Security=True(Windows身份验证),但IIS应用运行的身份没有SQL Server的访问权限:
- 本地运行时,应用用的是你当前登录的Windows账户,这个账户大概率已经被授予了数据库访问权限,所以一切正常
- 部署到IIS后,应用默认使用IIS应用池的身份运行,错误里的
ERTEBATCITFOOD$是你的服务器机器账户(机器名后加$),这个账户没有被配置为SQL Server的合法登录用户,也没有food数据库的访问权限
解决方案
方案1:给机器账户授予SQL Server权限
- 打开SQL Server Management Studio(SSMS),登录到
citfood对应的SQL Server实例 - 展开安全性 > 登录名,右键选择新建登录名
- 选择Windows身份验证,在“登录名”输入框中填写
ERTEBATCITFOOD$(你的服务器机器名+$) - 切换到用户映射选项卡,勾选
food数据库,然后在下方“数据库角色成员身份”中勾选必要的权限(比如db_datareader、db_datawriter,根据你的应用操作需求选择) - 点击确定保存设置
方案2:改用SQL Server身份验证
修改连接字符串,使用专门的SQL Server账户(而非Windows身份):
string connectionString = "Data Source=citfood;Initial Catalog=food;User ID=你的SQL账户名;Password=你的SQL账户密码;";
- 确保这个SQL账户已经在SQL Server中创建,并且被授予
food数据库的相应访问权限
方案3:修改IIS应用池的运行身份
- 打开IIS管理器,找到你的网站对应的应用池
- 右键应用池,选择高级设置
- 在“进程模型”下找到标识,点击右侧的“...”按钮
- 选择一个已经拥有SQL Server访问权限的Windows账户(比如域账户、本地管理员账户,前提是该账户已在SQL Server中配置登录权限)
- 保存设置后,重启应用池和网站
内容的提问来源于stack exchange,提问作者Nastaran
相关产品推荐
相关产品推荐

