科技动态 | 硬件广场 | 下载基地 | 网络教室 | 网络冲浪 | 科学博览 | 移动时代 | 手机上网 | 桌面壁纸 | 科技商情 |
在你刚刚新安装了一个MySQL服务器,在你增加了一个允许连接MySQL的用户,用下列语句: GRANT ALL ON samp_db.* TO fred@*.snake.net IDENTIFIED "cocoa" 而fred碰巧在服务器主机上有个账号,所以他试图连接服务器: %mysql -u fred -pcocoa samp_db 为什么? 原因是:(本页内找)
先考虑一下mysql_install_db如何建立初始权限表和服务器如何使用user表记录匹配客户连接。在你用mysql_install_db初始化你的数据库时,它创建类似这样的user表: Host User
头两个记录允许root指定localhost或主机名连接本地服务器,后两个允许匿名用户从本地连接。当增加fred用户后, Host User
在服务器启动时,它读取记录并排序它们(首先按主机,然后按主机上的用户),越具体越排在前面: Host User root fred 有localhost的两个记录排在一起,而对root的记录排在第一,因为它比空值更具体。pit.snake.net的记录也类似。所有这些均是没有任何通配符的字面上的Host值,所以它们排在对fred记录的前面,特别是匿名用户排在fred之前。 结果是在fred试图从localhost连接时,Host列中的一个空用户名的记录在包含%.snake.net的记录前匹配。该记录的口令是空的,因为缺省的匿名用户没有口令。因为在fred连接时指定了一个口令,由一个错配且连接失败。 这里要记住的是,虽然用通配符指定用户可以从其连接的主机是很方便。但你从本地主机连接时会有问题,只要你在table表中保留匿名用户记录。 一般地,建议你删除匿名用户记录: mysql> DELETE FROM user WHERE User=""; 更进一步,同时删除其他授权表中的任何匿名用户,有User列的表有db、tables_priv和columns_priv。
摘自《晏子工作室》 晏子/文
|
版权所有 中华网 ![]() |