隐藏某些用户在Amazon Redshift群集中的数据库

时间:2014-02-04 11:28:01

标签: sql amazon-web-services amazon-redshift

是否有可能隐藏某些用户在Amazon Redshift 中隐藏和访问数据库(包括他们的架构,表格等)。 默认情况下,似乎每个用户都能够看到其他数据库,即使他没有权限选择数据也没有任何其他(非默认)权限。

我试过

REVOKE ALL PRIVILEGES ON DATABASE testdb FROM testdbuser;

和类似但仍然testdbuser可以连接到testdb DB,甚至可以在SQL工具中看到对象浏览器中的所有其他对象(这里是:Aginity Redshift Workbench)。

理想情况下,除了明确授予访问权限之外,testdbuser将无法看到任何其他内容。

注意,testdbuser不是超级用户。

谢谢!

2 个答案:

答案 0 :(得分:4)

尝试从PUBLIC组撤消vs特定用户

REVOKE USAGE ON SCHEMA information_schema FROM PUBLIC;
REVOKE USAGE ON SCHEMA pg_catalog FROM PUBLIC;    -- This should suffice, but...
REVOKE SELECT ON TABLE pg_catalog.pg_database FROM PUBLIC;   -- just to be sure.

请注意,这可能会对所选数据库中的所有用户产生不良影响。 您需要在所有数据库上执行此操作,因为用户可以猜测另一个数据库名称并在那里查看pg_catalog信息。

只需尝试切换或连接所有可能的字符串,用户仍然可以通过暴力攻击找到所有数据库。

答案 1 :(得分:3)

不幸的是,今天不可能。 Redshift不支持REVOKE CONNECT FROM DATABASE命令,因此用户可以连接到任何数据库。

因为Redshift是基于PostgreSQL构建的,所以一旦连接,用户就可以从系统表中读取集群中所有数据库的列表,通过连接到每个数据库,可以读取模式,表,甚至表列的列表。系统表,即使通过使用REVOKE ... FROM SCHEMA或REVOKE ... FROM TABLE阻止它们读取这些表中的数据。