【发布时间】:2017-06-14 16:40:52
【问题描述】:
我有一个 C# 可执行文件,需要远程连接到 Linux 服务器才能连接到 Amazon RDS 数据库。
可执行文件位于 Windows 服务器上。由于权限,只有 Linux 服务器能够连接到 RDS 数据库。由于 C# 可执行文件需要来自数据库的信息,我发现自己需要先连接到 Linux 服务器,然后再从那里连接到数据库。
// include files
using MySql.Data;
using MySql.Data.MySqlClient;
using Renci.SshNet;
//...
using (var client = new SshClient("server.amazonaws.com", "serverUser", privateKeyFile))
{
client.Connect();
MySqlConnection databaseConnection = null;
string connString = "Server=dbServer.rds.amazonaws.com; database=database " +
"UID=databaseUser password=databasePassword";
databaseConnection = new MySqlConnection(connString);
databaseConnection.Open();
string queryString = "SELECT * FROM tbl_table;"; // errors here
// ..... }
在分配显示“MySql.Data.MySqlClient.MySqlException: 'Unable to connect any of the specified MySQL hosts.'”的查询字符串时出现错误。
我正在使用SSH.Net 来建立与 Linux 服务器的连接。我正在使用MySQL Connector 连接并从数据库中检索信息。
如果我的代码有问题,我将不胜感激,但我很确定我错过了正确连接到数据库的一些必要步骤。我注意到其他类似问题的问题,但他们要么没有使用 RDS 数据库,要么不必通过 C# SSH。
编辑:自发布此消息以来,我正在执行此代码的服务器已获得对 RDS 数据库的访问权限。我目前没有时间尝试发布的解决方案。我可以说的是,在获得访问权限后,只有使用 MySql 连接器才能顺利进行。
【问题讨论】:
-
你到底想做什么。打开与机器的 ssh 会话然后尝试从 Windows 机器打开 sql 连接没有做任何事情。您可以使用 ssh 会话来执行 sql 命令行操作。或者你需要在 linux 机器上有一个服务,你可以与之交谈来转发请求。
-
对不起,我知道这是一团糟。 C# 可执行文件需要来自数据库的信息,因为它使用 SqlDataReader 对象来获取某些方法的行信息。我不反对在 Linux 机器上提供服务,但是我不认为自己能够使用这些对象。我继承了这个项目并且时间有限,所以我不想尝试将所有分配从使用该对象而不是使用其他对象更改。使用 SSH 会话执行 SQL 命令行操作仍然允许我这样做吗?我不太清楚你的意思。
-
这是糟糕的设计。您应该在 Linux 机器上创建一个公开 API 的 Web 应用程序,然后在 Windows 机器上使用该 API 来访问数据库。您正在为各种安全问题敞开心扉。
-
我同意,我实际上提出了类似的建议,但这并不完全取决于我。为了这个问题,我非常感谢在这些限制范围内的帮助。
-
你想做的事做不到。您的代码的问题是 AWS 服务只允许从 Linux 机器连接到数据库。您正在尝试从 Windows 计算机启动连接。这样做的唯一方法是在 Linux 机器和 Windows 机器之间创建某种 API,否则您需要登录到您的 AWS 账户并授予对 Windows 机器的数据库访问权限。
标签: c# amazon-web-services amazon-aurora