MySQL 开启与关闭远程访问

(1)通过MySQL用户去限制访问



权限系统目的:



MySQL基于安全考虑root账户一般只能本地访问,但是在开发过程中可能需要打开root的远程访问权限,今天介绍的就是如何开启和关闭Mysql远程访问



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;



开启远程访问:



- 更新用户

use mysql;



update user set host = "%" where user = "root";



flush privileges;



- 添加用户

use mysql;



insert into user(host, user, password) values("%", "root", password("yourpassword"))



grant all privileges on *.* to 'root'@'%' with grant option #赋予任何主机访问数据库权限



flush privileges;



关闭远程访问:

use mysql;



update user set host = "localhost" where user = "root" and host= "%";



flush privileges;



查看用户权限:

use information_schema;



select * from user_privileges;



查看当前mysql用户:

use mysql;



select user, host from user;



更新用户:

update mysql.user set password=password('新密码') where User="phplamp" and Host="localhost";



flush privileges;



删除用户:

DELETE FROM user WHERE User="phplamp" and Host="localhost";



flush privileges;



user host指定方法:

Host值可以是主机名或IP号,或’localhost’指出本地主机。

你可以在Host列值使用通配符字符“%”和“_”。

host值’%’匹配任何主机名,空Host值等价于’%’。它们的含义与LIKE操作符的模式匹配操作相同。例如,’%’的Host值与所有主机名匹配,而’%.mysql.com’匹配mysql.com域的所有主机。



ip地址例子:

192.0.0.0/255.0.0.0(192 A类网络的任何地址)

192.168.0.0/255.255.0.0(192.168 A类网络的任何地址)

192.168.1.0/255.255.255.0(192.168.1 C类网络的任何地址)

192.168.1.1(只有该IP)



mysql doc:



http://dev.mysql.com/doc/refman/5.1/zh/database-administration.html

(2)通过IpTable



iptables是一款防火墙软件。它在Ubuntu系统中是默认安装的。通常情况下,iptables随系统一起被安装,但没有对通信作任何限制,因此防火墙并没有真正建立起来。



iptables帮助:

sudo iptables -h #下面全部使用root用户调用指令



查看iptables:

iptables -L



Chain INPUT (policy ACCEPT)

target prot opt source destination



Chain FORWARD (policy ACCEPT)

target prot opt source destination



Chain OUTPUT (policy ACCEPT)

target prot opt source destination



可以看到,上面规则都是空的



允许已建立的连接接收数据:

iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT



开放指定的端口:



接下来,我们可以尝试开放 ssh 22端口,告诉iptables允许接受到所有目标端口为22的tcp报文通过

iptables -A INPUT -p tcp -i eth0 --dport ssh -j ACCEPT



执行上面的命令,一条规则会被追加到INPUT规则表的末尾(-A表示追加)。根据这条规则,对所有从接口eth0(-i指出对通过哪个接口的报文运用此规则)接收到的目标端口为22的报文,iptables要执行ACCEPT行动(-j指明当报文与规则相匹配时应采取的行动)。



开放80端口:

iptables -A INPUT -p tcp -i eth0 --dport 80 -j ACCEPT



这时,你再次去看看规则表中内容,你会发现有

iptables -L



Chain INPUT (policy ACCEPT)

target prot opt source destination

ACCEPT all -- anywhere anywhere state RELATED,ESTABLISHED

ACCEPT tcp -- anywhere anywhere tcp dpt:ssh

ACCEPT tcp -- anywhere anywhere tcp dpt:www



通过上述命令,我们已经代开了SSH和web服务的相应的端口,但由于没有阻断任何通信,因此所有的报文都能通过,所以接下来,我们就可以尝试阻断3306 mysql端口



阻断通讯:

iptables -A INPUT -p tcp -i eth0 --dport 3306 -j DROP



通过这样指令,就可以阻断任何访问3306报文,但是这样就有一个问题,就是可能连我们自己信任的主机都无法访问mysql了,所以,我们需要编辑下iptables,添加特定允许访问的主机

iptables -I INPUT 4 -p tcp -s ip_address -i eth0 --dport 3306 -j ACCEPT



好了,通过上面,我们把该指令插入到规则表里第四行,然后允许特定ip访问3306端口



Logging记录:



如果希望被丢失的报文记录到syslog中,最简单的方法可以这样做:

iptables -I INPUT 5 -m limit --limit 5/min -j LOG --log-prefix "iptables denied: " --log-level 7



保存设置:



机器重启后,iptables中的配置信息会被清空。您可以将这些配置保存下来,让iptables在启动时自动加载,省得每次都得重新输入。iptables-save和iptables-restore 是用来保存和恢复设置的。



先将防火墙规则保存到/etc/iptables.up.rules文件中

iptables-save > /etc/iptables.up.rules



然后修改脚本/etc/network/interfaces,使系统能自动应用这些规则(最后一行是我们手工添加的)。

auto eth0

iface eth0 inet dhcp

pre-up iptables-restore < /etc/iptables.up.rules



当网络接口关闭后,您可以让iptables使用一套不同的规则集。

auto eth0

iface eth0 inet dhcp

pre-up iptables-restore < /etc/iptables.up.rules

post-down iptables-restore < /etc/iptables.down.rules



技巧(Tips):



大多数人并不需要经常改变他们的防火墙规则,因此只要根据前面的介绍,建立起防火墙规则就可以了。但是如果您要经常修改防火墙规则,以使其更加完善,那么您可能希望系统在每次重启前将防火墙的设置保存下来。为此您可以在/etc/network/interfaces文件中添加一行:

pre-up iptables-restore < /etc/iptables.up.rules

post-down iptables-save > /etc/iptables.up.rules

MySQL 开启与关闭远程访问&&授权前需执行GRANT USAGE ON *.* TO 'cai'@'%' IDENTIFIED BY 'caigan2015';才能终端访问的更多相关文章

  1. MySQL 开启和关闭远程访问

    MySQL 开启和关闭远程访问权限 一.开启MySQL/MariaDB的远程访问权限 [root@localhost ~]# mysql -u root -p MariaDB [(none)]> ...

  2. mysql开启和关闭安全模式

    今天在进行数据库UPDATE的时候出了一个问题,我把非主键的字段当作UPDATE的条件(筛选条件)时,提示了如下的语句 Error Code: 1175. You are using safe upd ...

  3. centos mysql开启远程访问

    登录MySQL:  mysql -u root -p db; 如需修改密码,第一次:  mysqladmin -u root password NEWPASSWORD 已设置过:  mysqladmi ...

  4. mysql 无法远程访问(授权也没办法,确切的说是因为只绑定了127IP)

    默认状况下,出于安全考虑,mysql数据库屏蔽了远程访问功能. 然而在许多状况下,你需要在家或者从web程序去访问远端数据库服务器,这就相当麻烦了. 第一步: 激活网络设置你需要编辑mysql配置文件 ...

  5. linux下mysql开启远程访问权限 防火墙开放3306端口

    linux下mysql开启远程访问权限 防火墙开放3306端口 转载  2017-01-21   作者:JAVA-ANDROID 这篇文章主要为大家详细介绍了linux下mysql开启远程访问权限,防 ...

  6. 从Oracle转到Mysql前需了解的50件事

    我本人比较关心的几点: 1. 对子查询的优化表现不佳. 2. 对复杂查询的处理较弱 4. 性能优化工具与度量信息不足 12. 支持 SMP (对称多处理器),但是如果每个处理器超过 4 或 8 个核( ...

  7. mysql开启远程访问及相关权限控制

    开启mysql远程访问: 授予用户user 密码 passwd 所有权限 所有主机IP可访问 授权语句:Grant <权限> on 表名[(列名)] to 用户 With grant op ...

  8. 利用 bat 批量处理命令实现手动控制mysql /Oracle 服务的开启和关闭

    利用 bat 批量处理命令实现手动控制mysql /Oracle 服务的开启和关闭 因为最近在学习数据库的知识,主要学习的是oracle 数据库,然而好巧啊,java也是在学习,我们老师现在要我们做一 ...

  9. mysql严格模式的开启、关闭

    关于mysql严格模式的开启.关闭 由于项目中对一些默认值设置问题,以及种种原因,mysql数据库需要使用非严格模式开发(mysql最近的版本默认是开启严格模式的). linux下mysql服务下操作 ...

随机推荐

  1. 如何让div水平垂直居中

    引子 我们经常遇到需要把div中的内容进行水平和垂直居中.所以,这里介绍一种方法,可以使div水平居中和垂直居中. 代码: <!DOCTYPE html> <html lang=&q ...

  2. window.parent与window.openner

    window.parent与window.openner区别介绍 作者: 字体:[增加 减小] 类型:转载 今天总结一下js中几个对象的区别和用法,对这几个概念混淆的朋友可以看看 今天总结一下js中几 ...

  3. Linux-实用的工具

    1.Nethogs-查看进程占用带宽情况wget http://dl.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm # ...

  4. eclipse下gradle配置

    eclipse下gradle配置 这可真麻烦啊,一个项目把java的东西学习完了!这不,刚弄完maven又来了个gradle. http://gradle.org/gradle-download 1. ...

  5. C#.NET vs2010中使用IrisSkin4.dll轻松实现WinForm窗体换肤功能

    IrisSkin2.dll是一款很不错的免费皮肤控件,利用它可以轻松的实现WinForm窗体换肤 然而IrisSkin2.dll只能在.NET Faremwork 4.0以及之前的版本使用,所以要在V ...

  6. 详解MySQL大表优化方案( 转)

    当MySQL单表记录数过大时,增删改查性能都会急剧下降,可以参考以下步骤来优化: 单表优化 除非单表数据未来会一直不断上涨,否则不要一开始就考虑拆分,拆分会带来逻辑.部署.运维的各种复杂度,一般以整型 ...

  7. Redis Cluster 在PHP上的实践

    版本:redis3.0.3 redis——slot: 'master' => [ '192.168.1.55:7000'=>[0,5460], '192.168.1.55:7001'=&g ...

  8. flume ng 问题点

    1. 启动Flume,出现脚本错误 错误如下: bin/flume-ng: line 82: syntax error in conditional expression: unexpected to ...

  9. [转]使用 Minidumps 和 Visual Studio .NET 进行崩溃后调试

    本文关键字:Minidumps, Windows, SEH, VisualC, .NET 摘要 本文讲述了 minidumps 是怎样工作的.当你的程序崩溃的时候应该如何生成它们.以及如何在 Visu ...

  10. 【shell】if语句

    单分支: #!/bin/bash rate=$(df -h|grep vg_andon-lv_root |awk '{print $5}'| cut -d "%" -f1) #ec ...