NodeJS学习

2019.9.23

如何通过本地Nodejs Web服务器远程连接阿里云服务器上的MySql数据库?

解决方案:

1. 远程服务器防火墙设置

     一开始我使用命令:service iptables status,来查看服务器防火墙的状态。后来发现出现问题

   iptables.service
   Loaded: not-found (Reason: No such file or directory)
   Active: inactive (dead)

   查看资料发现在Ubuntu中,为了简化iptables的规则添加,在上层封装了UFW的防火墙,但是这个只涉及到防火墙的规则,而不涉及到转发路由等功能。在Ubuntu中ufw命令管理Linux防火墙,旨在为用户提供易于使用的界面。 iptables命令 - 该命令用于设置,维护和检查Linux内核中IPv4包过滤规则的表。服务器中iptables的命令很少,很多常见命令都没有。

    常见的ufw命令如下:(以root用户登录)

       1.ufw status:查看状态

       2.ufw disable:卸载防火墙,并在启动时禁用防火墙

       3.ufw reload:重新加载防火墙

      参考文章:Ubuntu 16.04下操作iptables的技巧:https://help.ubuntu.com/community/IptablesHowTo

       4. 防火墙生成器:可以通过ufw添加防火墙规则,和删除规则。

         例如:ufw allow proto tcp from 192.168.0.0/16 to any port 22:允许来自指定IP网段的IP地址访问端口号22

                   ufw allow 80/tcp:允许所有的IP访问80端口

       5. 两种方法可以删除 UFW 规则:按规则编号、按规格说明;

       参考文章:ufw生成防火墙:https://yq.aliyun.com/articles/437171

                         如何查看和删除 UFW 防火墙规则:https://www.linuxidc.com/Linux/2019-08/159897.htm

通过以上一系列操作以后我可以为自己的防火墙设置指定的规则,主要是用于打开mysql数据库3306端口的准入。能够是远程服务器访问。

        除了上面通过ufw操作的方式,也可以通过iptables命令来实现防火墙的管理。如:

        命令: iptables -A INPUT -p tcp -i eth0 --dport 3306 -j ACCEPT

        作用:开放 mysql 3306端口,告诉iptables允许接受到所有目标端口为3306的tcp报文通过

       可以通过命令:iptables -L查看规则表中的内容。如下图所示:NodeJS学习_第1张图片

       出现红色线条所示语句,说明添加成功。

      参考文章:MySQL 开启与关闭远程访问:https://blog.csdn.net/duck_arrow/article/details/13621935

 

2.配置MySql数据库

     MySQL基于安全考虑root账户一般只能本地访问,但是在开发过程中可能需要打开root的远程访问权限, MySQL权限系统的主要功能是证实连接到一台给定主机的用户,并且赋予该用户在数据库上的SELECT、INSERT、UPDATE和DELETE权限。 附加的功能包括有匿名的用户并对于MySQL特定的功能例如LOAD DATA INFILE进行授权及管理操作的能力。

权限系统原理:

        MySQL权限系统保证所有的用户只执行允许做的事情。当你连接MySQL服务器时,你的身份由你从那儿连接的主机和你指定的用户名来决定。连接后发出请求后,系统根据你的身份和你想做什么来授予权限。MySQL在认定身份中考虑你的主机名和用户名字,是因为几乎没有原因假定一个给定的用户在因特网上属于同一个人。例如,从office.com连接的用户joe不一定和从elsewhere.com连接的joe是同一个人。MySQL通过允许你区分在不同的主机上碰巧有同样名字的用户来处理它:你可以对joe从office.com进行的连接授与一个权限集,而为joe从elsewhere.com的连接授予一个不同的权限集。
         阶段1:服务器检查是否允许你连接。 阶段2:假定你能连接,服务器检查你发出的每个请求。看你是否有足够的权限实施它。例如,如果你从数据库表中选择(select)行或从数据库删除表,服务器确定你对表有SELECT权限或对数据库有DROP权限。 如果连接时你的权限被更改了(通过你和其它人),这些更改不一定立即对你发出的下一个语句生效。MySQL权限是保存在cache中,这个时候就你需要执行
flush privileges;

         具体的管理用户权限的相关命令,可以查看下面这篇文章。

    参考文章:https://blog.csdn.net/duck_arrow/article/details/13621935

     2.1 在设置远程访问数据库的时候,需要设置的一些东西。

           修改数据库文件中的环回地址:bind_Address为0.0.0.0,配置文件中没有的话就添加进去。

           mysql的配置文件的配置: /etc/mysql/my.cnf ,该文件里面有可能会配置引用的文件。

          我的Mysql配置文件目录为:/etc/mysql/conf.d/mysqld.cnf。修改完环回地址以后,重启mysql服务。

参考文章:nodejs remote链接mysql数据库总结:https://www.cnblogs.com/freshcoder/p/5610261.html

 3.测试Nodejs远程连接服务器数据库  

     参考案例:https://www.npmjs.com/package/mysql

其余的参考文章为:

    Ubuntu下面MySQL的参数文件my.cnf浅析: https://www.cnblogs.com/kerrycode/p/9749096.html

    简述mysql数据库配置文件:https://www.cnblogs.com/anyux/p/8127581.html

    开启MySQL远程访问权限 允许远程连接:https://www.cnblogs.com/weifeng1463/p/7941625.html

   iptables防火墙规则的添加、删除、修改、保存:https://blog.csdn.net/educast/article/details/52093390

 

 

你可能感兴趣的:(Nodejs)