Answers:
从扩展文档中,
superuser(布尔值)如果此参数为true(默认值),则只有超级用户才能创建扩展名或将其更新为新版本。如果将其设置为false,则仅需要执行安装或更新脚本中的命令所需的特权。
该值未在中设置pgcrypto.control
,因此默认情况下为true,这需要一个SuperUser。
这意味着CREATE EXTENSION
尽管CREATE EXTENSION上的文档使您相信,但您不能仅作为数据库的所有者。
我尝试将其设置为false
,没有任何乐趣。C是不可信的语言,您将获得
错误:语言C的权限被拒绝
只有超级用户才能使用不受信任的语言创建功能。
...当然,您可以以超级用户身份获得c
信任UPDATE pg_language set lanpltrusted = true where lanname = 'c';
。然后CREATE EXTENSION pgcrypto
可以作为非超级用户正常工作。但是,如果您不得不担心用户将源上传到扩展目录,然后将其安装在数据库中,那听起来是个坏主意。也就是说,我不会走那么远。我会找到另一种方法给这只猫换皮。
pg_dump
可以防止它转储有关扩展的语句又有什么意义呢?目前,我必须使用外部文本处理工具从中转储的SQL中删除这些语句pg_dump
。
template1
,然后通过template1
like 创建每个用户数据库CREATE DATABASE foo OWNER=userfoo TEMPLATE=template1
?