我想查看红移补助金。
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
允许创建视图,但我担心这并未显示所有相关数据。
如何修改视图以在 redshift 上工作,或者是否有更好/替代的方式来查看 redshift 上的授权?
更新: Redshift 有 HAS_TABLE_PRIVILEGE 函数来检查授权。 (见 这里)
原文由 sw1nn 发布,翻译遵循 CC BY-SA 4.0 许可协议
另一种变化是: