Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/amazon-web-services/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Amazon web services 自动红移权限_Amazon Web Services_Amazon Redshift_Airflow_Aws Glue - Fatal编程技术网

Amazon web services 自动红移权限

Amazon web services 自动红移权限,amazon-web-services,amazon-redshift,airflow,aws-glue,Amazon Web Services,Amazon Redshift,Airflow,Aws Glue,我正在尝试自动执行一些关于红移的SQL查询,这些查询是由用户权限“触发”的 查询只需使用customer\u id过滤器创建表的视图,创建具有customer\u id的用户,并授予该customer\u id读取表视图的权限。这可以防止不同的客户看到彼此的数据,当我手动实现时,效果很好 我面临的问题是自动化,因为我现在正在用红移手动执行此操作。我想自动完成这项工作 我认为: 红移-不支持触发器。 Lambda触发器-Lambda不会从红移触发。 API网关-“请求”也不是API调用,因此客户端

我正在尝试自动执行一些关于红移的SQL查询,这些查询是由用户权限“触发”的

查询只需使用customer\u id过滤器创建表的视图,创建具有customer\u id的用户,并授予该customer\u id读取表视图的权限。这可以防止不同的客户看到彼此的数据,当我手动实现时,效果很好

我面临的问题是自动化,因为我现在正在用红移手动执行此操作。我想自动完成这项工作

我认为:

红移-不支持触发器。 Lambda触发器-Lambda不会从红移触发。 API网关-“请求”也不是API调用,因此客户端不会对非技术性权限进行API调用。 气流-似乎是一个相当小的东西大设置。但这是可行的。 胶水-我正在使用胶水加载到红移目前。也许我可以在工作流中添加一些东西,以获得客户id的不同列表,然后通过工作流在红移上运行SQL?
您对此有什么想法或建议吗?

您可以使用惰性模式创建视图和权限。在API lambda中:

检查客户id视图是否存在。如果是,请检查用户是否为 已创建并拥有权限。然后使用customer\u id user获取数据 如果未创建视图,请使用SQL查询创建它,转到步骤3 如果未创建用户,请使用SQL查询创建它,转到步骤4

如果未创建用户权限,请使用SQL查询创建它,转到步骤1


对于第一个请求,您必须在超级用户和客户id用户之间切换连接,然后它将使用客户id用户进行所有后续请求。

与其为每个用户使用不同的视图,不如创建一个使用该用户的视图

这将返回当前登录用户的用户名。因此,查询可以使用Where子句中的用户名将行限制为与其标识匹配的行

它要么需要一个包含用户名的列,要么视图需要加入一个可以将用户名与客户id匹配的表

可能是这样的:

创建视图foo 像 选择 ... 从桌子上 使用customer\u id加入用户 其中users.username=当前用户
确切的问题是什么?是自动安装的能力,还是如何触发安装脚本?@JohnRotenstein这两个都是问题所在,我想当我指的是“自动”时,我指的是两个步骤:那么是什么动作触发了整个过程呢?是不是有人注册了一个应用程序?您是否授予外部人员客户直接访问您的数据库的权限?这通常不是一个好主意,因为很难控制/限制它们在数据库中的行为。首选的方法是授予对API的访问权,该API可以代表他们发出请求。@JohnRotenstein-yes外部人员访问数据库。因此,我正在创建视图和用户,这样他们就看不到彼此的数据。我建议采用API路线,但公司拒绝了。数据有一个“customer_id”列,该列是外部客户所独有的,这是决定拆分的原因。问题是表中可能有数百万个customer_id。。。因此,将有1百万以上的视图设置和权限。我想这很好,但有什么方法可以优化它吗?您可以让多个客户在同一时间点查询数据,因此当前用户可以是多个用户?当前用户将设置为运行当前查询的任何用户的用户名。因此,每个用户的结果都会有所不同。它不会将数据放入视图中-它会更改视图运行以获取数据的查询。如果有多个用户在运行查询,这无关紧要——他们只会看到他们的数据。啊,好的,我会试试这个!我建议您通过创建一个新表来测试这个概念,其中一列是username,另一列是伪数据。然后,从username=current_user的表中选择*。您应该只看到该用户的行。接下来,将其转换为视图,以证明它为不同的用户显示不同的数据。最后,将该概念应用到现有表中。