我需要从远程数据库中检索一些数据,它是一种“更新管理器”,因此我的应用程序将连接到该远程服务器以检查是否有新更新。为了执行远程查询,创建和删除链接服务器时会出现哪些问题?
我使用网络服务器来做“握手和验证”工作,但后来我直接连接到远程sql服务器来检索数据。
网络服务器将返回登录信息(serverIP +端口,数据库,用户和密码),当然用户只是具有datareader(在表的子集上)权限的用户。
我需要做的是执行一些远程查询来检索所需的数据。这是我写的(和它的作品):
CREATE PROCEDURE QueryRemoteServer
(@SERVER nvarchar(50),@FieldNames nvarchar(500), @DB nvarchar(50),
@Tablename nvarchar(100), @Login Nvarchar(50),@pwd Nvarchar(50))
AS
BEGIN
/* Creation of Linked Server including the If exists check */
if exists (Select name From sys.servers Where [Name][email protected])
exec sp_dropserver @SERVER, 'droplogins'
exec sp_addlinkedserver @SERVER
/* Creation of the login according to values returned from webserver */
exec sp_addlinkedsrvlogin @SERVER, 'FALSE', NULL, @Login, @pwd
/* exec the query (for simplicity I omitted the JOIN job) */
exec ('SELECT ' + @FieldNames +
' FROM ['+ @Server + '].' + @Db + '.dbo.' + @Tablename)
/* drop the created linked server */
exec sp_dropserver @SERVER, 'droplogins'
END
客户将只需像这样运行的东西:
exec QueryRemoteServer '127.0.0.1 , 4455','Field1, Field2',
'MyRemoteDB','MyRemoteTable','GuestUser','GuestPassword'
你能告诉我你的opionions对这种做法,告诉我这是你看到的主要缺点/好处?
我会看到的一个问题是,在他或她的正确思想中没有dba会给用户创建和删除链接服务器的权利! – HLGEM 2010-09-07 19:33:07
在我的情况下,这是不是一个问题,因为我总是dba。在一般情况下,你不仅仅是正确的。 – LaBracca 2010-09-08 12:16:42