繁体   English   中英

在Rails模式中启用UUID的最简单的最小特权方法是什么?

[英]What's the simplest least-privilege way to enable UUIDs in a Rails schema?

我正在通过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项目用户任何我的数据库的超级用户特权-这似乎不是一个好习惯。 那我应该怎么做呢?

注意: 该问题的可接受答案不能回答标题中较大的问题

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

被发现为为什么只有超级用户才能创建hstore而不在Heroku上创建cstore答案

如果您无法通过标准迁移过程,那么最好的方法可能是在template1中启用扩展,这样扩展就存在于您创建的每个新数据库中。 只要记住是否还原使用pg_dump来复制template0而不是默认template1的备份即可。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM