python - 1045, "Access denied for user ' 用户名'@'NOT-local' (使用密码: YES)"

标签 python mysql

我在 mySQL 数据库中有一个这样的用户

enter image description here

我正在尝试从服务器 B 登录到服务器 A 上的 mySQL,在 python 中,这是我当前正在做的事情,

db  = MySQLdb.connect(host='IP-address-server-A', user='username', passwd='my-password', db='my-database')

我收到此错误

(1045, "Access denied for user 'username'@'serverB' (using password: YES)")

发生了什么事,为什么我无法连接?

感谢您的帮助

最佳答案

显示服务器登录信息(请注意,% 表示任意主机或通配符)

select user,host from mysql.user;

+-----------+------------+
| user      | host       |
+-----------+------------+
| ajax_guy  | %          |
| joe7      | %          |
| joe8      | %          |
+-----------+------------+

显示特定用户存在哪些授权。

show grants for 'ajax_guy'@'%';

+----------------------------------------------------------------------
| Grants for ajax_guy@%                                              
+----------------------------------------------------------------------
| GRANT USAGE ON *.* TO 'ajax_guy'@'%' IDENTIFIED BY PASSWORD ...
| GRANT ALL PRIVILEGES ON `ajax_stuff`.* TO 'ajax_guy'@'%'           
| GRANT ALL PRIVILEGES ON `ajax_stuff`.`ajax_stuff` TO 'ajax_guy'@'%'
+----------------------------------------------------------------------

如何向特定登录名授予对特定数据库的访问权限。 下面我们向用户授予对 so_gibberish 数据库的所有权限。

grant ALL on so_gibberish.* to 'ajax_guy'@'%';

现在查看该登录的有效授权

+----------------------------------------------------------------------
| Grants for ajax_guy@%                                              
+----------------------------------------------------------------------
| GRANT USAGE ON *.* TO 'ajax_guy'@'%' IDENTIFIED BY PASSWORD ...
| GRANT ALL PRIVILEGES ON `ajax_stuff`.* TO 'ajax_guy'@'%'           
| GRANT ALL PRIVILEGES ON `so_gibberish`.* TO 'ajax_guy'@'%'         
| GRANT ALL PRIVILEGES ON `ajax_stuff`.`ajax_stuff` TO 'ajax_guy'@'%'
+----------------------------------------------------------------------

使用密码friday987创建一个新的登录名drew_saturday。 他拥有数据库 so_gibberish的所有权限,并且可以从任何主机登录(%)

grant ALL on so_gibberish.* to 'drew_saturday'@'%' IDENTIFIED BY 'friday987';

select user,host,password from mysql.user where user='drew_saturday';

+---------------+------+-------------------------------------------+
| user          | host | password                                  |
+---------------+------+-------------------------------------------+
| drew_saturday | %    | *4600ED0F377308959665877BD327D4788DC2071F |
+---------------+------+-------------------------------------------+

顺便说一句,上面的密码是经过哈希处理的密码。

注意:对于 MySQL 5.7,上面的命令是:

select user,host,authentication_string from mysql.user where user='drew_saturday';

Mysql 手册页Grant 。不要使用 grant ALL on * 向用户授予过多的权限。 ...。这适用于系统中的所有数据库。只需阅读手册即可,少即是多。

有时,管理员只想向登录名授予对数据库中少数表(而不是其中的所有表)的访问权限。必须阅读本手册。


最后一件事。 'drew_saturday'@'%' 与 'drew_saturday'@'NOT-local' 是不同的登录名(借用您的标题)。它们是具有不同权限的不同登录名。这就是我在上面写的第一件事的要点。

关于python - 1045, "Access denied for user ' 用户名'@'NOT-local' (使用密码: YES)",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33978772/

相关文章:

python - Pandas 。复制多索引级别

python - 设计异常继承的标准方法是什么?

python - 如何在运行时获取应用程序 ID

python - xgboost 二元逻辑回归

PHP/MySQL : Database empties when I use a variable in the WHERE condition of the last mysql_query

php - 我有一个连接到 MySQL 数据库的 php 登录脚本,但我的 else 语句未运行

python - 从 GTK 弹出菜单中获取焦点

mysql - 如何在包含分组函数的 where 子句中引用别名列

mysql - spring mvc不会连接到不同计算机上的mysql数据库

MySQL 基本命令