gpt4 book ai didi

python - 在 sqlalchemy 中管理用户权限

转载 作者:太空狗 更新时间:2023-10-30 02:04:22 26 4
gpt4 key购买 nike

我有一个 sqlalchemy 脚本,它创建并使用代表许多用户连接的许多引擎实例。所有引擎都配置为指向同一个 postgres 数据库。

我有一个引擎 oSuperEngine 可以做 super 的事情。我有 Bob 的另一个引擎“oBobsEngine”。

现在我正在做这样的事情:

sSQL = "GRANT ALL PRIVILEGES ON TABLE \"NICE_TABLE\" to bob;"
oSuperEngine.execute(sSQL)

sSQL = "insert into \"NICE_TABLE\" (foo) values (bar)"
oBobsEngine.execute(sSQL) # ERROR HERE

并获得:

ProgrammingError: (ProgrammingError) permission denied for relation NICE_TABLE

这是为什么?

在 psql \dp 中告诉我 bob 从未被授予权限。如果我使用 super 用户登录 psql 并手动授予 bob 他的权限,那么一切正常。在这种情况下,我使用与通过 sqlalchemy 执行的命令完全相同的命令。

有什么地方没有正确冲洗吗? sqlalchemy 是否出于某种原因喜欢在尝试授予语句时静默失败?我怎样才能使它工作?

很抱歉没有包含更多代码,代码库有点复杂。事件的顺序已使用日志向我确认...如果您需要更多代码以理解我的问题,请告诉我。

一些日志

2014-03-10 10:07:24,767 - common.sqlalchemy_tools - DEBUG - connection string = "postgresql+psycopg2://super:password@localhost/db_name"
2014-03-10 10:07:24,767 - sqlalchemy.engine.base.Engine - INFO - BEGIN;
2014-03-10 10:07:24,767 - sqlalchemy.engine.base.Engine - INFO - {}
2014-03-10 10:07:24,767 - sqlalchemy.engine.base.Engine - INFO - GRANT ALL PRIVILEGES ON TABLE "MY_TABLE" to bob;
2014-03-10 10:07:24,767 - sqlalchemy.engine.base.Engine - INFO - {}
2014-03-10 10:07:24,768 - sqlalchemy.engine.base.Engine - INFO - COMMIT;
2014-03-10 10:07:24,768 - sqlalchemy.engine.base.Engine - INFO - {}
...
2014-03-10 10:07:24,804 - common.sqlalchemy_tools - DEBUG - connection string = "postgresql+psycopg2://bob:password@localhost/db_name"
2014-03-10 10:07:24,814 - sqlalchemy.engine.base.Engine - INFO - BEGIN;
2014-03-10 10:07:24,815 - sqlalchemy.engine.base.Engine - INFO - {}
2014-03-10 10:07:24,827 - sqlalchemy.engine.base.Engine - INFO - insert into "MY_TABLE" (stuff) values (other stuff);
2014-03-10 10:07:24,827 - sqlalchemy.engine.base.Engine - INFO - {}
2014-03-10 10:07:24,828 - sqlalchemy.engine.base.Engine - INFO - ROLLBACK

第一堆发生在 oSuperEngine 上,第二堆发生在 bob 的引擎上。错误看起来像:

ProgrammingError: (ProgrammingError) permission denied for relation MY_TABLE
'insert into "MY_TABLE" (stuff) values (stuff);' {}

最佳答案

我遇到了完全相同的问题。通过这样做修复:

sSQL = "GRANT ALL PRIVILEGES ON TABLE \"NICE_TABLE\" to bob;"
with oSuperEngine.begin() as conn:
conn.execute(sSQL)

http://docs.sqlalchemy.org/en/latest/orm/session_basics.html#adding-additional-configuration-to-an-existing-sessionmaker

关于python - 在 sqlalchemy 中管理用户权限,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22288581/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com