我创建了具有超级用户权限的用户角色。我的服务器上有大约30个数据库。我想将此角色仅分配给DB。当前角色允许用户以超级用户身份访问所有数据库。如何限制他以超级用户身份访问其他数据库。
这是我分配超级用户的目的:
CREATE ROLE fc LOGIN
SUPERUSER INHERIT NOCREATEDB NOCREATEROLE NOREPLICATION;
有人可以帮我这个吗?
答案 0 :(得分:2)
PostgreSQL中没有针对数据库特定超级用户的工具。
无论如何,这是没有意义的,因为通常只有超级用户的操作才允许相对容易的升级以更好地控制数据库系统。
答案 1 :(得分:2)
正如@Craig解释的那样,你不能(即使你可以,也没有意义)。
实现受限制的超级用户权限的常用方法是以现有超级用户角色身份进行连接,并创建包含一组有限批准命令的SECURITY DEFINER
functions。现在,这些函数将使用创建者而不是调用者的权限执行。
但是你需要非常小心不要打开任何注入漏洞,因为函数中的所有内容都将以超级用户身份运行。例如。调用者可以编写一个自定义=
运算符,授予他们超级用户权限,并将其放在搜索路径中,因此您需要绝对确保使用=
中的pg_catalog
架构。
至少,你应该:
SECURITY DEFINER SET search_path TO pg_catalog, pg_temp
创建所有这些函数。 pg_temp
模式必须始终包含在列表的末尾(如果省略,则会在开头隐式包含它)。public.MyTable
而不仅仅是MyTable
),并确保所有这些都是超级用户拥有的(以便调用者)不能将恶意代码放入触发器等。)。EXECUTE 'SELECT ...'
)中,而不进行详尽的验证。