2012-03-27 94 views
1

我使用SQL Server Management Studio中的SQL身份验证(非SA用户)连接到我的数据库。当我执行以下查询时,我得到“访问远程服务器被拒绝,因为没有登录映射存在。”使用OPENDATASOURCE执行查询时出错

EXEC OPENDATASOURCE('SQLNCLI','Server=MyServer;Trusted_Connection=yes;').Database.dbo.myStoredProcedure 

如果我以sa身份连接到SQL Server Management Studio,则查询执行时不会出现任何错误。

如何执行一个OPENDATASOURCE查询通过连接到SQL Server Management Studio作为非sa用户下的sql身份验证,而不提供查询中的用户名和密码?

回答

0

sa帐户将执行OPENDATASOURCE作为windows服务帐户登录。 这是一种解决方法。

EXEC N' 
EXEC OPENDATASOURCE(''SQLNCLI'',''Server=MyServer;Trusted_Connection=yes;'').Database.dbo.myStoredProcedure' 
AS LOGIN = 'sa'; 

不过说真的,您应该设置您的远程服务器上的SQL凭据。 然后用您的User IDPassword替换可信连接。 如果您不想在查询中添加用户标识和密码,请将其设置为链接服务器。

http://msdn.microsoft.com/en-us/library/ms179856(v=sql.100).aspx

+0

注:执行为SA则需要模拟权限或成为系统管理员。 – 2012-03-27 17:37:12

0

您可以创建一个临时链接的服务器,然后放下。这将使用当前登录的SQL用户凭据,并假设同一用户的另一个框它应该工作存在:

exec sp_addlinkedserver @server='MyServer', @srvproduct='SQL Server' 
exec sp_addlinkedsrvlogin @rmtsrvname='MyServer', @locallogin=null, @useself='True' 
exec('exec [MyServer].Database.dbo.myStoredProcedure') 
exec sp_dropserver 'MyServer', 'droplogins'