GRANT SELECT到postgresql中的所有表

是否有一个将SELECT权限授予新用户 postgresql的单行内容?

一些可以实现以下伪代码的东西:

GRANT SELECT ON TABLE * TO my_new_user; 

    我认为可能会有所帮助,从9.0开始,postgres确实拥有语法来授予模式中所有表(以及其他对象)的权限:

     GRANT SELECT ON ALL TABLES IN SCHEMA public TO user; GRANT EXECUTE ON ALL FUNCTIONS IN SCHEMA public TO user; 

    这是链接 。

    我的(非单线)解决scheme:

     #!/bin/bash for table in `echo "SELECT schemaname || '.' || relname FROM pg_stat_user_tables;" | psql -A -t my_database_name`; do echo "GRANT SELECT ON TABLE $table to my_new_user;" echo "GRANT SELECT ON TABLE $table to my_new_user;" | psql my_database_name done 

    从特权用户运行,它像一个魅力。

    这可以通过两个步骤来完成。

    1. 运行这个查询:

       select 'grant all on '||schemaname||'.'||tablename||' to $foo;' from pg_tables where schemaname in ('$bar', '$baz') order by schemaname, tablename; 

      replace:

      $foo =你想授予的权限
      $bar$baz =您想授予权限的模式(可以是“public”)

    2. 这将给你一个将生成所需权限的查询列表。 复制输出,将其粘贴到另一个查询中,然后执行。

    这是我用过的:

     psql dbname -tc "select 'grant select on '||relname||' to readonly;' from pg_stat_user_tables" | psql dbname 

    我觉得这是更自然的做格式化和where子句在SQL ..

    我正在使用postgres 8.4并为用户提供所有权限,请执行以下操作:

     #!/bin/bash for table in `echo "SELECT schemaname||'.'||relname FROM pg_stat_all_tables WHERE schemaname NOT IN('pg_catalog','pg_toast','information_schema')" | psql -t db `; do echo "grant select on table $table to my_new_user;" echo "grant select on table $table to my_new_user;" | psql db done 

    解决这个问题的一个方法是编写一个存储过程。 不幸的是没有“授予所有的表”命令左右。 你真的需要一个程序或者一些外部的shell脚本来完成这个工作。