检查架构Postgresql上的用户访问权限

时间:2018-07-31 16:25:32

标签: amazon-web-services amazon-redshift

我研究了在此处找到的GRANT文档(https://docs.aws.amazon.com/redshift/latest/dg/r_GRANT.html),我试图查看是否有内置函数可以让我了解数据库中的可访问性级别。当然有:

\ dp和\ dp mytablename

但这不显示我的帐户有权访问的内容。我想查看我有权访问或使用的所有架构。谁能告诉我是否有一个命令可以检查我在Postgres / Redshift中的访问级别(是否具有CREATE,USAGE特权)?如果是这样,该命令将是什么?和数据库一样(是否具有CREATE,TEMP,TEMPORARY特权)

1 个答案:

答案 0 :(得分:1)

确保您熟悉Postgres用于用户/角色的模型: 来自the Postgres documentation

  

PostgreSQL使用角色的概念来管理数据库访问权限。可以将角色视为数据库用户或一组数据库用户,这取决于角色的设置方式。角色可以拥有数据库对象(例如,表和函数),并且可以将这些对象的特权分配给其他角色,以控制谁有权访问哪些对象

因此,您应该考虑“用户X分配了哪些角色,这些角色可以访问哪些对象(以及哪种访问类型)?”同时要记住用户X 也是一个角色。

还请记住,“模式”和“数据库”是名称空间,而不是对象。表和列是对象。询问架构/数据库权限将不会很有用,因为这些不是应用特权的对象。

尝试这个实验:

  1. 设置测试数据库,并创建一个新的架构。将测试表添加到架构,然后创建一个测试用户。
  2. 查看pg_namespace,table_privileges,role_column_grants,column_privileges,role_table_grants的内容。
  3. 将模式的USAGE授予测试用户。再次查看这些表。
  4. 将SELECT授予表,再看一次相同的表。

您应注意,授予USAGE仅将测试用户添加到名称空间。授予select应该已经对实际的数据库对象(表)应用了权限。

您可能正在寻找这样的东西:

select * from information_schema.role_table_grants

,可能还有其他role_表:

information_schema.role_column_grants
information_schema.role_routine_grants
information_schema.role_table_grants
information_schema.role_udt_grants
information_schema.role_usage_grants