安全的ODBC网络连接到一个MS Access数据库

问题描述:

请原谅我的荒谬愚蠢,我不知道这是否可能。安全的ODBC网络连接到一个MS Access数据库

这是情况。

有一个MS Access“数据库”(是的,我知道,相信我,我知道),我需要从远程位置选择,更新和插入。问题是这需要安全地发生。

我可以完全控制托管MS Access文件的远程机器,所以我可以随心所欲地安装驱动程序和软件。服务器是Microsoft Windows Server 2003.

我打算采用的方法是在HTTPS服务器上托管PHP脚本(使用Apache或IIS,无关紧要),将XML发送到PHP脚本然后在MS Access数据库上做它的事情并发回XML结果。但是,由于时间限制,我试图找出是否可以通过ODBC以安全的方式直接连接,并让它与MS Access数据库对话。

我的理解是,ODBC并不完全以安全着名,但有支持加密连接的ODBC驱动程序,或者我可以以某种方式通过SSL隧道ODBC连接。但是,迄今为止我发现的所有信息都依赖于数据库是Microsoft SQL。

特别是我对如果有办法通过SSL-ify ODBC连接而不考虑底层数据库感兴趣。我可以自己弄清楚Unix-clone,但主机是Windows Server 2003,在这种情况下,我不知道如何继续。

这可能吗?任何信息高度赞赏!

+0

可能会感兴趣:http://www.litwindow。com/Knowhow/HowTo/howto_create_secure_access_dat.html – 2010-08-03 23:15:23

这里的问题是你不太了解ODBC连接如何与访问一起工作。我们不是在这里谈论TC/IP或基于连接的连接。

如果您查看任何JET访问文件的连接字符串,您会在ODBC连接中看到始终,我反复总是包含一个完全限定的Windows路径名。当我说完全限定的Windows路径名时,我正在谈论一个坐在硬盘上的文件。

在一天结束时,我们正在讨论如何打开一个简单的Jane窗口文件。一匹马是一匹马是一匹马,一个Windows文件是一个Windows文件,是一个Windows文件。

换句话说,我们正在讨论打开坐在硬盘上的文件。因此,整个过程与打开excel文件,文本文件,PowerPoint文件,或者在这种情况下访问文件恰好位于硬盘上没有任何不同。

有没有服务器或特定的数据库软件EVER必须安装在该文件设置的计算机上。客户端必须具有该软件并执行标准的Windows文件打开命令才能将数据从磁盘驱动器中取出。记住,当你在服务器上放置一个word文件并打开它时,你永远不需要在服务器上安装word,是打开windows标准文件的客户端,当打开访问文件时,JET完全相同。

这意味着如果你打算通过互联网连接打开这个文件,那么你必须通过互联网扩展windows网络。 HTTP甚至FTP都不是远程接近Windows文件联网协议。

但是,您可以通过Internet扩展Windows联网系统,这通常是通过称为VPN(虚拟专用网络)完成的。这意味着你必须建立一个VPN。这样可以让你通过网络邻居看到另一台计算机,并浏览到服务器上该文件夹上的文件,然后打开它。再次打开一个标准的Windows文件,服务器上没有运行某种类型的服务,您可以使用它连接到SQL服务器。

你可以阅读我的下面的文章,我解释了为什么在互联网上与Windows网络和JET(访问)文件根本不会在一个可靠的方式工作运行的VPN:

http://www.members.shaw.ca/AlbertKallal//Wan/Wans.html

所以,请记住,如果您查看任何JET ODBC连接字符串,您会注意到它从来不是基于IP的,但必须是完全符合条件的标准Windows文件名。我不能再重复一遍,我们讨论的是我们要打开的标准Windows文件名和位置。

请记住,这与打开word或excel或PowerPoint没有任何区别。 ODBC驱动程序混淆了这个问题,因为驱动程序只需要在客户端进行安装和设置,除了打开标准的简单窗口文件所需的功能之外,服务器端没有任何连接。

你对VPN的要求是什么,但不切合实际。你可以阅读上面的文章,并详细解释了为什么这不能可靠地工作和功能。

随着SQL服务器的多个免费版本的出现,以及其他许多选择,上述限制对您而言可能不会成为问题。这些其他服务器数据库系统不是基于文件的,并且您的连接字符串永远不会解析为某个文件名。因此,这些数据库服务器也不需要Windows网络协议来打开该文件,因此您甚至可以连接到运行Linux等服务器,甚至没有安装Windows网络。对于喷射连接,您必须使用Windows网络直接打开文件。

+0

简而言之,无法使用Jet/ACE远程安全地使用ODBC,并且必须有一个中间层(例如PHP)来保护数据。 – 2010-08-06 18:02:40

+0

好的,我相信你,但我想明白这一点,我不太确定我是否明白这一点。首先,我完全理解,ODBC只是将Access数据库作为文件打开,而不是通过TCP/IP打开。我不关心从ODBC到Access的连接。他们在同一个主机上。 我* *关心的是从我的程序到ODBC的连接。 我的印象是,ODBC可以远程连接,并且底层数据源无关紧要。当我连接到ODBC时,我不必指定文件名,我只是指定ODBC数据源名称。 – Teekin 2010-08-06 20:42:35

+0

我想什么阻止我清楚地理解这一点,是否如果客户端(我会说“连接到ODBC”这可能是错误的术语)需要访问Access文件本身...为什么会有人想要使用ODBC用于连接到MS Access文件?为什么首先有MS Access的ODBC驱动程序?感谢Albert的回应! – Teekin 2010-08-06 20:51:11

通常会在客户端和数据库之间放置一个中介。中介处理认证,授权,安全数据传输等。假定数据库位于防火墙内部,处于安全区域。所有您想要添加的事情都是为防火墙外的客户端安全保护,由中间人来处理。

作为一名Java人员,我会自动将Web客户端与一个或多个servlet进行对话。让servlet处理认证和授权。 HTTP意味着不需要防火墙。你也可以使用HTTPS。

我认为这会更容易实施。此外,即使SSL连接的ODBC连接仍会将数据库暴露给更广泛的Internet。我不希望我的数据在这样的存储库中。你会?

+0

嗯,是的,这是PHP方法的最初想法,有一个中介。这就是我们仍然可以做的,但是如果我们只需要SSL连接,那就足够了。我们将有一个只允许特定IP连接的防火墙,通过SSL,远程服务器的身份将得到保护并加密,我们认为这对我们来说已经足够了。但是,如果事实证明这是不可能或无法实现的,那么中间步骤就是我们将要做的事情。感谢您的意见。 – Teekin 2010-08-03 23:16:21

+0

+1!如果没有中间层,客户端必须有文件系统访问(赦免双关语)Access文件。中间层防止直接用户篡改文件。 – kbrimington 2010-08-03 23:18:18

为什么您的MS-Access(真正的MS-Jet)数据库只有一个文件?
我无法想象。如果它不是一个ODBC数据库,那么我可以描绘它。 大多数MS-Jet ODBC数据库都有100个* .MDB文件,其中每个MDB文件都是作为单个表,一组表或分表在逻辑上和物理上分散的(不是分割的)没有链接)跨越数十或数百个MDB文件。没有任何MDB文件本身被视为数据库。 这就是我看到的使用MS-Access驱动程序和MS-Jet引擎构建的ODBC数据库的方法。 大多数ODBC MS-Jet/MS-Access驱动程序数据库大约有50亿行和1太字节大小。

+0

这是很多年前,所以我的记忆是模糊的。如果我没有记错,客户端在MS Access文件中使用各种形式和东西。他希望将这些信息在他本地的“数据库”(文件)中复制到一个网站,或者发送到某个地方或什么东西。我不记得具体细节,但这是我正在从事的其他人的一个项目,没有控制技术设计。我永远不会用这种方式设计这个过程,也不会首先选择这种技术。但是你知道,客户统治所有,他们说。我不会捍卫这个设计。 – Teekin 2017-06-15 14:34:21

+0

MS-Access完全能够在一个mdb中拥有所有内容,如果将其分割为更多的内容,而不是因为您选择这样做(如果需要链接不同mdb中的多个表,则不是最佳选择)。每个mdb只是一个数据库,就像一个真正的MS-SQL服务器一样,它可以有多个数据库(并且每个数据库下面有一个文件)。所以一个MDB文件不仅被认为是一个数据库,它实际上是一个数据库。 – SuperDre 2017-09-04 15:22:33