当前位置: 首页 > news >正文

杭州手机网站制作公司/网站制作论文

杭州手机网站制作公司,网站制作论文,山东省政府办公厅魏国主任简历,温州网站推广站建设在安装完成MySQL后,我们通常添加拥有相应权限的普通用户用来访问数据库。在使用普通用户本地登录数据库的时候,经常会出现怎么登录也无法登录的情况。 例如,我的MySQL中的用户为: mysql> SELECT User, Host, Password FROM mys…

在安装完成MySQL后,我们通常添加拥有相应权限的普通用户用来访问数据库。在使用普通用户本地登录数据库的时候,经常会出现怎么登录也无法登录的情况。

例如,我的MySQL中的用户为:

mysql> SELECT User, Host, Password FROM mysql.user;
+------+------------------+-------------------------------------------+
| User | Host             | Password                                  |
+------+------------------+-------------------------------------------+
| root | localhost        | *84BB5DF4823DA319BBF86C99624479A198E6EEE9 |
| root | liao.localdomain | *84BB5DF4823DA319BBF86C99624479A198E6EEE9 |
| root | 127.0.0.1        | *84BB5DF4823DA319BBF86C99624479A198E6EEE9 |
| GaMe | %                | *84BB5DF4823DA319BBF86C99624479A198E6EEE9 |
| root | %                | *84BB5DF4823DA319BBF86C99624479A198E6EEE9 |
|      | localhost        |                                           |
|      | liao.localdomain |                                           |
+------+------------------+-------------------------------------------+

 

 可以看到,我的数据库中有root用户,GaMe用户和匿名用户,GaMe用户的主机使用%代表所有主机。

GaMe用户的密码是'redhat', 匿名用户的密码为空

 

在本机使用GaMe账户登录数据库:

[root@liao ~]# mysql -uGaMe -p'redhat'
ERROR 1045 (28000): Access denied for user 'GaMe'@'localhost' (using password: YES)
[root@liao ~]# mysql -uGaMe -p'redhat'
ERROR 1045 (28000): Access denied for user 'GaMe'@'localhost' (using password: YES)

 

结果是无论如何都提示登录被拒绝。

再次使用GaMe账户登录数据库,这次我使用空密码尝试

[root@liao ~]# mysql -uGaMe -p
Enter password: 
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 59
Server version: 5.5.21-log Source distributionCopyright (c) 2000, 2011, Oracle and/or its affiliates. All rights reserved.Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.mysql> 

 

登录成功了,使用USER()和CURRENT_USER()两个函数查看所使用的用户。

USER()函数返回你在客户端登陆时指定的用户名和主机名。

CURRENT_USER()函数返回的是MySQL使用授权表中的哪个用户来认证你的登录请求。

mysql> SELECT USER(), CURRENT_USER();
+----------------+----------------+
| USER()         | CURRENT_USER() |
+----------------+----------------+
| GaMe@localhost | @localhost     |
+----------------+----------------+
1 row in set (0.00 sec)

 

这里发现,我使用'GaMe'@'localhost'这个账户登录数据库(因为在本地登陆时没指定主机,默认是以localhost登录),但是数据库使用的是''@'localhost'这个账户来进行登录认证,而''@'localhost'这个匿名用户是没有密码的,因此我输入空密码登录成功了。但是登录后,所对应的用户的匿名用户。

一般在MySQL在安装完毕后,我们使用mysql_install_db这个脚本生成授权表,会默认创建''@'localhost'这个匿名用户。正是因为这个匿名用户,影响了其他用户从本地登录的认证。

 

那么MySQL是如何进行用户身份认证呢?

 

通过Google查的资料,总结MySQL的简要认证算法如下:

  • 当用户从客户端请求登陆时,MySQL将授权表中的条目与客户端所提供的条目进行比较,包括用户的用户名,密码和主机。
  • 授权表中的Host字段是可以使用通配符作为模式进行匹配的,如test.example.com, %.example.com, %.com和%都可以匹配test.example.com这个主机。
  • 授权表中的User字段不允许使用模式匹配,但是可以有一个空字符的用户名代表匿名用户,并且空字符串可以匹配所有的用户名,就像通配符一样。
  • 当user表中的Host和User有多个值可以匹配客户端提供的主机和用户名时,MySQL将user表读入内存,并且按照一定规则排序,按照排序规则读取到的第一个匹配客户端用户名和主机名的条目对客户端进行身份验证。

 

排序规则:

  • 对于Host字段,按照匹配的精确程度进行排序,越精确的排序越前,例如当匹配test.example.com这个主机时, %.example.com%.com更精确,而test.example.com%.example.com更精确。
  • 对于User字段,非空的字符串用户名比空字符串匹配的用户名排序更靠前。
  • User和Host字段都有多个匹配值,MySQL使用主机名排序最前的条目,在主机名字段相同时再选取用户名排序更前的条目。
  • 因此,如果User和Host字段都有多个匹配值,主机名最精确匹配的条目被用户对用户进行认证。

 

了解了这个认证流程,就知道为什么GaMe登录失败了。

使用GaMe在本机登录数据时,不指定-h参数默认为localhost主机登录,而在MySQL中有两个匹配的条目:

  1. 'GaMe'@'%'
  2. ''@'localhost'

匿名用户能够匹配的原因上面说过,空字符串可以匹配所有的用户名,就像通配符一样。

根据MySQL认证时的排序规则,第一个条目的用户名排序更前,第二个条目的主机名更精确,排序更前。

而MySQL会优先使用主机名排序第一的条目进行身份认证,因此''@'localhost'被用户对客户端进行认证。因此,只有使用匿名用户的空密码才能登录进数据库。就会出现下面的情况了。

mysql> SELECT USER(), CURRENT_USER();
+----------------+----------------+
| USER()         | CURRENT_USER() |
+----------------+----------------+
| GaMe@localhost | @localhost     |
+----------------+----------------+
1 row in set (0.00 sec)

 

解决的方法:删除匿名用户(仅仅为了安全也有这个必要)

 

为什么root用户不会受影响,而只有普通用户不能从本地登录?

因为mysql_install_db脚本会在授权表中生成'root'@'localhost'这个账户。同样的,使用root登录MySQL时,'root'@'localhost'和''@'localhost'都能匹配登录的账户,但是根据排序规则,主机名相同,而用户名非空字符串优先,因此'roo'@'localhost'这个条目的排序更靠前。使用root本地登录是不会被匿名用户遮盖。

 

 

 

转载于:https://www.cnblogs.com/linuxnote/p/3780244.html

http://www.jmfq.cn/news/4824433.html

相关文章:

  • 自适应网站什么意思/百度友情链接
  • 建设网站装配式建筑楼房/百度有钱花人工客服
  • 小米市场营销案例分析/深圳sem优化
  • 股权变更要在工商局网站做吗/网站推广关键词工具
  • 搜索引擎手机动态网站制作设计/免费发广告的平台
  • 影视网站怎么做内链/软文广告例子
  • 仿牛商网营销型网站/精准引流客源的方法可靠吗
  • 中山币做网站公司/怎么建立自己的企业网站
  • 南宁市制作网站的公司/游戏特效培训机构排名
  • 福田做网站公司/今天重大新闻国内最新消息
  • 东莞市生态环境局/排名优化seo公司
  • 北京通州做网站/广州竞价外包
  • 公司网站包含哪些内容/品牌软文案例
  • 张家界网站建设/云盘搜索引擎入口
  • 做党政板报的网站/品牌广告图片
  • php网页制作教程/重庆seo扣费
  • 加盟餐饮网站建设/天津百度推广开户
  • 深圳响应式网站开发/网站运营推广选择乐云seo
  • 途牛网电子商务网站建设分析/网页搜索快捷键
  • ps做网站心得/深圳百度推广电话
  • 武汉个人做网站厂家/互动营销是什么
  • 做网站开发学什么内容/高级搜索入口
  • 购物网站开发的描述/自建站seo如何做
  • 网站接单平台/站长网站大全
  • 重庆川九建设有限责任公司官方网站/南宁seo优化
  • 宽屏大气企业网站源码/76人vs猛龙
  • jrs直播网站谁做的/丽水网站seo
  • 泉州网站建设技术公司/广州:推动优化防控措施落地
  • 怎么手动安装网站程序/新闻平台发布
  • 网上国网推广方案怎么写/福州seo管理