Re: How to grant a privilege on all tables or views or both of a database to someone?
От | Andrew G. Hammond |
---|---|
Тема | Re: How to grant a privilege on all tables or views or both of a database to someone? |
Дата | |
Msg-id | 20020307204059.GA22890@xyzzy.dhs.org обсуждение исходный текст |
Ответ на | Re: How to grant a privilege on all tables or views or both of a database to someone? ("Paul Ogden" <pogden@claresco.com>) |
Ответы |
Re: How to grant a privilege on all tables or views or both of a database to someone?
|
Список | pgsql-sql |
On Thu, Mar 07, 2002 at 10:55:51AM -0800, Paul Ogden wrote: > How to grant a privilege on all tables or views or both of a database to > someone?Here's what I did, using psql: Personally I solved this using plpgsql: -- usage: SELECT grant_all('privilidge', 'user'); -- grants privilidge (SELECT, UPDATE, INSERT, DELETE or ALL) to the user -- for all non-pg_ objects in the database (except indices). DROP FUNCTION grant_all(text, text); CREATE FUNCTION grant_all(text, text) RETURNS boolean AS ' DECLARE item RECORD; priv ALIAS FOR $1; user ALIAS FOR $2; BEGIN FOR item IN SELECT * FROM pg_class WHERE relname !~ ''^pg_'' AND relkind <> ''i'' LOOP EXECUTE ''GRANT ''|| priv || '' ON '' || quote_ident(item.relname) || '' TO '' || quote_ident(user); END LOOP; RETURN ''t''; END;' LANGUAGE 'plpgsql'; DROP FUNCTION grant_all_tables(text, text); CREATE FUNCTION grant_all_tables(text, text) RETURNS boolean AS ' DECLARE item RECORD; priv ALIAS FOR $1; user ALIAS FOR $2; BEGIN FOR item IN SELECT * FROM pg_class WHERE relname !~ ''^pg_'' AND relkind = ''r'' LOOP EXECUTE ''GRANT '' ||priv || '' ON '' || quote_ident(item.relname) || '' TO '' || quote_ident(user); END LOOP; RETURN ''t''; END;' LANGUAGE 'plpgsql'; DROP FUNCTION grant_all_tables_and_views(text, text); CREATE FUNCTION grant_all_tables_and_views(text, text) RETURNS boolean AS ' DECLARE item RECORD; priv ALIAS FOR $1; user ALIAS FOR $2; BEGIN FOR item IN SELECT * FROM pg_class WHERE relname !~ ''^pg_'' AND relkind IN (''r'', ''v'') LOOP EXECUTE ''GRANT'' || priv || '' ON '' || quote_ident(item.relname) || '' TO '' || quote_ident(user); END LOOP; RETURN ''t''; END;' LANGUAGE 'plpgsql'; -- Andrew G. Hammond mailto:drew@xyzzy.dhs.org http://xyzzy.dhs.org/~drew/ 56 2A 54 EF 19 C0 3B 43 72 69 5B E3 69 5B A1 1F 613-389-5481 5CD3 62B0 254B DEB1 86E0 8959 093E F70A B457 84B1 "To blow recursion you must first blow recur" -- me
В списке pgsql-sql по дате отправления: