如果服务器在使用 dblink 时未请求密码,则非超级用户无法连接

2024-05-05

我想在我的应用程序中进行一些跨数据库引用。简而言之,我有两个数据库,分别称为meta 和op。我想从元到 op 数据库中的表进行一些选择查询,如下所示,但出现以下错误。我尝试了有密码和无密码。顺便一提caixa用户是非超级用户,我的目标服务器(op数据库服务器具有 MD5 身份验证模式。)

meta=> select * from dblink('dbname=op password=caixa','SELECT op_col from op_table') AS t(op_col varchar);

错误:需要密码

详细信息:如果服务器不请求密码,非超级用户无法连接。

提示:必须更改目标服务器的身份验证方法。

上述错误消息中的 HINT 表明了什么?我需要更改服务器的身份验证模式吗?在不更改服务器的身份验证模式(MD5)的情况下,我不能运行上述查询吗?


From 文档 http://www.postgresql.org/docs/current/static/contrib-dblink-connect.html:

只有超级用户可以使用 dblink_connect 来创建 无需密码验证的连接。如果非超级用户需要这个 能力、用途dblink_connect_u反而。

and

dblink_connect_u() 与 dblink_connect() 相同,只是它 将允许非超级用户使用任何身份验证方法进行连接。

这意味着你的dblink http://www.postgresql.org/docs/current/static/contrib-dblink.html呼叫正在使用dblink_connect http://www.postgresql.org/docs/current/static/contrib-dblink-connect.html隐含地。使用dblink_connect_u http://www.postgresql.org/docs/current/static/contrib-dblink-connect-u.html相反或将您的身份验证方法更改为例如md5。

请注意,您还需要授予执行权限caixa角色,例如:

GRANT EXECUTE ON FUNCTION dblink_connect_u(text) TO caixa;
GRANT EXECUTE ON FUNCTION dblink_connect_u(text, text) TO caixa;

工作示例(之后GRANT):

meta=> SELECT dblink_connect_u('conn1', 'dbname=op');
meta=> SELECT * FROM dblink('conn1','SELECT op_col from op_table')
            AS t(op_col varchar);
 op_col 
--------
 aaa
 bbb
 ccc
(3 rows)
meta=> SELECT dblink_disconnect('conn1');

EDIT:

抱歉,答案略有误导。当然你don't need dblink_connect_u用于 md5 验证 联系。我认为有一种可能性。 PostgreSQL 有两个不同的连接类型:host and local.

Running:

psql -h localhost ..

包含主机连接,但是

dblink_connect('mycon','dbname=vchitta_op user=caixa password=caixa');

uses local类型,因此如果您有用于本地连接的非密码方法(例如 ident 方法或 trust),那么它会返回

ERROR:  password is required
DETAIL:  Non-superuser cannot connect if the server does not request a password.
HINT:  Target server's authentication method must be changed.

Check

dblink_connect('mycon','hostaddr=127.0.0.1 dbname=vchitta_op user=caixa password=caixa')

for host联系。为了清楚起见,如果可能,请发布您的pg_hba.conf.

我还检查了关于CONNECT特权于vchitta_opDB,但错误消息不同:

REVOKE CONNECT ON DATABASE vchitta_op FROM PUBLIC;
REVOKE CONNECT ON DATABASE vchitta_op FROM caixa;

SELECT dblink_connect('mycon','dbname=vchitta_op user=caixa password=caixa');
ERROR:  could not establish connection
DETAIL:  FATAL:  permission denied for database "vchitta_op"
DETAIL:  User does not have CONNECT privilege.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如果服务器在使用 dblink 时未请求密码,则非超级用户无法连接 的相关文章

随机推荐

  • 如何使用gradle和jetty在调试模式下启用热插拔?

    我正在使用 jettyRun 来运行我的简单 spring 应用程序 我想使用 Intellij 调试器启用热插拔 但看起来 jetty 没有捕获更改 On http docs codehaus org display GRADLE Gra
  • 与主机中的容器共享目录或卷

    我有一个目录 可能是后面的卷 我想与所有交互式容器共享 我知道 本机 Docker 卷存储在 var lib docker volumes and docker run v似乎是最简单的方法 但我认为Data Volume Containe
  • .NET csc 和 Mono mcs 的兼容性

    我知道 NET 和 Mono 是二进制兼容的 但给定一组源代码 csc 和 mcs 会生成完全相同的 100 相同的二进制 CLI 可执行文件吗 人们能够判断可执行文件是用 csc 还是 mcs 编译的吗 很多东西在规范中没有完全定义 或者
  • Python for 循环中的多个循环控制变量

    我遇到了一种情况 我需要实现具有多个循环控制变量的 for 循环 基本上这就是我想做的 Java for int i 0 j n i
  • iOS WKWebView不支持本地存储

    我正在构建一个简单的 WKWebView 应用程序 该应用程序加载用 Construct HTML5 编写的游戏 游戏存储在服务器上 当我在常规浏览器 移动和桌面 中玩游戏时 游戏本身会存储在本地 并且高分也会存储在本地 重新启动游戏后不需
  • 如何在 C++ 中对字符串使用 qsort

    我想使用 qsort 函数使用 C 对字符串中的字符进行排序 include
  • 在 tweetinvi 中查找推文的 tweetID

    我对 C 编程相对较新 为学校项目自学 并决定尝试使用 TweetInvi 来实现 Twitter 功能 到目前为止 一切进展顺利 身份验证和发布已启动并运行 但我正在努力找出如何使用 DestroyTweet 方法 它和许多其他方法都需要
  • 流媒体视频文件?

    我需要流式传输 flv 文件 流媒体应该看起来像直播 我应该有一种方法可以更改目标文件 抱歉我的英语不好 如果 流式传输 的意思是 显示 Flash 视频剪辑 则 flv streaming 并不是真正的流式传输 而是正常的文件传输 即使文
  • 把自己限制在HTTP1.0有什么用吗?

    我负责构建一些工具来帮助最终用户测试为什么他们的浏览器可能无法与网站配合使用 我被告知它可能不起作用的原因之一是 需要 HTTP1 1 这一行 我浏览了大多数浏览器选项 只浏览了 IE 版本 6 及更高版本 even 9 允许您禁用 HTT
  • 将 pdfmake.js 文件导入到我的 ts 文件中

    我正在开发 vsts 网络扩展 我想要一个使用PDFmake js文件来生成一个pdf PDFmake js文件是imported to node nodules文件夹通过安装为npm install pdfmake 我想要import t
  • CocoaPods 库中的强dispatch_queue_t

    在可能使用 iOS 5 x OS X 10 7 部署目标或较新的部署目标构建的库中 我在正确定义dispatch queue t财产 大多数情况下我可以按照建议解决它here https stackoverflow com a 248460
  • 使用 C# 作为我的 DSL——这可能吗?如果可以,如何实现?

    是否可以使用 C 作为 DSL其中 C 源代码由最终用户在 TextBox 中编辑 在应用程序运行时编译 然后由已运行的应用程序调用 我问这个问题是因为在接下来的几个月里 我将需要实现一个简单的数学运算 DSL 类似于 Rachel Lim
  • 在 macOS 上运行 Comma IDE 时找不到匹配的虚拟机

    我安装了 Comma IDEthis https commaide com download链接 但当我尝试通过双击应用程序文件夹中 Finder 中的应用程序图标来运行它时 出现错误 未找到匹配的 VM 需要 Java 1 8 或更高版本
  • jQuery 无法从本地主机检索数据

    我有一个非常简单的 jQuery 来检索我最新的推文 getJSON http twitter com statuses user timeline username json count 1 function data tweet tex
  • 更改在 docker 中运行的 selenium 节点的日志级别

    我们的团队正在使用 docker 部署 selenium 网格 默认日志级别似乎设置为 INFO 我想将其设置为更高的值 严重 或完全关闭它们 我已经进行了三次尝试 但到目前为止 没有效果 方法一 从 selenium 客户端 我尝试在 D
  • Foldmethod=同时标记和语法?

    同一文件是否可以根据标记和语法使用折叠 Since foldmethod一次只能设置为一个 我认为您真正可以做到这一点的唯一方法是使用 set foldmethod expr并与foldexpr 即使如此 我也不确定它是否能够完全按照您的要
  • 如何将 SQL 参数中的字符串数组传递给 SQL 中的 IN 子句

    我正在以复杂的方式做一个逻辑 我只需要在存储过程中执行此查询 select Sizes SUM Quantity from tbl SizeBreakup where Brand brand and Combo in 1 2 我必须在 C
  • for 循环语法,其中包含 if 语句

    使用 if 语句编写 for 循环的普遍共识是什么 for int i 0 i lt hi i if some invalid condition continue if another invalid condition continue
  • 我无法在 PyCharm 下运行 Django Python pytest

    pytest portal test session starts platform darwin Python 3 6 0 pytest 3 0 6 py 1 4 32 pluggy 0 4 0 Django settings confi
  • 如果服务器在使用 dblink 时未请求密码,则非超级用户无法连接

    我想在我的应用程序中进行一些跨数据库引用 简而言之 我有两个数据库 分别称为meta 和op 我想从元到 op 数据库中的表进行一些选择查询 如下所示 但出现以下错误 我尝试了有密码和无密码 顺便一提caixa用户是非超级用户 我的目标服务