【发布时间】:2022-01-09 04:12:34
【问题描述】:
我正在尝试调试一个问题,即让 Tableau 服务器使用 Impersonate via server Run As account 向 SQL Server 数据库发出请求。
我现在正在尝试跟踪请求以查看故障点。
有没有办法查看对 SQL 服务器发出的所有模拟请求和/或在请求用户模拟另一个用户时执行的查询?
【问题讨论】:
-
如果 Tableau 对运行身份帐户使用 Windows 模拟,那么 SQL Server 将不会对此一无所知。
-
我创建了一个带有 sql server 的临时 VM,并将我的请求定向到它。在其事件查看器中,我可以看到 Tableau 服务器帐户用户使用
Impersonation Level: Impersonation发出的请求。我假设某处存在类似于REVERT; EXECUTE AS User = @user;的查询,其中@user等于向Tableau 服务器发出请求的用户。我很好奇在哪里可以看到这个查询,如果它存在的话。使用事件查看器可以看到登录用户正在模拟的用户吗? -
不,这不是查询。 Windows 身份验证通过使用 Kerberos/NTLM 从 DC(或来自非 AD 服务器的哈希)获取票证,然后可以将其传递给其他服务进行身份验证。如果使用模拟,那么我认为您无法从 SQL Server 端分辨出来。那
Impersonation Level被定义为“服务器可以在本地系统上模拟客户端的安全上下文”,见docs.microsoft.com/en-us/windows/win32/secauthz/…,这只是意味着服务器可以模拟客户端,而不是客户端本身在冒充 -
@Charlieface 我找到了查询和问题。要模拟用户必须首先连接到数据库,说明他们正在模拟另一个用户,这样数据库可以识别用户是否有权模拟用户并继续请求。我已将找到的查询发布在它执行此操作的位置。
-
是的,一旦客户端连接,您就可以跟踪
EXECUTE AS。您无法跟踪的是最初在 Windows 用户模拟上下文下连接的客户端。我想这是我试图完全回答的另一个问题