Alex Asked: 2012-03-26 07:32:20 +0800 CST2012-03-26 07:32:20 +0800 CST 2012-03-26 07:32:20 +0800 CST 作为非超级特权用户创建 UUID 扩展 772 我需要在我的数据库上加载 uuid 扩展,该扩展是在运行时创建的。创建数据库的用户不是超级用户,她只有“CREATEDB”权限。 有没有办法做到这一点?谢谢。 postgresql postgresql-extensions 1 个回答 Voted Best Answer Erwin Brandstetter 2012-03-26T13:02:15+08:002012-03-26T13:02:15+08:00 我看到两种可能性: 1. 将扩展安装到模板数据库(只是一个常规数据库)并将其用作以下模板CREATE DATABASE: CREATE DATABASE new_db TEMPLATE my_template_db; 这会将所有已安装的扩展复制到新数据库中。您的用户显然可以做到这一点。 此外,如果她创建CREATE EXTENSION了数据库,则无论如何她都应该拥有运行所需的权限。我引用手册: 对于大多数扩展,这意味着需要超级用户或数据库所有者权限。 2. 创建一个SECURITY DEFINER执行所有必要 DML 语句的函数,该函数由超级用户拥有。撤销public并授予EXECUTE用户角色的所有权限: CREATE FUNCTION foo() ... SECURITY DEFINER; REVOKE ALL ON FUNCTION foo() FROM public; GRANT EXECUTE ON FUNCTION foo() to my_user; 阅读手册中的“安全地编写 SECURITY DEFINER 函数”一章。
我看到两种可能性:
1.
将扩展安装到模板数据库(只是一个常规数据库)并将其用作以下模板
CREATE DATABASE
:这会将所有已安装的扩展复制到新数据库中。您的用户显然可以做到这一点。
此外,如果她创建
CREATE EXTENSION
了数据库,则无论如何她都应该拥有运行所需的权限。我引用手册:2.
创建一个
SECURITY DEFINER
执行所有必要 DML 语句的函数,该函数由超级用户拥有。撤销public
并授予EXECUTE
用户角色的所有权限:阅读手册中的“安全地编写 SECURITY DEFINER 函数”一章。