我想实现的目标: 使用数据库 a 的只读用户访问 postgres 数据库。 这个问题就解决了。用户帐户正在运行 - 我可以读取数据库 a 中的所有表和视图。 除了;有一些视图通过 dblink 从其他数据库(在同一服务器上)提取一些信息。 使用默认用户时这没有问题 - 使用只读用户时这是一个问题...... 当使用只读用户登录另一个数据库时 - 我拥有完全访问权限,可以读取和查看任何表和视图。所以我认为只读帐户本身没有问题。
做了一些阅读/研究,我了解到在这种情况下 - 需要 dblink 才能使用完整的凭据。
所以我尝试的是这个...
SELECT company_projects.databasename,
company_projects.project_id,
company_projects.code,
company_projects.description,
company_projects.customer
FROM dblink('hostaddr=192.123.45.67 port=5432 user=readonly_user password=ThePassword dbname=company_global', 'select databasename, project_id, code, description, customer from company_projects'::text) company_projects(databasename text, project_id integer, code text, description text, customer text);
结果将是:
'ViewCommand' object has no attribute 'auto_commit'ERROR: Non-superusers must provide a password in the connection string.password is required
FEHLER: password is required
SQL state: 2F003
Detail: Non-superusers must provide a password in the connection string.
版本信息: “x86_64-pc-linux-gnu 上的 PostgreSQL 11.12 (Debian 11.12-0+deb10u1),由 gcc (Debian 8.3.0-6) 8.3.0 编译,64 位”
欢迎任何提示。 如果这可行的话,我会考虑将凭据存储在 .pgpass 文件中,这听起来比将这些凭据存储在 sql 字符串中更好......
KR,马丁
问题是运行在 192.123.45.67、端口 5432 的服务器允许
readonly_user
在没有密码的情况下从您的计算机进行连接。是否提供密码并不重要,重要的是远程服务器不需要密码。
您必须重新配置远程服务器,以便该连接需要密码。