c#像本地主机一样访问postgreSql

c#像本地主机一样访问postgreSql,c#,postgresql,C#,Postgresql,默认情况下,PostgreSQL不允许远程连接。我知道我可以更改配置以允许远程连接,但软件供应商不支持对配置进行任何更改。由于我们为该供应商开发附加产品,我们不能简单地忽视他们的意愿 我想从远程计算机访问Postgres。但建立连接必须来自Postgres认为是本地主机的东西。我一点也不熟悉我所认为的TCP端口转发器,或者它可能被称为代理?还是接力?在任何情况下,我都需要远程连接到Postgres,就像请求来自本地主机一样 我已经有一个Windows服务运行在与Postgres相同的服务器上,所

默认情况下,PostgreSQL不允许远程连接。我知道我可以更改配置以允许远程连接,但软件供应商不支持对配置进行任何更改。由于我们为该供应商开发附加产品,我们不能简单地忽视他们的意愿

我想从远程计算机访问Postgres。但建立连接必须来自Postgres认为是本地主机的东西。我一点也不熟悉我所认为的TCP端口转发器,或者它可能被称为代理?还是接力?在任何情况下,我都需要远程连接到Postgres,就像请求来自本地主机一样

我已经有一个Windows服务运行在与Postgres相同的服务器上,所以我想添加这个端口转发器,代理,依靠这个服务。我们需要用c#做这件事


或者,如果已经有一个工具可用于此目的,我可以作为服务运行,也可以。

您需要创建一个用户并允许远程连接到此用户或现有用户。 你应该能够远程连接


祝你好运

默认情况下Postgres不允许远程连接是正确的。但是,在pg_hba.conf文件中可以很容易地对其进行更改

为此,您只需要添加一行带有远程主机地址的代码。 例如:

host    postgres        all             192.168.12.10/32        md5
栏目:

  • 类型:在您的情况下为主机
  • 用户:我在这个例子中使用了postgres,但我推荐您 使用专用用户作为postgres是超级用户
  • 数据库:您希望通过此用户和主机访问哪个数据库,我将其留给所有人,但还是建议更具体一些
  • 地址:远程主机的地址
  • 身份验证方法。(md5表示md5加密密码)。如果根本不需要任何身份验证,也可以设置信任

  • 有关更多选项,请参阅postgresql文档:

    您说您有一个windows服务在同一台计算机上运行,我认为您可以控制该服务的代码。理论上,您可以在服务中添加一些代码,并在该计算机上安装更新的二进制文件。此代码可以在来自internet的传入tcp连接和本地postgres之间进行代理。从postgres的角度来看,它看起来像一个本地主机连接

    但是,

  • 有一些非常合理的理由可以解释为什么只允许本地呼叫,而网络上的呼叫被阻止
  • 您的服务可能正在运行,也可能没有足够的权限在公共开放端口上侦听
  • 如果机器上正在运行任何防病毒软件,它肯定会将你的应用程序标记为可疑,坦白说,确实如此
  • 实现这一点的最佳方法是要求供应商很好地授予访问权限,或者在限制范围内工作
  • 这闻起来有一些法律或道德上的不当行为,但我可能错了
  • 话虽如此,以下是基本步骤:

  • 服务
    onStart
    在ip
    0.0.0
    上注册一个
    TcpListener
    ,以及您已知的某个端口
  • while(true)
    循环中的单独线程上尝试
    GetStream()
  • 在ip
    localhost
    和postgres端口上启动
    TcpClient
  • while(true)
    循环中的单独线程上尝试
    GetStream()
  • while(true)
    循环中,从侦听器的流中读取
    ,然后将
    写入客户机的流。您可能需要使用
    缓冲区
    或数组
  • 循环直到读到
    -1
  • 这个算法原则上应该是可行的


    我希望你不是在攻击别人。请不要。

    如果要在承载postgresql的服务器上安装端口转发软件,将远程请求转发到本地安装,这与打开postgresql进行远程访问是一样的。重要的是询问您的客户/供应商为什么不允许远程连接。我的假设是,他们也不允许你的端口转发软件。而且要清楚的是,你不能把这个端口转发部分添加到你自己的产品中,有些东西必须在那个服务器上运行,否则PostgreSQL仍然不会认为这是一个本地连接。反向代理可能会为你作弊,我想你会更幸运地询问超级用户或dba而不是stackoverflow。正如我在原始帖子中所说的,供应商不会允许我们修改Postgres的任何配置文件。我已经知道怎么做你的建议了。你是对的,我的坏朋友。如果可以创建到运行postgres数据库的机器的SSH连接,则可以使用第三方库访问该数据库。我曾经使用JSch(由JCraft)在我的应用程序和远程数据库之间创建了一个SSH隧道。所以对于博士后来说,我好像在本地机器上,而我不是。但使用此机制的端口转发速度较慢。最后,我向服务器发送sql命令并解析返回的结果。(有点像使用psql-c“sql语句”直接访问postgres时所做的操作)。你没有领会我的意思。我无法使用postgres安全性、配置文件等更改任何内容。我有一个用户名和密码来访问数据,我只需要一种从远程计算机访问数据的方法,而无需对供应商配置进行任何更改。你不能允许自己以有限的访问级别远程连接。让我来从另一个角度来看这个问题,因为我还没有收到一个可用的响应。你怎么称呼这种技术呢?在这种技术中,你中继来自一个端口的外部请求,并将请求发送到另一个端口的本地主机,然后再接收回数据?这叫什么?网关、中继、代理、隧道?也许我可以找到一个现有的解决方案,如果我使用正确的术语进行搜索。你会说是数据库群集!?我理解我的请求听起来有多可疑,b