我们在 IIS 6 中运行了一些 Web 应用程序。它们在身份为网络服务的默认应用程序池中运行。
应用程序连接到本地 SQL Server 2005 Express 实例 (SP2) 并使用受信任的连接。SQL Server 也以网络服务身份运行。
无需授予明确的权限,我们的 Web 应用程序就能够查询数据库。
这种情况怎么会发生?我们的应用程序实际上拥有哪些权限?
答案1
一些想法:
- SQL Server Express实例服务是否在网络服务下运行,那么是否具有sysadmin权限?
- 网络服务是否在本地管理员组中,因此具有系统管理员权限?
- 网络服务帐户是否添加到 SQL Server 作为登录名?
答案2
这再次强调了不要使用 NETWORK SERVICE 帐户运行 SQL Server 的情况,因为您不知道与哪些其他服务共享该帐户。
最好将 SQL Server 配置为在其他帐户下运行。SQL Server 服务的特殊本地帐户效果最好 - 然后您可以使用它向 SQL Server 授予额外权限,以备不时之需。
如果将 SQL Server 配置为在不同帐户下运行并从登录中删除 NETWORK SERVICE 后仍然可以从 IIS 连接,则在从 IIS 连接时运行此查询:
select * from sys.login_token
然后查找 principal_id 列中具有非零值的 WINDOWS GROUPS 和 WINDOWS LOGIN。该组或登录是 IIS 连接到 SQL Sever 的方式。
答案3
也许权限被授予了IIS_WPG
SQL Server 上的组?默认情况下,网络服务帐户 (NTAUTHORITY\NETWORK SERVICE) 是该组的成员。