Django + PostgreSQL:创建数据库(授予哪些权限)

时间:2017-02-05 08:35:01

标签: django postgresql web

我在互联网上找到的所有东西都是这样的: postgreSQL.app : create database

https://www.digitalocean.com/community/tutorials/how-to-use-postgresql-with-your-django-application-on-ubuntu-14-04

所以,第一个链接说我们必须像这样为Django创建一个数据库:

CREATE USER testfor_psl_user WITH password 'pass';
CREATE DATABASE testfor_psl ENCODING 'UTF8' TEMPLATE template0 OWNER testfor_psl_user;

第二个非常相似:

CREATE DATABASE myproject;
GRANT ALL PRIVILEGES ON DATABASE myproject TO myprojectuser;

在这两种情况下,我们都可以看到所有权限都授予用户。

为什么他们这样做? Django使用两个权限:select和insert。 授予所有权限并不安全。

我现在想的是: 1)使postgres成为数据库的所有者。 2)创建myprojectuser并授予他选择和插入权限。

您是否可以对此问题发表评论并分享您创建数据库的经验。 你能指出一个有用的链接吗?

1 个答案:

答案 0 :(得分:3)

如果要使用migrations等所有功能,Django需要对底层数据库的完全访问权限。因此,建议在文档中授予所有权限。

您可能希望限制访问权限的用例 - 例如如果您有一个非托管架构,它与其他应用程序共享。但这很特别。这些主题不在文档中涵盖,而是作为DBA留给您。

如果您知道django需要哪些权限 - 只需按照您的喜好授予它们。

如果您不知道需要哪些权限,请使用以下过程:

  1. 使用完全授予的用户在开发环境中设置项目。
  2. 创建新用户,但不授予任何权限
  3. 切换你的django以使用该用户
  4. 启动应用程序使用其功能并等待SQL错误。
  5. 授予必要的权限
  6. 重复步骤4.和5.只要一切正常 - 将所有授权写入一个sql文件,以便稍后重现。当然,如果您已经知道需要,可以通过在前面授予内容来加速这一过程。

    您很可能需要

      几乎在任何情况下
    • SELECT
    • INSERT如果用户应该能够创建模型
    • UPDATE如果用户应该能够修改模型
    • DELETE如果用户应该能够删除模型
    • REFERENCES如果用户创建具有外键约束的模型到另一个模型,则另一个模型需要REFERENCES

    只要您知道,申请时需要什么。当您只提供对数据的可读访问时,可能SELECT就足够了。

    当你这样工作时,你应该有一个单独的用户,用于部署,它具有执行迁移的适当权限(在这种情况下授予所有权限是有意义的)。这适用于每个版本,应该是自动IMO。