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用户的认证方式
- 打开终端,用系统权限登录MySQL:
sudo mysql -u root - 切换到MySQL的系统数据库:
USE mysql; - 修改root用户的认证插件为密码认证,并设置密码(替换
your_password为你要设置的密码):ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'your_password'; - 刷新权限使设置生效:
FLUSH PRIVILEGES; - 修改Django项目的
settings.py中的数据库配置,确保密码与上述设置一致:DATABASES = { 'default': { 'ENGINE': 'django.db.backends.mysql', 'NAME': '你的数据库名', 'USER': 'root', 'PASSWORD': 'your_password', 'HOST': 'localhost', 'PORT': '3306', } }
方式2:创建专用的Django数据库用户(推荐,更安全)
不建议直接用root用户连接应用,创建专用用户更符合权限最小化原则:
- 同样先登录MySQL:
sudo mysql -u root - 创建新用户(替换
django_user和user_password为自定义内容):CREATE USER 'django_user'@'localhost' IDENTIFIED WITH mysql_native_password BY 'user_password'; - 给新用户授予目标数据库的全部权限(替换
your_django_db为你的Django数据库名):GRANT ALL PRIVILEGES ON your_django_db.* TO 'django_user'@'localhost'; - 刷新权限:
FLUSH PRIVILEGES; - 修改
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
相关产品推荐
相关产品推荐

