为什么只有超级用户CREATE EXTENSION hstore,而不是Heroku?

 无敌小志哥_443 发布于 2023-02-08 17:35

当我尝试在我的数据库上启用hstore时:

=> CREATE EXTENSION IF NOT EXISTS hstore;
ERROR:  permission denied to create extension "hstore"
HINT:  Must be superuser to create this extension.

我的用户是不是超级用户,但是数据库的所有者.

根据CREATE EXTENSION文档:

加载扩展需要具有创建其组件对象所需的相同权限.对于大多数扩展,这意味着需要超级用户或数据库所有者权限.运行CREATE EXTENSION的用户将成为扩展的所有者,以便以后进行权限检查,以及扩展程序脚本创建的任何对象的所有者.

什么是hstore,需要超级用户权限?它是否会影响我将其添加到数据库外部的群集部分?


进一步的混乱:

数据库用户Heroku Postgres提供的不是超级用户:

Heroku Postgres用户被授予其数据库的所有非超级用户权限.这些措施包括SELECT,INSERT,UPDATE,DELETE,TRUNCATE,REFERENCES,TRIGGER,CREATE,CONNECT,TEMPORARY,EXECUTE,和USAGE.

但是,该用户能够CREATE EXTENSION hstore:

要创建任何支持的扩展,请使用heroku pg:psql打开一个会话并运行相应的命令:

$ heroku pg:psql
Pager usage is off.
psql (9.2.4)
SSL connection (cipher: DHE-RSA-AES256-SHA, bits: 256)
Type "help" for help.

ad27m1eao6kqb1=> CREATE EXTENSION hstore;
CREATE EXTENSION
ad27m1eao6kqb1=>

(对于上下文,我正在尝试设置Dokku部署,因此与Heroku的比较尤为重要.)

1 个回答
  • hstore扩展创建从外部动态对象调用代码的函数,这需要超级用户权限.这就是创建hstore扩展需要超级用户权限的原因.

    至于Heroku,我的理解是他们运行了一个特殊的扩展白名单模块,它允许用户创建某些扩展,即使他们不是超级用户.我相信它基于以下代码:https://github.com/dimitri/pgextwlist.如果您想在数据库中使用相同的功能,可以尝试自己安装该代码.

    2023-02-08 17:39 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有