如何使用 psql postgres 使用通配符在 table 上授予 SELECT 特权
How to GRANT SELECT PRIVILEGES on table with wild card with psql postgres
我有一些表的名称以下划线“_XXXXXXX”开头。我需要创建一个只能对这些“_XXXX”表进行查询的用户(仅此而已)没有 viewing/finding其他表的可能性(不是以“_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' 仍然具有相同的访问权限)。我敢肯定是我不了解事情是如何运作的
我的数据库结构如下:
您可以使用 DO
块循环所有 table 名称以下划线开头,为其构建语句并执行语句。
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;
我有一些表的名称以下划线“_XXXXXXX”开头。我需要创建一个只能对这些“_XXXX”表进行查询的用户(仅此而已)没有 viewing/finding其他表的可能性(不是以“_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' 仍然具有相同的访问权限)。我敢肯定是我不了解事情是如何运作的
我的数据库结构如下:
您可以使用 DO
块循环所有 table 名称以下划线开头,为其构建语句并执行语句。
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;