18

晚上我的前上司找到我, 说公司现在准备开发多租户架构的内容管理系统, 为了管理方便和负载均衡, 需要在多个WEB服务器(Apache)之间共享数据库服务器(MySQL), 而实现这个功能的时候需要开启数据库服务器的远程访问功能, 因为很可能Apache和MySQL并不是装在同一台服务器上. 虽然系统开发初期对这方面的要求还不是很高, 但是事先做好规划总是好的. 他希望我能尽快在技术上解决这个问题. 几番Google, 找到了基本的配置方法, 现分享如下:

内容目录

1. 服务器环境

测试机上的服务器环境为: MySQl服务器版本: 5.1.33-community, Apache服务器版本2.2.11(Win32), PHP版本5.2.9

2. 详细的配置步骤

连接本地服务器:打开命令行工具, 输入”mysql -u root -p”从本地连接MySQL服务器, 如果提示说”mysql是未识别的命令”, 请参照< >以便能够在命令行中使用mysql命令.

对远程连接授权: 使用GRANT命令对远程连接授权, 之后刷新MySQL授权缓存.
[sql]
GRANT ALL PRIVILEGES ON *.* TO ‘UserName’@'Domain||IP’ IDENTIFIED BY ‘Password’;
FLUSH PRIVILEGES;
[/sql]
有关GRANT命令的参考请参照本文的结尾部分. 该SQL语句中的几个关键点是: UserName表示被授权可以远程连接到MySQL服务器的用户名, Password则指对应的密码, 而Domain或者IP则是指被授权连接到共享数据库服务器的主机的域名(Domain)或者网络地址(IP), 举例来说, 假设WEB服务器的地址IP是192.168.1.120, 数据库共享服务器的地址IP是192.168.1.180, 使用RemoteUser和RemotePass作为用户名和密码, SQL语句如下:
[sql]
GRANT ALL PRIVILEGES ON *.* TO ‘RemoteUser’@'192.168.1.120′ IDENTIFIED BY ‘RemotePass’;
[/sql]

测试连通性: 接下来需要测定上述更改是否生效, 本人使用PHP程序来测定, 最简单的测试方式如下, 需要注意的是在测试的时候使用的DBHOST地址是上例中的192.168.1.180, 也就是数据库服务器的地址, 而不是GRANT语句中用到的那个地址:
[php]
// 测试是否授权成功
$connection = mysql_connect(‘192.168.1.180′, ‘RemoteUser’, ‘RemotePass’);
if ($connection) {
echo ‘远程数据库连接成功!’;
mysql_close($connection);
} else {
die(‘无法连接到远程数据库: ‘ . mysql_error());
}
[/php]

3. 安全方面的考虑

方案的安全隐患: 相信懂得SQL语句的同学很容易就能看出上述解决方案的安全缺陷, 执行授权命令之后, RemoteUser就能够对服务器上的所有数据库进行操作, 前面提到这个数据库服务器时共享的, 这样很可能因为恶意攻击或者开发者的不小心导致其他应用的数据库遭到破坏.

增强安全的方案: 针对存在的隐患, 可以采用如下的方法来减小不同的应用对整个数据库共享服务器的安全威胁: 为远程用户设置数据库级别的权限, 而不是服务器级别的, 举例来说, 192.168.1.120的主机上提供论坛服务, 需要访问的数据库为bbs, 这是可以使用如下命令:
[sql]
GRANT ALL PRIVILEGES ON bbs.* TO ‘BBSUser’@'192.168.1.120′ IDENTIFIED BY ‘BBSPass’;
[/sql]
当然, MySQL为我们提供了更加细粒度的权限控制, 可以具体到对数据的原子操作(Create, Update, Read, Delete), 实现这种粒度的控制, 安全性极高但是性能就会打折扣了, 这就需要管理员在两者之间做好平衡.

4. 参考资源

Tags: ,

随机日志

已经有13位客官在 《为MySQL数据库服务器启用远程连接》 留话了

  1. 1 活码网
    十月 21st, 2010 at 10:27 上午  

    学习中,谢谢

    [回复]

    tomato 回复:

    嘿嘿, 共同学习嘛~

    [回复]

  2. 2 求索阁
    十一月 3rd, 2010 at 9:19 上午  

    学习了~虽然个人小站用不上~

    [回复]

  3. 4 babyface
    十一月 7th, 2010 at 3:46 上午  

    纯踩。

    [回复]

  4. 5 破天私服
    十一月 8th, 2010 at 4:48 下午  

    确实有时候装完,外网链接不了

    [回复]

  5. 7 桂林网站建设
    十一月 25th, 2010 at 11:04 下午  

    第一次来拜读博主文章了,不错支持下!

    [回复]

  6. 10 eeffee
    十二月 26th, 2010 at 12:40 上午  

    默认安装应该可以远程链接吧

    [回复]

  7. 11 rlidc
    三月 19th, 2011 at 4:29 上午  

    学习了!谢谢!http://rlidc.com

    [回复]

  8. 12 xmlscript
    三月 31st, 2011 at 10:46 下午  

    看完之后,唯一的收获是放弃。
    改用了在db服务器上放置一套DB层接口比较好。

    [回复]

添加评论

Name (Required)
Mail (Required)
Website
Comment