How do I view grants on Redshift

前端 未结 6 971
半阙折子戏
半阙折子戏 2020-12-02 10:22

I\'d like to view grants on redshifts.

I found this view for postgres:

CREATE OR REPLACE VIEW view_all_grants AS 
SELECT 
  use.usename as subject, 
         


        
6条回答
  •  我在风中等你
    2020-12-02 11:13

    The has_table_privilege function is handy, but doesn't always help in administration when you want to manage groups. I morphed your original query to create grant scripts for specific users or groups. This sample query can be easily morphed to accommodate your needs

    select namespace||'.'||item as tablename , 
    'grant ' || substring(
                    case when charindex('r',split_part(split_part(array_to_string(relacl, '|'),'group dw_developers=',2 ) ,'/',1)) > 0 then ',select ' else '' end 
                  ||case when charindex('w',split_part(split_part(array_to_string(relacl, '|'),'group dw_developers=',2 ) ,'/',1)) > 0 then ',update ' else '' end 
                  ||case when charindex('a',split_part(split_part(array_to_string(relacl, '|'),'group dw_developers=',2 ) ,'/',1)) > 0 then ',insert ' else '' end 
                  ||case when charindex('d',split_part(split_part(array_to_string(relacl, '|'),'group dw_developers=',2 ) ,'/',1)) > 0 then ',delete ' else '' end 
                  ||case when charindex('R',split_part(split_part(array_to_string(relacl, '|'),'group dw_developers=',2 ) ,'/',1)) > 0 then ',rule ' else '' end 
                  ||case when charindex('x',split_part(split_part(array_to_string(relacl, '|'),'group dw_developers=',2 ) ,'/',1)) > 0 then ',references ' else '' end 
                  ||case when charindex('t',split_part(split_part(array_to_string(relacl, '|'),'group dw_developers=',2 ) ,'/',1)) > 0 then ',trigger ' else '' end 
                  ||case when charindex('X',split_part(split_part(array_to_string(relacl, '|'),'group dw_developers=',2 ) ,'/',1)) > 0 then ',execute ' else '' end 
                  ||case when charindex('U',split_part(split_part(array_to_string(relacl, '|'),'group dw_developers=',2 ) ,'/',1)) > 0 then ',usage ' else '' end 
                  ||case when charindex('C',split_part(split_part(array_to_string(relacl, '|'),'group dw_developers=',2 ) ,'/',1)) > 0 then ',create ' else '' end 
                  ||case when charindex('T',split_part(split_part(array_to_string(relacl, '|'),'group dw_developers=',2 ) ,'/',1)) > 0 then ',temporary ' else '' end 
               , 2,10000)
     || ' on '||namespace||'.'||item ||' to group dw_developers;' as grantsql
    from 
    (SELECT 
      use.usename as subject, 
      nsp.nspname as namespace, 
      c.relname as item, 
      c.relkind as type, 
      use2.usename as owner, 
      c.relacl 
     FROM 
      pg_user use 
      cross join pg_class c 
      left join pg_namespace nsp on (c.relnamespace = nsp.oid) 
      left join pg_user use2 on (c.relowner = use2.usesysid)
     WHERE 
      c.relowner = use.usesysid  
      and  nsp.nspname NOT IN ('pg_catalog', 'pg_toast', 'information_schema')
     ORDER BY 
      subject,   namespace,   item 
     ) where relacl is not null
     and array_to_string(relacl, '|') like '%group dw_developers%' order by 1
    

提交回复
热议问题