我想知道是否有一种方法可以根据用户名和编程方式向用户授予特定数据库的权限。
例如,假设我们有数据库 db1、db2、x_db1、x_db2,我想将所有权限授予仅 x_db1 和 x_db2 上的用户。我不想执行
将数据库 x_db1 上的所有权限授予 user_x;
和
将数据库 x_db2 上的所有权限授予 user_x;
我想知道是否有类似 GRANT ALL PRIVILEGES ON DATABASE x_* TO user_x;所以我不必在每次添加新数据库时都向用户授予权限。
我相信GRANT不接受通配符,但是,如similar-topic,你可以使用程序来实现它: 做
$$
BEGIN
EXECUTE (
SELECT 'GRANT ALL ON TABLE '
|| string_agg (format('%I.%I', table_schema, table_name), ',')
|| ' TO test'
FROM information_schema.tables
WHERE table_schema = 'public'
AND table_name LIKE 'test\_%'
);
END
$$;