1045,“访问被拒绝用户'用户名'@'非本地'(使用密码:是)”

时间:2015-11-29 02:32:11

标签: python mysql

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

enter image description here

我正在尝试从服务器B登录到serverA上的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)")

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

感谢您的帮助

1 个答案:

答案 0 :(得分:3)

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

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'@'%'
+----------------------------------------------------------------------

使用密码drew_saturday创建新的登录friday987。 他拥有数据库 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';

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

有时,管理员希望只允许访问数据库中的少数几个表(不是其中的所有表)。手册是必读的。

最后一件事。 'drew_saturday'@'%'是一个与'drew_saturday'@'NOT-local'不同的登录名(借用你的标题)。它们是具有不同权限的不同登录。这是我在那里写的第一件事。