是否有一个将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
从特权用户运行,它像一个魅力。
这可以通过两个步骤来完成。
运行这个查询:
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”)
这将给你一个将生成所需权限的查询列表。 复制输出,将其粘贴到另一个查询中,然后执行。
这是我用过的:
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脚本来完成这个工作。