使用OPENDATASOURCE执行查询时出错

时间:2012-03-27 16:52:03

标签: sql-server-2008

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

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

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

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

2 个答案:

答案 0 :(得分: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

答案 1 :(得分: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'