gpt4 book ai didi

postgresql - 如何使用 psql postgres 在带有通配符的表上授予 SELECT PRIVILEGES

转载 作者:行者123 更新时间:2023-12-04 15:50:37 27 4
gpt4 key购买 nike

在其他表中,我有一些表的名称以下划线“_XXXXXXX”开头。我需要创建一个只能对这些“_XXXX”表(仅此而已)进行查询的用户没有查看/查找其他表(不是以“_XXXXX”开头)的可能性。

我如何在 postgres psql 中做到这一点?:

我试过了

  GRANT SELECT ON TABLE "_*" TO username;

我得到以下信息:

错误:关系“_*”不存在

感谢任何帮助。

谢谢

当我在 PgAdmin4 查询编辑器中执行这段代码时:

DO
$$
DECLARE
r record;
BEGIN
FOR r IN SELECT c.relname,
n.nspname
FROM pg_class c
INNER JOIN pg_namespace n
ON n.oid = c.relnamespace
WHERE n.nspname = 'Schemas'
AND c.relkind = 'r'
AND c.relname LIKE '$_%'
ESCAPE '$' LOOP
EXECUTE 'GRANT SELECT ON "' || r.nspname || '"."' || r.relname || '" TO kpidata;';
END LOOP;
END;
$$
LANGUAGE plpgsql;

我得到以下响应并且没有任何变化(对于创建的用户“kpidata”仍然具有相同的访问权限)。我确定是我不了解事情是如何运作的

enter image description here

我的数据库结构如下:

enter image description here

最佳答案

您可以使用 DO block 循环遍历名称以下划线开头的所有表,为其构建语句并执行该语句。

DO
$$
DECLARE
r record;
BEGIN
FOR r IN SELECT c.relname,
n.nspname
FROM pg_class c
INNER JOIN pg_namespace n
ON n.oid = c.relnamespace
WHERE n.nspname = 'public'
AND c.relkind = 'r'
AND c.relname LIKE '$_%'
ESCAPE '$' LOOP
EXECUTE 'GRANT SELECT ON "' || r.nspname || '"."' || r.relname || '" TO username;';
END LOOP;
END;
$$
LANGUAGE plpgsql;

关于postgresql - 如何使用 psql postgres 在带有通配符的表上授予 SELECT PRIVILEGES,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53962906/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com