MySQL数据库远程连接的若干问题
我想,如果没有银行等等这样的大型企业用户,那么MySQL一定是当之无愧的数据库市场使用率第一名,相对来说,第二名自然有第二名的道理,简单,易用,稳定,免费等等特点是MySQL普及的原因,但相对的,稳定,安全与oracle相比有所不如。
那么,MySQL的安全策略中,在数据库安装并初始化完毕后,用户的权限基本都是给的最小的,毫无疑问,其中root用户是比较特殊的,可以对MySQL中的所有库增删改查,但仅限本地的执行,而其余的新建普通用户必须通过root用户来进行赋权。服务本地化,权限的细化无疑对MySQL的安全性是一个提升。但,数据库的功能是数据的永久化,仅仅本地化是无法满足需求的,因此,我们可能会需要非本地连接数据库,也就是MySQL远程连接。实现远程连接有两种方法,下面介绍第一种方法,提权法:
MySQL的提权语句,我想应该好好看看。
GRANT 【权限内容】 ON 【库名】.【表名】 TO '【用户名】'@
'【IP地址】'
IDENTIFIED BY
'【密码】'
WITH GRANT OPTION;
逐字的解释下:
grant:英语内意思为同意,准许,许可,在MySQL中可以理解为提升权限
权限内容:增删改查,对应于MySQL内是 select(查)update(改)insert(增)delete(删),
all privileges代表所有权限
on 库名.表名:在哪个表,前述的权限
TO '【用户名】'@
'【IP地址】':到 哪个用户在哪个网段,ip地址如果换成% 代表所有网段,当然包括远程拉
DENTIFIED BY
'【密码】':由哪个密码来验证,确认前述动作
因此,远程连接数据库提升用户权限即可,@ip地址改成@%,自然代表突破了本地,可以远程。
以root用户远程连接为例:sql语句可以写成如下:
GRANT ALL PRIVILEGES ON mysql.user TO 'root'@'%' IDENTIFIED BY '123456' WITH GRANT OPTION;
这种方法,密码是同时更改的。indetified by‘’其中的密码可以任意,当然,用户也是同时建立了,并且权限还是很高的那种,这并不是安全的并且推荐的方法。
第二种方法:
内建表改值法,在MySQL中,有一个内建库,库名mysql,这是MySQL自带的内建库,其中有一张表,表名为user,其中存储有这个MySQL中的用户所有相关数据,比如,密码值,用户名,host,也就是该用户的使用域,在刚安装完毕MySQL后,例如,root用户,该用户在user表内的对应host值为localhost,也就是说本地,那么,我们将该root用户所对应的host值修改为%,表示所有host域都可以使用root,那么,我们就可以远程连接MySQL了。
因此,可做如下操作:
1。定位到mysql库。2.直接修改表内对应的root用户的host值 3.为了同步,不产生异常,刷新所有数据库。
mysql语句如下:
SHOW DATABASES;
USE mysql;
UPDATE user SET HOST='%' WHERE USER='root';#这句意思是更改user表中的root用户对应的host列的值为%。
#这时会报错。ERROR 1062 (23000): Duplicate entry '%-root' for key 'PRIMARY',不要慌,刷新权限表即可
FLUSH PRIVILEGES;#刷新所有表
无疑,这种方法是最安全的,因为权限并没有更改,造成权限的外溢,剩下的工作仅仅是需要更改用户的密码强度防止黑客撞库了。
当然,两种方法都需要root用户权限,记住,不是Linux系统root用户,是mysql内的root用户。
强烈推荐使用第二种方法,毕竟安全是第一的,第一种方法,权限混乱,密码混乱,虽然可以实现远程,但权限赋予的很大。