我几天前发布了related question并提供了答案。
我面临一个奇怪的问题,我有2台服务器,第一台是dev
服务器,第二台是QA
当我在dev
服务器上执行以下行时,它工作正常,但当我在QA
上执行时,它会给我错误Login failed for user 'NT AUTHORITY\ANONYMOUS LOGON'
,正如我在上一个问题中发布的那样
EXEC master.dbo.xp_cmdshell ‘sqlcmd -D db_name -S server_name -i sqlfile’
要解决上述问题,我在上述查询中提供了用户名和密码,并且它在DEV
和QA
服务器上都正常运行。但是提供用户名和密码并不是一个好方法,好像我们将更改服务器或pwd它直接影响我的查询。所以我想在username
上不使用pwd
和QA
执行cmdshell命令。
任何人都可以告诉我QA
上缺少的内容。我已经在QA
任何快速帮助
答案 0 :(得分:0)
这是因为该命令的用户运行时为NT AUTHORITY\ANONYMOUS LOGON
,并且此登录名无权访问该数据库。
考虑一下:一切都必须在用户上下文下运行。每个进程都需要一个拥有Windows用户的进程。
您正在运行的SQLCMD
- 运行它的Windows用户是谁?不是你。它是SQL Server服务。 (对xp_cmdshell做一些研究)
您首先需要对Windows服务帐户进行一些研究并了解它们是什么。
然后,一些可能的解决方案:
一个。检查您的QA SQL Server服务正在运行(在services.msc的登录选项卡中)
B.使用链接服务器而不是your
登录
C.您也可以使用某种代理(Windows用户仅为此目的覆盖SQL服务用户)但我没有调查过。