You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Django连接MySQL遇权限错误:Access denied for user 'root'@'lkocalhost'

解决Django连接MySQL的1698权限错误及localhost功能说明

一、解决django.db.utils.OperationalError: (1698, "Access denied for user 'root'@'localhost'")错误

这个错误的核心原因是MySQL 5.7及以上版本中,默认的root用户采用auth_socket插件认证(依赖系统用户权限,而非密码),但Django连接MySQL需要用密码认证,所以导致权限拒绝。以下是两种解决方式:

方式1:修改root用户的认证方式

  1. 打开终端,用系统权限登录MySQL:
    sudo mysql -u root
    
  2. 切换到MySQL的系统数据库:
    USE mysql;
    
  3. 修改root用户的认证插件为密码认证,并设置密码(替换your_password为你要设置的密码):
    ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'your_password';
    
  4. 刷新权限使设置生效:
    FLUSH PRIVILEGES;
    
  5. 修改Django项目的settings.py中的数据库配置,确保密码与上述设置一致:
    DATABASES = {
        'default': {
            'ENGINE': 'django.db.backends.mysql',
            'NAME': '你的数据库名',
            'USER': 'root',
            'PASSWORD': 'your_password',
            'HOST': 'localhost',
            'PORT': '3306',
        }
    }
    

方式2:创建专用的Django数据库用户(推荐,更安全)

不建议直接用root用户连接应用,创建专用用户更符合权限最小化原则:

  1. 同样先登录MySQL:
    sudo mysql -u root
    
  2. 创建新用户(替换django_user和user_password为自定义内容):
    CREATE USER 'django_user'@'localhost' IDENTIFIED WITH mysql_native_password BY 'user_password';
    
  3. 给新用户授予目标数据库的全部权限(替换your_django_db为你的Django数据库名):
    GRANT ALL PRIVILEGES ON your_django_db.* TO 'django_user'@'localhost';
    
  4. 刷新权限:
    FLUSH PRIVILEGES;
    
  5. 修改settings.py中的数据库配置为新用户信息即可。

二、localhost的功能说明

  • 本地回环地址映射:localhost是一个特殊的域名,默认对应IPv4的127.0.0.1和IPv6的::1,用于指向当前运行程序的本机。
  • 本地服务访问:当你在本机运行Django服务器、MySQL数据库等服务时,用localhost作为连接地址,就能直接访问这些本地服务,无需通过外部网络传输数据。
  • 通信特性:使用localhost连接MySQL时,MySQL会优先采用Unix socket协议(比TCP/IP更快);如果指定127.0.0.1则强制使用TCP/IP协议。
  • 安全与隔离:通过localhost访问的服务仅本机可见,不会暴露到外部网络,避免了外部未授权访问的风险。

内容的提问来源于stack exchange,提问作者OwoJama

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.07 18:46:16