我在互联网上找到的所有东西都是这样的: postgreSQL.app : create database
所以,第一个链接说我们必须像这样为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并授予他选择和插入权限。
您是否可以对此问题发表评论并分享您创建数据库的经验。 你能指出一个有用的链接吗?
答案 0 :(得分:3)
如果要使用migrations等所有功能,Django需要对底层数据库的完全访问权限。因此,建议在文档中授予所有权限。
您可能希望限制访问权限的用例 - 例如如果您有一个非托管架构,它与其他应用程序共享。但这很特别。这些主题不在文档中涵盖,而是作为DBA留给您。
如果您知道django需要哪些权限 - 只需按照您的喜好授予它们。
如果您不知道需要哪些权限,请使用以下过程:
重复步骤4.和5.只要一切正常 - 将所有授权写入一个sql文件,以便稍后重现。当然,如果您已经知道需要,可以通过在前面授予内容来加速这一过程。
您很可能需要
SELECT
INSERT
如果用户应该能够创建模型UPDATE
如果用户应该能够修改模型DELETE
如果用户应该能够删除模型REFERENCES
如果用户创建具有外键约束的模型到另一个模型,则另一个模型需要REFERENCES
。只要您知道,申请时需要什么。当您只提供对数据的可读访问时,可能SELECT
就足够了。
当你这样工作时,你应该有一个单独的用户,用于部署,它具有执行迁移的适当权限(在这种情况下授予所有权限是有意义的)。这适用于每个版本,应该是自动IMO。