PowerDNS pgSQL 配置不同的架构

PowerDNS pgSQL 配置不同的架构

我已经使用 PowerDNS 几年了,最后决定改用 pgSQL 而不是 mySQL。我一直在研究这个问题,但没有找到任何可靠的答案,所以我认为这可能是不可能的。

我很好奇,是否可以在名为 的架构(pdns而不是名为 的数据库)中安装和运行 PowerDNS pdns?我找不到任何选项来告诉 PowerDNS 查看 X 数据库和 Y 架构。

例如,我有一个名为 的数据库example,在这个数据库中,我有两个模式,分别称为mydbpdns。我想在pdns模式中安装 PowerDNS 表结构,然后从该模式运行 PowerDNS 服务。当表位于模式中时,它似乎工作正常public

答案1

最容易实现这一点的方法是改变角色的搜索路径。

在目标数据库中创建新的模式 pdns。在该模式中创建所需的所有表。创建 pdns 角色(用户)时,将其搜索路径设置为在公开之前搜索您的 pdns 模式。将 pdns 模式的访问权限授予 pdns 角色。

create schema pdns;
# create your tables as pdns.tablename
create role pdns with password 'yourpassword';
alter role pdns set search_path = "$user",pdns,public;
grant usage on schema pdns to pdns;
grant select,insert,update,delete on all tables in schema pdns to pdns;
grant select,update on all sequences in schema pdns to pdns;

如果您撤销 pdns 对其他表的任何访问权限,则不必太担心分离。这样就差不多了。

编辑:注意:如果您是 Postgres 新手,您可能不知道,虽然您可以授予对架构中所有表的访问权限,但如果您添加或重新添加表,则必须授予对新表的访问权限(通过重新运行授权命令)。这就是为什么此答案中的授权是最后的。

答案2

http://mailman.powerdns.com/pipermail/pdns-users/2005-July/002524.html

就像本网站上提到的那样,可能通过一些“黑客攻击”实现

you can fake this by redefining all gmysql queries. Extract
the current queries like this:

$ /usr/sbin/pdns_server --launch=gmysql --config 2>&1 | grep -i gmysql | grep query=

And change all instances of 'records' by 'blah-records', and insert this in
your configuration.

您将用 pdns.records 替换“blah-records”

如果这不起作用,那么您唯一的选择就是编写一个包装器来动态重写 postgres 查询。(可能比它值得的工作更多)。您的要求不受支持,简短的回答是:不应该这样做

附言:您可以自行查找上述命令的 postgres 等效项..(如果存在)

相关内容