在Rails架构中启用UUID的最简单的最小权限方法是什么?

时间:2016-05-09 22:29:00

标签: ruby-on-rails postgresql privileges

我正在使用通过uuid-ossp扩展程序使用UUID的Rails项目。

这是通过我认为的标准迁移来完成的:

class EnableExtensions < ActiveRecord::Migration
  def change
    enable_extension 'plpgsql'
    enable_extension 'uuid-ossp' if Rails.env.development? || Rails.env.test?
  end
end

但是,使用此方法需要我手动转换并为每个数据库设置一个postgres超级用户启用扩展名:

-- enable_extension("uuid-ossp")
rake aborted!
ActiveRecord::StatementInvalid: PG::InsufficientPrivilege: ERROR:  permission denied to create extension "uuid-ossp"
HINT:  Must be superuser to create this extension.
: CREATE EXTENSION IF NOT EXISTS "uuid-ossp"

我不打算给我的用户或rails项目用户,我的任何数据库的超级用户权限 - 这似乎不是一个好习惯。那么我该怎么做呢?

注意:this question's accepted answer doesn't answer the larger question in the title

2 个答案:

答案 0 :(得分:3)

显然https://github.com/dimitri/pgextwlist允许您将扩展名列入白名单,而无需授予超级用户权限。

找到answer Why can only a superuser CREATE EXTENSION hstore, but not on Heroku?

答案 1 :(得分:1)

在您无法完成标准迁移过程的情况下,最好的方法可能是在template1中启用扩展,并且在您创建的每个新数据库中都使用它们。只记得是否恢复使用pg_dump复制template0的备份而不是默认的template1。