我们有一个多用户 Linux 服务器。我想赋予每个用户随意创建和管理数据库的能力,但为了保持理智,强制他们创建的每个数据库名称必须以用户名作为前缀。例如,用户joe
将只被允许创建类似joe_app1
andjoe_app2
而不是app1
or的数据库jack_app1
。这在 PostgreSQL 中可能吗?还是有另一种方法来分离用户创建的数据库的名称空间?
我们有一个多用户 Linux 服务器。我想赋予每个用户随意创建和管理数据库的能力,但为了保持理智,强制他们创建的每个数据库名称必须以用户名作为前缀。例如,用户joe
将只被允许创建类似joe_app1
andjoe_app2
而不是app1
or的数据库jack_app1
。这在 PostgreSQL 中可能吗?还是有另一种方法来分离用户创建的数据库的名称空间?
PostgreSQL 不允许您在 PostgreSQL 内部执行此操作。您不能在事务内创建数据库,因此过程语言函数不能创建数据库或删除数据库。我希望有一天这会得到纠正,但这是在事务中不起作用的一段 DDL。
这意味着您必须使用单独的应用程序从数据库外部执行此操作,该应用程序运行您想要运行的任何检查。要记住的一些关键事项是:
您可能希望为数据库创建过程指定一个专门的用户(具有
login
,的角色)。noinherit
您不想将创建数据库的权限授予一般用户。
该脚本应先创建数据库,然后再创建
ALTER DATABASE ... OWNER TO ...
以确保用户对其具有完全权限。