SQL Server:是否可能在不设置联接服务器的情况下从另一个SQL服务器获取数据?

3
我需要执行以下查询(例如):
SELECT c1.CustomerName FROM Customer as c1
INNER JOIN [ExternalServer].[Database].[dbo].[Customer] as c2
ON c2.RefId = c1.RefId

由于某些安全原因,我的客户不允许我创建链接服务器。我执行此查询的用户可以访问两个表。是否有可能在不使用链接服务器的情况下使其工作?谢谢。


2
为什么他不允许你创建一个链接服务器?如果创建了链接服务器,然后你只使用它,他会同意吗? - Lasse V. Karlsen
你还没有回答我的问题。从技术上讲,你或者你的客户都没有被阻止创建链接服务器。我想知道的是,为什么不允许这样做?(从你的评论中,我认为我知道答案,但我希望你承认一下) - Lasse V. Karlsen
@JNK:这就是权限的作用! - Mitch Wheat
1
跟你的数据库管理员谈一下吧。对我来说,这个问题听起来像是这样的:服务器已经被锁定,并且施加了大量限制之一就是不允许设置联接服务器。这里的问题基本上是在问“除了联接服务器之外还有其他方法可以...”,这对我来说听起来基本上是“我知道我不应该这样做,但我如何规避我们的安全措施”。你的第一个任务是询问那些首先实施这些限制的人。如果他们说“不行”,那么其他方法也没有用。 - Lasse V. Karlsen
1
唯一的内置方法是通过链接服务器。使用较新版本的SQL Server,您可以添加基于CLR的存储过程,可以执行各种神奇的操作,但我怀疑如果安全性至关重要,则其中任何操作都不相关。 - Lasse V. Karlsen
显示剩余8条评论
2个回答

5
你可以使用OPENROWSET,这需要连接信息、用户名和密码...
虽然我理解客户认为始终连接到他们的数据是有风险的,但这就是你锁定账户的原因。 OPENROWSET 意味着在明文中包含连接信息。

3
这基本上只是一个临时链接服务器。 - Lasse V. Karlsen
@Lasse V. Karlsen:按照这种逻辑,任何连接字符串和用户名/密码都是一个链接服务器。我更喜欢使用链接服务器,但是OP明确指出客户端不允许它。 - OMG Ponies
非常感谢您的建议。我会尝试一下。虽然它需要额外的配置,这当然需要额外的权限,我不确定我的客户能否授予我这些权限。 - andr111

0
“Linked Server”是一个非常具体的东西——基本上是服务器之间的永久连接。我可以想到很多不想要这种连接的原因,同时也没有问题让人们编写查询来组合两个不同数据源的数据。
无论如何,根据您的需求——如果这只是用于临时查询,OPENROWSET在SQL-Server内部是很好的选择,或者如果您想在MS Access中执行此操作,只需链接这两个表,您的Access查询就不会关心其中一个来自另一个服务器。
或者,对于Web或Windows前端,您可以将每个表单独查询到数据对象中,然后在其上构建单独的查询。
Http端点...
Web服务...
有无数种方法。我不会像@Lasse所建议的那样,轻易地假设任何形式的将这些数据链接在一起都会使您成为某种流氓数据链接者。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接