Django:mysql:1045;用户的访问被拒绝

Django:mysql:1045;用户的访问被拒绝,mysql,django,mysql-error-1045,Mysql,Django,Mysql Error 1045,我的整个设置在本地计算机上运行了几个月。 我现在正在远程站点上安装。 创建了一个新的mysql数据库,创建了一个新用户(“someuser”),并给了它完全的授权,就像这样- 授予在上的所有特权。通过“somepassword”和“GRANT”选项标识为“someuser”@“localhost” 我已经使用“python manage.py syncdb”同步了数据库,并创建了正确的表。 My settings.py具有相同的用户 但是,当我试图通过应用程序登录用户时,它会访问数据库,我在日志

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

授予在上的所有特权。通过“somepassword”和“GRANT”选项标识为“someuser”@“localhost”

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

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

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

我通过mysql(与django安装在同一个框中)登录并检查了授权,它正确地显示了-

补助金someuser@localhost
授予**上的所有特权使用授权选项将密码“*TheAltedPasswordOverhere”标识为“someuser”@“localhost”

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


有没有关于什么地方可能出错的指针?

我这样做是为了一个名为foo_db的数据库:

create database foo_db;
create user foo_user identified by 'foo_password';
grant all on foo_db.* to 'foo_user'@'%';
flush privileges;
@马特布朗:

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

对于我来说,
/etc/graphite/local_settings.py
中的
数据库节有一个错误的值,对于主机来说有:
'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
成功运行。

在我的例子中,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',
    }
}

如果在settings.py中MySQl python为64位,则将端口号更改为“3307”,然后仅在Windows和MySQl 5.7 django中发生连接

MySQl python 32位的“3306”

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

参考@duffymo的答案并更改最后一句话可能对我有用

create database foo_db;
create user foo_user identified by 'foo_password';
grant all on foo_db.* to foo_user@localhost identified by 'foo_password' with grant option;

据我所知,有些用户是DB来宾用户,而不是管理员用户,对吗

如果是这样,请从您的MySQL DB管理员用户处,授予someuser访问MySQL环境表“MySQL.user”的权限,如下所示:

mysql
user
上的SELECT授予“someuser”@“

对我来说,它奏效了,
Ivan

我使用这个配置,它可以工作

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

看来我所做的只是:

  • 删除我的数据库
  • 删除用户
  • 重新创建用户
  • 重新创建数据库
  • 授予此用户刷新权限

  • 然后它开始工作。

    我得到了以下错误:

    ModuleNotFoundError:没有名为“MySQLdb”的模块 django.core.exceptions.ImpropertlyConfigured:加载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',
        }
    }
    
    至:

    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',
        }
    }
    

    它开始工作。

    我的错误消息表明没有向数据库提供密码:

    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
    packages
    django pipeline browserify==0.4.1
    django管道==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'
    

    在此之前,我只是收到一些毫无意义的错误信息。

    谢谢你的帮助!我想原因是我先创建了用户,然后创建了数据库。这是非常奇怪的,因为当你看到补助金时,它说你有权使用它。这是误导。它应该也适用于在那个实例之后创建的任何东西。我实际上正在尝试做PlanetUnknow做过的同样的事情。我遵循了您的方法,但仍然得到相同的错误。
    grant all
    非常广泛,可能会强制使用安全线程。它可能有效,但不安全且有风险。也许考虑切换到更明确的权限?这里我已经准许访问“代码>本地主机< /COD>”,但是在我的代码>数据库中,URL < /代码>写的IP地址<代码> 127.0.0.1这是不一样的(安全性)。您还记得这是怎么工作的吗?谢谢您抽出时间来给出答案。正是因为像你这样乐于助人的同龄人,我们才能作为一个社区一起学习。以下是一些如何使您的答案更完美的提示:。请让我们知道对settings.py进行了哪些确切更改以使其正常工作。我们面临着同样的挑战issue@Shiva我补充了细节