向使用 Python 的每个人授予对 Vertica SQL 表的访问权限

Grant access to Vertica SQL Tables to everyone using Python

我正在使用 Python 脚本创建表并将数据插入其中。但是,只有我能够看到创建的表。我的团队成员无法查看它们。我该如何更改?

我可以包含哪些 Python 语句来向所有人授予访问权限?我正在使用 'vertica_python' 和 'sqlalchemy' 通过 Python.

连接到数据库

授予权限的语法是(参见GRANT (Table)):

GRANT SELECT ON TABLE <schema>.<table> TO <user>;

您可以在 table 上授予以下权限:

  • SELECT
  • INSERT
  • UPDATE
  • DELETE
  • REFERENCES
  • TRUNCATE

在授予 table 权限之前,您必须至少授予 table 架构的 USAGE 权限。

GRANT USAGE ON SCHEMA <schema> to <user>;

但是,如果这些 table 都在同一个模式中,您可以在模式级别向用户授予权限。为此,首先您必须 enable schema inheritance。然后将模式的权限授予用户。这样你就不需要在创建 table 时继续授予权限。

GRANT USAGE, SELECT ON SCHEMA <schema> TO <user>;

要授予诸如select特权之类的权限,需要您首先拥有此类权限。

根据 Vertica 的网站,授予 GRANT 的能力需要:

  • A superuser can grant privileges on all object types to other users.
  • An object owner can grant privileges on the object to other users using the optional WITH GRANT OPTION clause.

伪解

Depending on who needs access,您可以使用用户名、角色或 PUBLIC(全部)。

这里有一些示例语句 - 因为我自己没有使用过 vertica,所以我无法测试这个

GRANT SELECT on all tables in schema myschema TO [user/role/PUBLIC] WITH GRANT OPTION; 
GRANT PRIVILEGE

GRANT SELECT on schema.TABLENAME TO [user/role/PUBLIC] WITH GRANT OPTION; 
GRANT PRIVILEGE

it may also require GRANT USAGE on schema as well


正在处理 Python

的请求

并在 python 脚本中通过 sqlalchemy 处理它(注意事项请参阅 this question):

sSQL = "my sql grant statement(s)"
with oSuperEngine.begin() as conn:
    conn.execute(sSQL)
    conn.execute("COMMIT")