Django 登录错误:在 IIS 中“尝试写入只读数据库”

Posted

技术标签:

【中文标题】Django 登录错误:在 IIS 中“尝试写入只读数据库”【英文标题】:Django login error: “attempt to write a readonly database” in IIS 【发布时间】:2018-03-07 00:45:34 【问题描述】:

我在 IIS 10 中安装了 Django Web 应用程序,并将一些模型应用到 db.sqlite3,但是当我尝试登录 django/admin/login 时遇到错误:OperationalError at /admin/login/attempt to write a readonly database

我在sqlite3 error attempt to write a read only database、Django admin backend、attempt-to-write-a-readonly-database-django 中找到了解决此问题的方法,并且都提到要更改数据库文件夹的权限。我通过取消选择选项Read-only (Only applies to files in folder) 更改了该文件夹的权限,但似乎当我点击Apply 按钮时它没有做任何更改,因为我再次检查该文件夹并且它激活了Read-only 选项。

问题:

    有没有办法通过powershell中的任何命令终端更改此权限? 是否必须在 IIS 中执行任何额外步骤才能使 db.sqlite3 正常工作?

欢迎任何帮助!

【问题讨论】:

【参考方案1】:

对于您的第一个问题,您可以使用icacls。请看帖子How to grant permission to users for a directory using command line in Windows?

对于第二个问题,您需要在您的database 上提供write 权限。执行此操作的一种安全方法是使用与您在 Django 管理工具中登录机器相同的用户名。这样,如果您是 Web 应用程序的管理员,那么您是唯一可以直接访问 db.sqlite3 的用户。

不建议授予其他用户在db.sqlite3 中的写入权限,因为此数据库通常存储您的网络应用程序的正确功能所必需的数据,即,Django 模型存储在此数据库中,如果它们被更改那么您的网络应用程序可能会停止正常工作。

按照以下步骤解决Django登录错误尝试在IIS中写入只读数据库:

    在您的 Django Web 应用程序中创建超级用户:

    python manage.py createsuperuser
    

    用户名必须与您用于登录计算机的用户名相同。密码不必与您用于登录机器的用户名密码相同。

    搜索您的db.sqlite3 并单击鼠标右键,然后点击“属性”选项。

    选择“安全”选项卡,您将看到具有各自权限的组或用户名。通常,SYSTEM 和 Administrators 会检查所有权限,但除非您是其中之一,否则您必须修改 Users 组,因为在该组中是您用于登录计算机的用户名。 选择用户组并在Permissions for Users 框中验证写入选项在允许列中没有选中标记。 单击“编辑”选项,选择“用户”组,然后在“用户权限”框中选择“写入”选项。单击“应用”然后单击“确定”,然后再次单击“应用”和“确定”。 返回您的 Django 管理登录页面,输入您创建为超级用户的用户名。

【讨论】:

我该怎么做? @AlejandroBautistaRamos,您使用的是 Windows 对吗?? 是的,我试图在 powershell 中查找 chmod 等效项。 似乎我的chmod 在命令提示符中未被识别为内部或外部命令。 @AlejandroBautistaRamos,抱歉 chmod 在我认为的 Windows 中不可用。【参考方案2】:

我在 IIS 上遇到了这个问题,用这种方法解决了:

首先去这个link(从10:30到11:12观看)并创建组用户。

然后按照下图中的数字:

enter image description here 并且必须重启网络服务。

如果在此之后出现“无法打开数据库文件”错误,您可以打开此 link 并查看 @Arkady 的第四个解决方案。

.---------------------------------------------- ----------------------------------

@Arkady 说:我在 IIS 中打开 Sqlite 数据库时遇到问题

(0x80004005): unable to open database file unable to open database file

帮助我解决问题的是将应用程序池的“身份”更改为“本地系统”

应用程序池 -> DefaultAppPool(或您正在使用的其他池)-> 高级设置 -> 身份 -> 本地系统

希望它能节省一些人的时间......

.---------------------------------------------- --------------------------------------

【讨论】:

以上是关于Django 登录错误:在 IIS 中“尝试写入只读数据库”的主要内容,如果未能解决你的问题,请参考以下文章

Django + iis 上传文件时发生未显示页面,因为请求实体过大

为啥在 Django 的登录表单中显示错误?

iis此网站要求您登录 200分

有没有办法在 Django 中显示登录错误?

FTP 错误 530 用户无法登录

IIS7 中的身份池