Sql-Server

SQL Server 2008 連結伺服器到網路上受保護目錄中的 Access 2007 DB

  • June 20, 2012

我們有一個 SQL Server 2008 數據庫,我們正試圖將它與一個 Access 2007 數據庫連結(維護人員在大廳里工作並拒絕遷移到 SQL Server)。我們有數據庫的密碼(假設數據庫密碼 = dbpassword,如果只是這個級別的保護,我想我們已經連結到 Access 數據庫而問題最小。

但是,Access 數據庫位於網路驅動器上,並且位於該網路驅動器上受保護的目錄中。我們知道使用者名和密碼(假設使用者名 = cat,密碼 = pancakes)。

我正在研究這個 sp_addlinkedsrvlogin,我相信這是我們需要做的。不是嗎?

sp_addlinkedsrvlogin [ @rmtsrvname = ] 'rmtsrvname' 
    [ , [ @useself = ] 'TRUE' | 'FALSE' | NULL ] 
    [ , [ @locallogin = ] 'locallogin' ] 
    [ , [ @rmtuser = ] 'rmtuser' ] 
    [ , [ @rmtpassword = ] 'rmtpassword' ] 

問題是,我不知道在這些參數中輸入什麼。

我假設 rmtuser 將是“貓”,而 rmtpassword 將是“煎餅”……

這是 Access 數據庫的完整路徑:\volume9\v9\projects\cats\cooking\pancakedb\back-end

volume9 似乎與 K: 驅動器相對應…

那麼rmtsrvname = ‘\volume9\v9\projects\cats\cooking\pancakedb\back-end’?

另外, useself = ‘FALSE’ 對嗎?而且我不知道本地登錄。

我會以正確的方式解決這個問題嗎?這是我第一次設置 sp_linkedserver。任何幫助是極大的讚賞!

編輯:

忘記!我們的連結伺服器稱為PANCAKECONFIGDB。不知道有沒有用

編輯2:

這些是我本地電腦上 SQL Server 的設置。稍後我將提供有關伺服器的資訊以及完整的 sp_linkedserver 文本。這是我應該改變的地方嗎?

在此處輸入圖像描述

編輯 3:

這是伺服器的登錄身份:

在此處輸入圖像描述

還有連結伺服器的腳本…

****** Object:  LinkedServer [PANCAKECONFIGDB]    Script Date: 06/20/2012 14:14:28 ******/
EXEC master.dbo.sp_addlinkedserver @server = N'PANCAKECONFIGDB', @srvproduct=N'Access 2007', @provider=N'Microsoft.ACE.OLEDB.12.0', @datasrc=N'\\volume9\v9\projects\cats\cooking\PANCAKECONFIGDB\back-end\PANCAKECONFIGDB.accdb', @provstr=N';PWD= dbpassword'
/* For security reasons the linked server remote logins password is changed with ######## */
EXEC master.dbo.sp_addlinkedsrvlogin @rmtsrvname=N'PANCAKECONFIGDB',@useself=N'False',@locallogin=NULL,@rmtuser=NULL,@rmtpassword=NULL

GO

EXEC master.dbo.sp_serveroption @server=N'PANCAKECONFIGDB', @optname=N'collation compatible', @optvalue=N'false'
GO

EXEC master.dbo.sp_serveroption @server=N'PANCAKECONFIGDB', @optname=N'data access', @optvalue=N'true'
GO

EXEC master.dbo.sp_serveroption @server=N'PANCAKECONFIGDB', @optname=N'dist', @optvalue=N'false'
GO

EXEC master.dbo.sp_serveroption @server=N'PANCAKECONFIGDB', @optname=N'pub', @optvalue=N'false'
GO

EXEC master.dbo.sp_serveroption @server=N'PANCAKECONFIGDB', @optname=N'rpc', @optvalue=N'false'
GO

EXEC master.dbo.sp_serveroption @server=N'PANCAKECONFIGDB', @optname=N'rpc out', @optvalue=N'false'
GO

EXEC master.dbo.sp_serveroption @server=N'PANCAKECONFIGDB', @optname=N'sub', @optvalue=N'false'
GO

EXEC master.dbo.sp_serveroption @server=N'PANCAKECONFIGDB', @optname=N'connect timeout', @optvalue=N'0'
GO

EXEC master.dbo.sp_serveroption @server=N'PANCAKECONFIGDB', @optname=N'collation name', @optvalue=null
GO

EXEC master.dbo.sp_serveroption @server=N'PANCAKECONFIGDB', @optname=N'lazy schema validation', @optvalue=N'false'
GO

EXEC master.dbo.sp_serveroption @server=N'PANCAKECONFIGDB', @optname=N'query timeout', @optvalue=N'0'
GO

EXEC master.dbo.sp_serveroption @server=N'PANCAKECONFIGDB', @optname=N'use remote collation', @optvalue=N'true'
GO

EXEC master.dbo.sp_serveroption @server=N'PANCAKECONFIGDB', @optname=N'remote proc transaction promotion', @optvalue=N'true'
GO

我將在這裡總結我的所有評論作為答案。

您應該閱讀以下內容:

http://msdn.microsoft.com/en-us/library/ms143504%28v=sql.105%29.aspx#Use_startup_accounts

SQL Server 服務是 SQL Server 引擎,在為服務指定的帳戶下執行,使用文件共享的連結伺服器必然會使用這些權限,因為沒有設置讓伺服器服務在通過文件系統。

SQL Server 代理是一個執行計劃作業的單獨程序。如果您使用它並且它自己連接到網路共享(不僅僅是告訴 SQL Server 引擎對連結伺服器執行一些語句,該連結伺服器將在上述引擎權限下),它需要在適當的域帳戶下執行。在你的情況下,這似乎沒有執行,所以我不會費心去愚弄它。

執行 SQL Server Express 有一定的數據庫大小和功能限制,我不會考慮將它用於一般的伺服器級生產用途,除非有大量的輕量級伺服器 - 例如將小型內部應用程序部署到多個工作站點 - 在其中你不想為許可付費,並且要求適合產品。

內置網路帳戶是“NT AUTHORITY\NETWORK SERVICE”,您只需將其輸入並清除密碼即可恢復它。

如果您將 SQL Server 服務切換為作為域帳戶執行,則需要為其提供足夠的權限來訪問數據庫伺服器上的作業系統 - 即,如果該帳戶沒有訪問權限,則可以訪問數據庫文件所在的文件夾。

引用自:https://dba.stackexchange.com/questions/19571