답변:
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
연결된 현재 DB 에 대한 스키마의 모든 테이블 (함수)에 영향을줍니다 .
내 (비 라이너) 솔루션 :
#!/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
특권 사용자로부터 실행, 그것은 매력처럼 작동했습니다.
이는 2 단계 프로세스로 수행 할 수 있습니다.
이 쿼리를 실행하십시오.
select 'grant all on '||schemaname||'.'||tablename||' to $foo;'
from pg_tables where schemaname in ('$bar', '$baz')
order by schemaname, tablename;
교체 :
$foo
= 권한을 부여하려는 사용자 이름
$bar
, $baz
= 권한을 부여하려는 스키마 ( "공개"일 수 있음)
필요한 권한을 생성하는 쿼리 목록이 표시됩니다. 출력을 복사하여 다른 쿼리에 붙여 넣고 실행하십시오.
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
이를 해결하는 한 가지 방법은 저장 프로 시저를 작성하는 것입니다. 불행히도 "모든 테이블에 모든 것을 부여"명령은 없습니다. 이 작업을 수행하려면 프로 시저 또는 외부 쉘 스크립트가 필요합니다.
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