c#像本地主机一样访问postgreSql
默认情况下,PostgreSQL不允许远程连接。我知道我可以更改配置以允许远程连接,但软件供应商不支持对配置进行任何更改。由于我们为该供应商开发附加产品,我们不能简单地忽视他们的意愿 我想从远程计算机访问Postgres。但建立连接必须来自Postgres认为是本地主机的东西。我一点也不熟悉我所认为的TCP端口转发器,或者它可能被称为代理?还是接力?在任何情况下,我都需要远程连接到Postgres,就像请求来自本地主机一样 我已经有一个Windows服务运行在与Postgres相同的服务器上,所以我想添加这个端口转发器,代理,依靠这个服务。我们需要用c#做这件事c#像本地主机一样访问postgreSql,c#,postgresql,C#,Postgresql,默认情况下,PostgreSQL不允许远程连接。我知道我可以更改配置以允许远程连接,但软件供应商不支持对配置进行任何更改。由于我们为该供应商开发附加产品,我们不能简单地忽视他们的意愿 我想从远程计算机访问Postgres。但建立连接必须来自Postgres认为是本地主机的东西。我一点也不熟悉我所认为的TCP端口转发器,或者它可能被称为代理?还是接力?在任何情况下,我都需要远程连接到Postgres,就像请求来自本地主机一样 我已经有一个Windows服务运行在与Postgres相同的服务器上,所
或者,如果已经有一个工具可用于此目的,我可以作为服务运行,也可以。您需要创建一个用户并允许远程连接到此用户或现有用户。 你应该能够远程连接
祝你好运 默认情况下Postgres不允许远程连接是正确的。但是,在pg_hba.conf文件中可以很容易地对其进行更改 为此,您只需要添加一行带有远程主机地址的代码。 例如:
host postgres all 192.168.12.10/32 md5
栏目:
有关更多选项,请参阅postgresql文档:您说您有一个windows服务在同一台计算机上运行,我认为您可以控制该服务的代码。理论上,您可以在服务中添加一些代码,并在该计算机上安装更新的二进制文件。此代码可以在来自internet的传入tcp连接和本地postgres之间进行代理。从postgres的角度来看,它看起来像一个本地主机连接 但是,
onStart
在ip0.0.0
上注册一个TcpListener
,以及您已知的某个端口while(true)
循环中的单独线程上尝试GetStream()
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