首页 > 解决方案 > 对象“aaa”、数据库“bbb”、模式“dbo”的 SELECT 权限被拒绝

问题描述

我有一个 .net 核心应用程序,它在生产环境中托管在 Window Server 2012 IIS 上。屏幕之一是显示 select 语句的结果。

但我得到了错误

`对对象 'aaa'、数据库 'bbb'、模式 'dbo' 的 SELECT 权限被拒绝。

问题是我可以从 Microsoft SQL Server Management Studio 成功运行选择查询。

我的代码中的连接字符串是

"Server=MyServer, Database=MyDatabase;Integrated Security=True"

我在连接字符串上没有用户帐户,所以请不要建议我右键单击数据库上的 security\Users 节点来授予用户读写权限等。

我认为它是在 Windows Server 中设置的吗?

更新: 在我们的测试 QA 站点中,我们有另一个 Windows Server 2012。相同的代码,但是测试网站运行良好。所以我认为有区别,但我无法弄清楚。应用程序文件夹安全设置相同。

标签: sql-serverwindowssecurityasp.net-corewindows-server-2012-r2

解决方案


在您的本地机器上进行测试时,应用程序在您的用户帐户的上下文中运行。这是用于连接到具有集成安全性的数据库的帐户。

在 IIS 中部署时,应用程序在映射到 IIS应用程序池的网站或虚拟目录的上下文中运行。您可以在 IIS 管理器中看到这些应用程序池。应用程序池在特定用户帐户的上下文中运行,这是用于集成安全的帐户:

应用程序池身份

您需要找到此帐户并授予它访问您的数据库的权限。某些常见的帐户类型,例如Network ServiceApplicationPoolIdentity,不能很好地与开箱即用的集成安全性配合使用。您可能需要采取额外的步骤,甚至在 Active Directory 中创建或请求一个您可以使用的特殊服务帐户。


推荐阅读