Re: How to grant a privilege on all tables or views or both of a database to someone?

From: "Andrew G(dot) Hammond" <drew(at)xyzzy(dot)dhs(dot)org>
To: Paul Ogden <pogden(at)claresco(dot)com>
Cc: Eric Du <duxy(at)CDSC(dot)COM(dot)CN>, pgsql-sql(at)postgresql(dot)org
Subject: Re: How to grant a privilege on all tables or views or both of a database to someone?
Date: 2002-03-07 20:40:59
Message-ID: 20020307204059.GA22890@xyzzy.dhs.org
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: 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(at)xyzzy(dot)dhs(dot)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

In response to

Responses

Browse pgsql-sql by date

  From Date Subject
Next Message george young 2002-03-07 20:44:31 Fw: Re: 7.0.3 pg_dump -> segmentation fault!
Previous Message Josh Berkus 2002-03-07 20:30:15 Re: psql question