You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何从同AWS账户的无服务器C# Web API连接EC2上的MS Access数据库

问题

同一AWS账户下的无服务器C# Web API,能否通过SSH或其他方式连接Windows 2022 EC2实例上的MS Access数据库?目前已在EC2上安装MS Access驱动及OpenSSH客户端与服务端,本地测试时可通过OpenSSH和SSH.Net库访问EC2实例并查看数据库文件,但不知道如何配置数据库连接字符串。具体疑问包括:

  • 通过SSH连接服务器后,能否直接连接数据库?
  • 如果不行,还有哪些方式可以连接远程服务器上的MS Access数据库?
  • 若通过网络共享EC2上的数据库文件夹,部署在AWS的Web API能否以此方式连接?

附上无法正常工作的数据库连接代码:

string host = "EC2IPAddress";
string sharedEC2FolderAndFile = @"//EC2AMAZ-#######/Users/DBAccessUser/DbFiles/MyAccessDb.mdb";
string username = "EC2UserName";
string password = "EC2Password";
//string conn = "Driver={Microsoft Access Driver (*.mdb, *.accdb)};Dbq=" + host;
string conn = "Driver={Microsoft Access Driver (*.mdb, *.accdb)};Dbq=" + sharedEC2FolderAndFile;

using (var connection = new OdbcConnection(conn))
{
    try
    {
        connection.Open();
    }
    catch (Exception ex)
    {
        throw;
    }
    finally
    {
        connection.Close();
    }
}

可正常读取文件的SSH代码:

var client = new SftpClient(sftpConfiguration.Host, sftpConfiguration.Port, sftpConfiguration.Username, sftpConfiguration.Password);
using (client)
{
    try
    {
        client.Connect();
        string workingDirectory = client.WorkingDirectory + "/TestDirectory";
        var files = client.ListDirectory(workingDirectory);

        foreach (var file in files)
        {
            // Do something here.
            // The MS Access database shows as it should
        }
        return files;
    }
    catch (Exception exception)
    {
        client.Disconnect();
        logger.LogError(exception, $"Failed in listing files under [{sftpConfiguration.RemotePath}]");
        return null;
    }
    finally
    {
        client.Disconnect();
    }
}            
解决方案

一、SSH无法直接连接MS Access数据库

SSH/SFTP仅用于文件传输或远程命令执行,无法直接通过SSH隧道让ODBC驱动连接远程Access数据库文件——ODBC驱动需要直接访问本地或网络共享的文件路径,SSH连接本身不会将远程文件映射到本地文件系统,所以当前代码无法通过SSH直接打开数据库。

二、网络共享方式的配置要点

若想用网络共享方式连接,需确保以下几点:

  1. 网络与安全组配置:
    • 确保Web API所在的无服务器环境(如Lambda)能访问EC2的私有IP(同一VPC内)或公网IP(需开放SMB协议的445端口)。
    • 调整EC2安全组,允许Web API所在的安全组/IP访问445端口。
  2. EC2共享权限设置:
    • 将DbFiles文件夹设置为共享,同时给EC2UserName分配足够的读写权限(包含共享权限和NTFS权限)。
    • 连接字符串需加入身份验证信息,因为无服务器环境不会默认携带EC2用户凭据,修改示例:
      string conn = @"Driver={Microsoft Access Driver (*.mdb, *.accdb)};Dbq=\\EC2AMAZ-#######\Users\DBAccessUser\DbFiles\MyAccessDb.mdb;Uid=EC2UserName;Pwd=EC2Password;";
      
    • 注意路径格式:使用双反斜杠\\,或用@符号保留单斜杠写法。
  3. 无服务器环境限制:
    • AWS Lambda等无服务器环境默认可能不支持SMB协议,需配置VPC访问权限,确保Lambda能连接到EC2所在的VPC和子网,且路由表允许访问EC2实例。

三、替代方案:SFTP下载文件到临时目录访问

既然已能通过SSH.Net访问EC2上的数据库文件,可先将Access文件下载到Web API的临时目录,本地连接临时文件完成操作后,再上传回EC2(若有写入操作):

using (var sftpClient = new SftpClient(sftpConfiguration.Host, sftpConfiguration.Port, sftpConfiguration.Username, sftpConfiguration.Password))
{
    sftpClient.Connect();
    // 下载数据库文件到本地临时路径
    string tempDbPath = Path.Combine(Path.GetTempPath(), "MyAccessDb.mdb");
    using (var fileStream = File.OpenWrite(tempDbPath))
    {
        sftpClient.DownloadFile("/Users/DBAccessUser/DbFiles/MyAccessDb.mdb", fileStream);
    }
    sftpClient.Disconnect();

    // 连接本地临时文件
    string conn = $"Driver={{Microsoft Access Driver (*.mdb, *.accdb)}};Dbq={tempDbPath};";
    using (var connection = new OdbcConnection(conn))
    {
        try
        {
            connection.Open();
            // 执行数据库操作
        }
        catch (Exception ex)
        {
            // 处理异常
        }
        finally
        {
            connection.Close();
        }
    }

    // 若有写入操作,上传回EC2
    sftpClient.Connect();
    using (var fileStream = File.OpenRead(tempDbPath))
    {
        sftpClient.UploadFile(fileStream, "/Users/DBAccessUser/DbFiles/MyAccessDb.mdb");
    }
    sftpClient.Disconnect();

    // 删除临时文件
    File.Delete(tempDbPath);
}

注意:该方式适合读写频率低的场景,多并发操作可能引发文件冲突,需额外加锁或队列处理。

四、长期优化方案:迁移到AWS托管数据库

MS Access是桌面数据库,不适合作为远程服务的数据源。长期来看建议将数据迁移到AWS RDS(如SQL Server、MySQL)或DynamoDB,这类托管数据库能更好地支持无服务器环境访问,同时提升可靠性与性能。

内容的提问来源于stack exchange,提问作者Ben

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.11 08:25:21