28

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

授予所有特权TO 'someuser'@'localhost' IDENTIFIED by 'somepassword' WITH GRANT OPTION;

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

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

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

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

授予 someuser@localhost
GRANT ALL PRIVILEGES ON * 。* TO 'someuser'@'localhost' IDENTIFIED by PASSWORD '*thesaltedpasswordOverHere' WITH GRANT OPTION

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

关于什么可能是错误的任何指示?

4

11 回答 11

32

我对名为 foo_db 的数据库这样做:

create database foo_db;
create user foo_user identified by 'foo_password';
grant all on foo_db.* to 'foo_user'@'%';
flush privileges;
于 2010-03-14T19:28:21.787 回答
11

就我而言,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',
    }
}
于 2015-11-30T09:03:11.120 回答
2

据我了解 someuser 是数据库来宾用户,而不是管理员用户,对吗?

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

授予选择mysqluserTO 'someuser'@'%';

对我来说它有效,伊万

于 2017-10-09T09:04:37.563 回答
1

参考@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;
于 2017-05-08T07:17:47.863 回答
1

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

django.db.utils.OperationalError: (1045, "Access denied for user 'mylocalusername'@'localhost' (using password: NO)")

应该从manage.py中获取数据库访问凭据settings.py,这是特定的数据库用户(当然还有该用户的密码)。通过向本地用户授予数据库登录权限来响应我的错误消息是一个安全错误。

就我而言,存在问题settings.py(我们正在将构建管道从 django 管道重组为 webpack),我需要从我settings.py的修复中删除管道相关部分。这是一个问题,为什么我没有收到任何关于settings.py问题的 python 错误消息,而是我收到了这个错误,这不是真正问题的本地。该错误消息只是源问题的传递结果。一旦我修复了manage.py,就照常从 DATABASE 设置中获取凭据,一切都很顺利。


在我们的例子中,我们django-pipeline在 webpack 之前使用(更具体地说是pippackagesdjango-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'

在那之前,我只是收到无意义的错误消息。

于 2018-10-10T07:49:28.130 回答
0

@马特布朗:

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

对我来说,这是值错误的/etc/graphite/local_settings.py地方DATABASES Stanzas,对于 HOST 有: 'HOST': '127.0.0.1',

因为在 syncdb 命令运行时它搜索了本地主机,所以我将其更改为 'HOST': 'localhost',

现在它看起来像这样:

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

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

于 2015-09-24T15:14:50.387 回答
0

如果 MySQl-python 64 位在 settings.py 中,也将端口号更改为 '3307',然后仅在 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'
    }
}
于 2017-03-02T13:07:39.167 回答
0

我使用这个配置并且它有效。

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql',
        'OPTIONS': {
            'read_default_file': '/etc/my.cnf',
        },
        #'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
    }
}
于 2017-11-27T12:34:16.013 回答
0

看来我所做的只是:

  1. 删除我的数据库
  2. 删除用户
  3. 重新创建用户
  4. 重新创建数据库
  5. 授予此用户,刷新权限

然后它开始工作。

于 2018-02-22T01:56:13.233 回答
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',
    }
}

它开始工作了

于 2018-10-08T10:12:32.310 回答
0

我在 cpanel/mysql 中解决了我的问题,将用户添加到数据库我希望它有帮助

于 2021-09-01T11:31:21.303 回答