Django:mysql:1045,“用户拒绝访问

时间:2010-03-14 19:25:17

标签: mysql django mysql-error-1045

我的整个设置在我的本地计算机上运行了几个月 我现在正在远程站点上安装 创建了一个新的mysql数据库,并创建了一个新用户(“someuser”)并给予它完整的授权,如此 -

  

上授予所有特权。向'someuser'@'localhost'识别'somepassword'WITH GRANT OPTION;

我已使用“python manage.py syncdb”同步数据库并创建了正确的表。 我的settings.py有这个用户。

但是当我尝试通过应用程序登录用户并且它访问数据库时,我在日志中看到以下内容 -

  

(1045,“拒绝访问用户'someuser'@'localhost'(使用密码:YES)”)

我通过mysql登录(安装在与django相同的盒子上)并检查授权并正确显示 -

  

为某些用户授予@ localhost
  授予所有特权*。 *''someuser'@'localhost'通过密码识别'* thesaltedpasswordOverHere'WITH GRANT OPTION

我不想使用django的root用户/密码,因为它似乎不正确。

关于可能出错的指示?

9 个答案:

答案 0 :(得分:26)

对于名为foo_db:

的数据库,我这样做
create database foo_db;
create user foo_user identified by 'foo_password';
grant all on foo_db.* to 'foo_user'@'%';
flush privileges;

答案 1 :(得分:6)

在我的情况下,settings.py具有以下内容:

    DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql',
        'NAME': 'TRYDJANGO',
        'USERNAME':'user_trydjango',
        'PASSWORD':'passtry',
        'PORT':'3306',
        'HOST': 'localhost',
    }
}

如果我更改了“用户名”,则该功能正常工作。到用户':

    DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql',
        'NAME': 'TRYDJANGO',
        'USER':'user_trydjango',
        'PASSWORD':'passtry',
        'PORT':'3306',
        'HOST': 'localhost',
    }
}

答案 2 :(得分:1)

我的错误消息指示没有密码提供给数据库:

  

django.db.utils.OperationalError:(1045,“拒绝访问用户'mylocalusername'@'localhost'(使用密码:否)”)

manage.py应该从settings.py那里获取数据库访问凭据,这是一个特定的数据库用户(当然也包括该用户的密码)。通过向本地用户授予数据库登录权限来对我的错误消息做出反应是一种安全错误。

在我的情况下,settings.py出现了问题(我们正在将构建管道从django管道重组到webpack),我需要从settings.py中删除与管道相关的部分以进行修复。这是一个问题,为什么我没有收到关于settings.py问题的任何python错误消息,但是却收到了此错误,它不是真正问题的局部原因。该错误消息只是源问题的传递结果。修复manage.py后,照常从数据库设置中获取凭据,一切顺利。


在我们的示例中,我们在Webpack之前使用了django-pipeline(更具体地说是pip个软件包django-pipeline-browserify==0.4.1django-pipeline==1.6.8),所以一旦过渡,我只能从设置中删除这些行:

NODE_MODULES_BIN = '/home/myuser/sourcerepositorydir/node_modules/.bin/'
PIPELINE['SASS_BINARY'] = '/var/lib/gems/2.3.0/gems/sass-3.5.3/bin/sass'
PIPELINE['BABEL_BINARY'] = '{}{}'.format(NODE_MODULES_BIN, 'babel')
PIPELINE['BROWSERIFY_BINARY'] = '{}{}'.format(NODE_MODULES_BIN, 'browserify')
PIPELINE_BROWSERIFY_BINARY = PIPELINE['BROWSERIFY_BINARY']
PIPELINE['BROWSERIFY_ENV'] = {'NODE_ENV': 'development'}
PIPELINE['BROWSERIFY_ARGUMENTS'] = PIPELINE['BROWSERIFY_ARGUMENTS'] + ' --debug'

直到我收到无意义的错误消息。

答案 3 :(得分:0)

@ mattblang:

在这种情况下,如果主机也设置在实际使用的settings.py文件中,它会有所帮助。

对我而言/etc/graphite/local_settings.py DATABASES Stanzas的值不正确,因为HOST有: 'HOST': '127.0.0.1',

因为在syncdb命令的运行时期间它搜索了localhost,所以我将其更改为 'HOST': 'localhost',

现在它看起来像这样:

DATABASES = {
    'default': {
        'NAME': 'graphite',
        'ENGINE': 'django.db.backends.mysql',
        'USER': 'graphite',
        'PASSWORD': 'thepasswordyouchoose',
        'HOST': 'localhost',
        'PORT': '3306'
    }
}

...现在syncdb命令python manage.py syncdb成功运行。

答案 4 :(得分:0)

还要将端口号更改为' 3307'如果MySQl-python 64位在settings.py中,那么只有连接发生在Windows和MySql 5.7 django中。

' 3306'对于MySQl-python 32位

DATABASES = {
    'default': {
        'NAME': 'graphite',
        'ENGINE': 'django.db.backends.mysql',
        'USER': 'graphite',
        'PASSWORD': 'thepasswordyouchoose',
        'HOST': 'localhost',
        'PORT': '3307'
    }
}

答案 5 :(得分:0)

据我所知,某些用户是数据库访客用户,而不是管理员用户,对吗?

如果是这样,从您的MySQL数据库管理员用户,授予某些用户访问MySQL环境表' mysql.user'如下:

授予选择mysqluser至' someuser' @'%';

对我有用了, 伊万

答案 6 :(得分:0)

我使用此配置,它可以工作。

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql',
        'OPTIONS': {
            'read_default_file': '/etc/my.cnf',
        },
        #'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
    }
}

答案 7 :(得分:0)

似乎我所做的就是:

  1. 删除我的数据库
  2. 删除用户
  3. 重新创建用户
  4. 重新创建数据库
  5. 授予此用户冲洗权限
  6. 然后它开始工作。

答案 8 :(得分:0)

我遇到以下错误:

  

ModuleNotFoundError:没有名为“ MySQLdb”的模块   django.core.exceptions.ImproperlyConfigured:加载MySQLdb时出错   模块。您安装了mysqlclient吗?

解决方案编号01: 验证是否您的用户有权访问数据库并对其执行DDL和DML操作。

解决方案#02: 更改了 settings.py 文件

中的数据库配置

发件人:

DATABASES = {

'default': {
        'ENGINE': 'django.db.backends.mysql',
        'NAME': 'db_name',
        'USER': 'root'
    }
}

收件人:

DATABASES = {

'default': {
        'ENGINE': 'django.db.backends.mysql',
        'NAME': 'db_name',
        'USER': 'root',
        'PASSWORD': 'root',
        'HOST': 'localhost',   # Or an IP Address that your DB is hosted on
        'PORT': '3306',
    }
}

然后开始工作。