Ale*_*lex 7 postgresql postgresql-extensions
我需要在我的数据库上加载 uuid 扩展,这是在运行时创建的。创建数据库的用户不是超级用户,她只有“CREATEDB”权限。
有没有办法做到这一点?谢谢。
我看到两种可能性:
将扩展安装到模板数据库(只是一个常规数据库)并将其用作以下模板CREATE DATABASE
:
CREATE DATABASE new_db TEMPLATE my_template_db;
Run Code Online (Sandbox Code Playgroud)
这会将所有已安装的扩展复制到新数据库中。您的用户显然可以做到这一点。
此外,如果她创建了数据库,那么CREATE EXTENSION
无论如何她都应该拥有运行所需的权限。我引用手册:
对于大多数扩展,这意味着需要超级用户或数据库所有者权限。
创建一个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;
Run Code Online (Sandbox Code Playgroud)
阅读手册中的“安全地编写 SECURITY DEFINER 函数”一章。
归档时间: |
|
查看次数: |
4319 次 |
最近记录: |