微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何跟踪模式中特定对象上所有 GRANTS 的历史记录?

如何解决如何跟踪模式中特定对象上所有 GRANTS 的历史记录?

我每周创建一个表(ALTERYX 覆盖)并为角色分配一个 SELECT 授权。神秘的是,在过去的 6 个月中,该业务用户曾致电(2-3 次)并说缺少 SELECT 访问权限。我如何跟踪该对象上特定授权的历史记录,以便我可以了解哪个进程以及它何时被删除

顺便说一句,我知道如何跟踪一个授权,它清楚地显示在创建表后该对象上的 SELECT 可用(只有最新的它告诉)

选择 GRANTOR、GRANTEE、OBJECT_CATALOG、OBJECT_SCHEMA、OBJECT_NAME、OBJECT_TYPE、PRIVILEGE_TYPE、IS_GRANTABLE、CREATED 来自 EDP_DB.informatION_SCHEMA.OBJECT_PRIVILEGES

解决方法

您可以查询 QUERY_HISTORY 视图以查找更改该角色对该表的权限的原因。您必须对关键字(例如表名、动词类型(alter、revoke)和角色名称)使用自由格式文本匹配。你可以这样做:

select  * 
from    "SNOWFLAKE"."ACCOUNT_USAGE"."QUERY_HISTORY"
where   START_TIME > current_date - 180
    and  (QUERY_TEXT ilike '%revoke%' or QUERY_TEXT ilike '%alter%')
    and  QUERY_TEXT ilike '%table <TABLE_NAME>%'
;

这将搜索过去 180 天。根据帐户上运行的报表数量,可能需要一段时间才能完成。如果您知道它是最近发生的,则可以更改日期范围。

还要检查正在删除和创建的表或表上的“创建或替换”语句。

您还可以使用 QUERY_TYPE 列过滤特定类型,例如 ALTER、GRANT、CREATE 等,并过滤掉其他类型。

,

一个简单的透视表,显示了被 priv 类型破坏的角色:-)

select
*
from
(
    select
        object_name,PRIVILEGE_TYPE,listagg(distinct grantee,',') grantee,count(distinct grantee) grantees
    from
        SKYLAKE_DEV_DB.INFORMATION_SCHEMA.OBJECT_PRIVILEGES
    group by
        1,2
) a pivot (
    sum(grantees) for PRIVILEGE_TYPE in (
        'CREATE FUNCTION','UPDATE','CREATE EXTERNAL TABLE','CREATE MASKING POLICY','TRUNCATE','CREATE TEMPORARY TABLE','INSERT','CREATE SCHEMA','CREATE PIPE','SELECT','CREATE FILE FORMAT','OWNERSHIP','REBUILD','ADD SEARCH OPTIMIZATION','DELETE','MODIFY','CREATE STREAM','CREATE SEQUENCE','CREATE TABLE','CREATE STAGE','CREATE MATERIALIZED VIEW','REFERENCES','CREATE TASK','USAGE','MONITOR','CREATE VIEW','CREATE PROCEDURE'
    )
)

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。