在AWS上使用Redshift。我们有一个数据库,我们希望将其展示给客户。使我们的各种基础表看起来像一个大的uber表(客户需求)的视图。这是一组不断更新的大数据,因此无法拍摄快照并将其复制到某处...除非每隔几分钟就有一种疯狂的快速方法来完成此操作。
我们不希望客户看到我们的基础表。不仅阻止它们查询这些表,而且无法看到它们甚至存在。用GRANT看起来不太可能。
还有其他方法可以防止看到这些基础表名吗?或者,也许可以通过一些巧妙的方法将视图显示在与基础表不同的数据库中。似乎不可能有一个视图引用另一个数据库,但这就是为什么我在这里征求想法的原因:)
答案 0 :(得分:0)
您可以使用存储过程。
“对于细粒度的访问控制,您可以创建存储过程来执行功能,而无需授予用户访问基础表的权限。例如,只有所有者或超级用户可以截断表,并且用户需要对表的写许可权将数据插入表中。您可以创建执行该任务的存储过程,而不是授予用户对基础表的权限,然后授予用户运行该存储过程的权限。
具有DEFINER安全属性的存储过程以存储过程所有者的特权运行。默认情况下,存储过程具有INVOKER安全性,这意味着该过程使用调用该过程的用户的权限。“
答案 1 :(得分:0)
假设您在db1中有数据和表。
因此,您在db1中创建一个模式(s1),并基于db1中的表创建所有视图。然后创建一个具有db1_s1_reader之类的角色,该角色具有对模式s1的读取访问权限,并将此角色分配给所有想要读取数据的用户。如果用户已经具有数据访问权限,则从db1向用户发布此撤消访问权限。