我在 mySQL 数据库中有一个这样的用户
我正在尝试从服务器 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/