Answers:
我认为,提到9.0起,postgres确实具有在模式中授予所有表(以及其他对象)特权的语法:
GRANT SELECT ON ALL TABLES IN SCHEMA public TO user;
GRANT EXECUTE ON ALL FUNCTIONS IN SCHEMA public TO user;
这是链接。
default privileges
在架构上设置ytou创建表:postgresql.org/docs/current/static/…–
public
您所连接的当前数据库的架构中的所有表(函数)。
我的(单线)解决方案:
#!/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
从特权用户运行,它就像一个魅力。
我正在使用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脚本才能使此工作生效。
当存在许多模式时,Adam Matan的(单行解决方案)脚本非常有用,但是在模式名称或表名称包含大写字母或特殊字符的情况下,该脚本不起作用。
修改版本:
#!/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