代码之家  ›  专栏  ›  技术社区  ›  pm100

我可以全局授权访问postgres中的视图吗[副本]

  •  0
  • pm100  · 技术社区  · 8 年前

    在PostgreSQL 9+中,是否有方法
    GRANT ALL PRIVILEGES on ALL VIEWS in schema schema_name TO role_name
    在一份声明中?

    0 回复  |  直到 10 年前
        1
  •  5
  •   Nick    10 年前

    在一条语句(某种程度上)中执行此操作的唯一方法是创建一个函数,否则您要么明确列出所有视图,要么授予所有表,然后撤销非视图。

    我写得很快,但测试过了。您可能需要根据需要进行调整:

    CREATE OR REPLACE FUNCTION fn_grant_all_views(schema_name TEXT, role_name TEXT)
    RETURNS VOID AS $func$
    
    DECLARE view_name TEXT;
    
    BEGIN
    
      FOR view_name IN
        SELECT viewname FROM pg_views WHERE schemaname = schema_name
      LOOP
        EXECUTE 'GRANT ALL PRIVILEGES ON ' || schema_name || '.' || view_name || ' TO ' || role_name || ';';
      END LOOP;
    
    END; $func$ LANGUAGE PLPGSQL
    

    SELECT fn_grant_all_views('my_schema','my_role');
    
        2
  •  0
  •   Ben Wilson    9 年前

    也可以从命令行执行此操作:

    1. 以postgres登录:

      sudo -i -u postgres

    2. 运行此命令:

      psql -At -d [dbname] -c "SELECT 'GRANT ALL ON '||viewname||' TO [username];' FROM pg_views WHERE schemaname='public';" | psql -d [dbname]