当我在 SQL Server 2005 中将模拟与数据库链接结合起来时,我得到了一个奇怪的行为。首先,我使用简单的 SQL Server Authentication with Login 'John'连接到数据库服务器。在此服务器上,定义了服务器链接remote_sqlserver。我已经在此服务器中拥有mydb的 SELECT 权限。当我只是在此服务器链接上查询数据库上的表时:
SELECT count(*)
FROM remote_sqlserver.mydb.dbo.mytable -- Works!
之后,我尝试使用相同的登录名进行模拟(不要问为什么要这样做,我只是在尝试;))
EXECUTE AS LOGIN = 'John'
SELECT count(*)
FROM remote_sqlserver.mydb.dbo.mytable -- Error: "Login failed for user: 'John'"
当我恢复时,它再次起作用:
REVERT
SELECT count(*)
FROM remote_sqlserver.mydb.dbo.mytable -- Works!
你有什么想法,为什么我得到一个模拟错误,虽然相同的登录可以在没有模拟的情况下查询表?
顺便说一句:在“冒充自我”之后,如果我查询本地数据库,(当然,我有足够的权限)我不会收到任何错误。只有当我通过服务器链接查询远程数据库时才会发生这种情况。