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

标签 postgresql psql

在其他表中,我有一些表的名称以下划线“_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/

相关文章:

按 T​​SRange 排序的 PostgreSQL

SQL GROUP BY 附加列

postgresql - Postgres - 主键唯一索引

postgresql - 如何列出为 postgres 中的表创建的索引

database - 恢复数据库和关系已存在时出现错误 "relation does not exist"

postgresql - 如何将 psql 脚本变量替换为查询中的字符串,以便无论是否设置变量都不会失败

java - PostgreSQL 列中映射的 Java LocalDate/LocalDateTime 字段的问题

ruby-on-rails - 使用 zeus : Postgres is being accessed by other users 进行 cucumber 和 RSpec 测试

node.js - 在 nodejs 中连接到 heroku postgres db 时出错

database - PostgreSQL "DESCRIBE TABLE"