Um blog sobre nada

Um conjunto de inutilidades que podem vir a ser úteis

Actian Matrix – list user privileges

Posted by Diego em Janeiro 22, 2015


 

The query bellow lists all tables on a database and whether or not a particular user has privileges on it.

The “privileges” are hard coded as SELECT, UPDATE, INSERT and DELETE (I’m sure that there’s a better way of implementing this part but since I was only interested on these 4, this is a simpler solution). 

The user is an input when you run the query (I’m using Aginity to run the query)

 

clip_image001

 

 

select n.nspname as schema, c.relname as table

, array(

       select CASE WHEN has_table_privilege($user,n.nspname ||‘.’|| c.relname,‘SELECT’) THEN ‘SELECT’ ELSE END UNION 

       select CASE WHEN has_table_privilege($user,n.nspname ||‘.’|| c.relname,‘UPDATE’) THEN ‘UPDATE’ ELSE END UNION

       select CASE WHEN has_table_privilege($user,n.nspname ||‘.’|| c.relname,‘INSERT’) THEN ‘INSERT’ ELSE END UNION

       select CASE WHEN has_table_privilege($user,n.nspname ||‘.’|| c.relname,‘DELETE’) THEN ‘DELETE’ ELSE END

) as privileges

FROM pg_class c JOIN pg_namespace n on c.relnamespace=n.oid

where n.nspname not in (‘information_schema’,‘pg_catalog’,‘sys’) and c.relkind=‘r’

order by 1,2

 

 

clip_image002

 

 

FYI, DO NOT run this code on versions bellow than 5.1.2. It will crash your database.

Deixe uma Resposta

Preencha os seus detalhes abaixo ou clique num ícone para iniciar sessão:

Logótipo da WordPress.com

Está a comentar usando a sua conta WordPress.com Terminar Sessão / Alterar )

Imagem do Twitter

Está a comentar usando a sua conta Twitter Terminar Sessão / Alterar )

Facebook photo

Está a comentar usando a sua conta Facebook Terminar Sessão / Alterar )

Google+ photo

Está a comentar usando a sua conta Google+ Terminar Sessão / Alterar )

Connecting to %s

 
%d bloggers like this: