Я хотел бы просмотреть гранты на красных смещениях.
Я нашел этот вид для postgres:
CREATE OR REPLACE VIEW view_all_grants AS
SELECT
use.usename as subject,
nsp.nspname as namespace,
c.relname as item,
c.relkind as type,
use2.usename as owner,
c.relacl,
(use2.usename != use.usename and c.relacl::text !~ ('({|,)' || use.usename || '=')) as public
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 or
c.relacl::text ~ ('({|,)(|' || use.usename || ')=')
ORDER BY
subject,
namespace,
item
Что не работает, потому что ::text
листинг relacl
выходит из строя со следующим:
ERROR: cannot cast type aclitem[] to character varying [SQL State=42846]
Изменение запроса на
CREATE OR REPLACE VIEW view_all_grants AS
SELECT
use.usename as subject,
nsp.nspname as namespace,
c.relname as item,
c.relkind as type,
use2.usename as owner,
c.relacl
-- , (use2.usename != use.usename and c.relacl::text !~ ('({|,)' || use.usename || '=')) as public
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
-- or c.relacl::text ~ ('({|,)(|' || use.usename || ')=')
ORDER BY
subject,
namespace,
item
Позволяет создать представление, но я обеспокоен тем, что это не отображает все соответствующие данные.
Как я могу изменить представление для работы с красным смещением или есть лучший/альтернативный способ просмотра грантов при красном смещении?
UPDATE: Функция Redshift имеет функцию HAS_TABLE_PRIVILEGE для проверки грантов. (см. здесь)