Re: How to grant a privilege on all tables or views or both of a database to someone? - Mailing list pgsql-sql

From Andrew G. Hammond
Subject Re: How to grant a privilege on all tables or views or both of a database to someone?
Date
Msg-id 20020307204059.GA22890@xyzzy.dhs.org
Whole thread Raw
In response to Re: How to grant a privilege on all tables or views or both of a database to someone?  ("Paul Ogden" <pogden@claresco.com>)
Responses Re: How to grant a privilege on all tables or views or both of a database to someone?  ("Paul Ogden" <pogden@claresco.com>)
List 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 by date:

Previous
From: "Josh Berkus"
Date:
Subject: Re: psql question
Next
From: george young
Date:
Subject: Fw: Re: 7.0.3 pg_dump -> segmentation fault!