在django orm中的每个postgresql连接上执行set role

django-postgresql-setrole27的Python项目详细描述


django-postgresql-setrole27

这是jonas maurus的django postgresql setrole的python 2.7端口 包裹。

一个django应用程序,在每个到postgresql的连接上执行set role。 由Django打开。如果您使用外部身份验证,这将非常有用 经理喜欢Hashicorp Vault

postgresql的用户模型(“roles”)分配在数据库中创建的每个对象/ 表空间/模式是“所有者”。所述所有者是only用户,可以修改或 放下物体。这意味着从保险库租用的用户凭据 过期一段时间后,不能用于创建或迁移表,除非 每次都使用相同的用户名(这可能会达不到目的)。

解决方案是创建一个“所有者角色”。通俗地说“有 对数据库和inherit属性的所有必要权限 充当身份验证管理器中租用用户的“sudo”用户。全部 由身份验证管理器创建的用户将被分配此组 当它们连接到数据库时,执行“set role<;owner role>;”,从而 使所有创建的对象归所有者角色所有。

如何使用此django应用程序?

将PostgreSQL setrole27添加到已安装的应用程序。然后在settings.databases中添加

DATABASES={"default":{...,# other settings"SET_ROLE":"mydatabaseowner",}}

为什么必须设置角色?

inherit属性不是双向的。因此,如果分配了(用户)角色 它继承组权限的(组)角色,但组不 获取对用户角色创建的对象的任何权限。

所以你想要的是(组)所有者角色拥有一切。

我该怎么设置?

以超级用户的身份出现在您的外壳上

# --- create an admin role for Vault
# no create database
# encrypt password
# do not inherit rights
# can create roles
# not a superuser
createuser -D -E -I -l -r -S vaultadmin

# --- create an owner role for your database
# no create database
# encrypt password
# do not inherit rights
# can't create roles
# not a superuser
createuser -D -E -I -L -R -S mydatabaseowner
createdb -E utf8 -O mydatabaseowner mydatabase

然后配置保险库以创建如下角色:

$ vault mount -path=mydatabase-auth postgresql
$ vault write mydatabase-auth/roles/fullaccess -
{"sql": "CREATE ROLE \"{{name}}\" WITH LOGIN ENCRYPTED PASSWORD '{{password}}' VALID UNTIL '{{expiration}}' IN ROLE \"mydatabaseowner\" INHERIT NOCREATEROLE NOCREATEDB NOSUPERUSER NOREPLICATION NOBYPASSRLS;",
    "revocation_sql": "DROP ROLE \"{{name}}\";"}

然后,登录时由Vault创建的用户必须运行

SETROLE"mydatabaseowner";

这样可以确保所有创建的表和其他对象都属于 mydatabaseowner

许可证

版权所有(c)2016,Jonas Maurus 保留所有权利。

以源和二进制形式重新分配和使用,有无 如果满足以下条件,则允许修改:

  1. 重新发布源代码必须保留上述版权声明 条件列表和以下免责声明。
  2. 二进制形式的再分配必须复制上述版权声明, 文件中的条件列表和以下免责声明 和/或分发时提供的其他材料。
  3. 无论是著作权人的名字还是作者的名字 可用于认可或推广从本软件衍生的产品 未经事先书面许可。

本软件由版权所有者和贡献者“按原样”提供,并且 任何明示或默示保证,包括但不限于 对特定用途的适销性和适合性的保证 否认。在任何情况下,版权持有人或贡献者均不承担责任 对于任何直接的、间接的、偶然的、特殊的、惩戒性的或间接的 损害赔偿(包括但不限于购买替代货物或 但是 根据任何责任理论,无论是在合同中,严格责任, 或因使用而引起的侵权行为(包括疏忽或其他) 即使被告知有可能造成这种损害。

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
图像处理Java 8 ImageIO在Linux中无法正确读取JPEG   spring如何用Java 1.4兼容版本替换@Resource注释   java Http请求参数类型传播   在web浏览器中看不到Java Maven Tomcatplugin web应用程序   jvm在Java中使用直接内存的目的是什么?   如何从列表转换为字符串java   java setAdapter gridview发送上下文   SwingJava。方法上的lang.NullPointerException   java什么是shell脚本、makefile和ant文件   当使用getGraphics()方法时,java JPanel图形会闪烁   java如何将迭代转换为递归?   java为什么我的抽屉菜单在同一个XML上有ConstraintLayout时没有响应?   java如何在图像上画一个圆?   Android studio:Rabbitmq:Error:java。lang.ClassNotFoundException:类io。千分尺。果心仪器找不到仪表注册表