mysql 绑定内网ip 允许指定ip访问 新增用户 授权 修改密码

  1. 为什么这么做?
  1. 我们的服务器是阿里云服务器,刚开始安装mysql是没有做什么特殊的设置,只开放了默认的3306端口,密码使用最简单的root 账号,权限也没有做设置,对外暴露公网ip,所有人都可以访问,非常不安全
  1. 要做什么?
  1. 需要在同一个局域网内的多台阿里云服务器只能使用内网地址相互访问,外面地址禁用
  2. 为了便于开发测试,指定公司公网ip地址可以访问
  3. 修改端口号,设置比较少用的端口,
  4. 针对不同的需要使用不同的用户和权限,避免多人使用一个账号
  1. 怎么做

解决需要在同一个局域网内的多台阿里云服务器只能使用内网地址相互访问,外面地址禁用

  1. 查找my.cnf 配置文件
1、Windows下MySQL的配置文件是my.ini,一般会在安装目录的根目录。

2、Linux下MySQL的配置文件是my.cnf,一般会放在/etc/my.cnf,/etc/mysql/my.cnf。如果找不到,可以用find命令查找。

3、Linux用rpm包安装的MySQL是不会安装/etc/my.cnf文件的

至于为什么没有这个文件而MySQL却也能正常启动和作用,有两个说法:
第一种说法,my.cnf只是MySQL启动时的一个参数文件,可以没有它,这时MySQL会用内置的默认参数启动;
第二种说法,MySQL在启动时自动使用/usr/share/mysql目录下的my-medium.cnf文件,这种说法仅限于rpm包安装的MySQL。

解决方法:只需要复制一个/usr/share/mysql目录下的.cnf文件到/etc目录,并改名为my.cnf即可
这个命令可以查询mysql执行配置文件的路径
sudo mysql --help | grep my.cnf
  1. 修改配置文件
vim /etc/my.cnf
    
   [mysqld]
   basedir=/usr/local/mysql/           #使用该目录作为根目录(安装目录)
   datadir=/usr/local/mysql/data/		 #数据文件存放的目录
   character_set_server = utf8				#设置服务器字符编码
   
   port = 3307			#MySQL监听端口
   
   # MySQL绑定IP 添加下面一行,指定绑定的地址,#内网直接都可以,外网也可以(不清楚为什么)
   bind-address=172.16.2.35		#启用本行: 阿里云内网直接可以访问,但外网也可以!
  
   #bind-address=127.0.0.1		#启用本行:只能本机登录
  1. 重启
service mysqld restart	#重启
service mysqld status	#查看启动状态
netstat -tunlp      #查看绑定端口

为了便于开发测试,指定公司公网ip地址可以访问

  1. 这条方法没有昨天,于是直接修改mysql服务器本身的权限体系,限制登录的ip了,注意我在这里把 bind-address注释了
mysql -u root -p
按提示输入密码

2. use mysql;
3. select host ,username from user;
4. 设置root用户权限 
#设置所有外网ip访问
GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'passsword' WITH GRANT OPTION;

#设置指定公网ip访问
GRANT ALL PRIVILEGES ON *.* TO 'root'@'39.83.36.204' IDENTIFIED BY 'passsword' WITH GRANT OPTION;

#设置允许指定内网ip访问
GRANT ALL PRIVILEGES ON *.* TO 'root'@'172.16.2.28' IDENTIFIED BY ''passsword' WITH GRANT OPTION;

5. 刷新权限
flush privileges;

针对不同的需要使用不同的用户和权限,避免多人使用一个账号 (5.7)

1、新建用户
  MySQL -u root -p 
  CREATE USER 'test'@'localhost'  IDENTIFIED BY '1234'; #本地登录 
  CREATE USER 'test'@'%'  IDENTIFIED BY '1234'; #远程登录 
  quit 
  mysql -u test -p #测试是否创建成功
  2. 授权test用户拥有testDB数据库的所有权限
  grant all privileges on testDB.* to “test”@”localhost” identified by “1234”; 
  flush privileges; #刷新系统权限表
  3.指定部分权限给用户:
  grant select,update on testDB.* to “test”@”localhost” identified by “1234”; 
  flush privileges; #刷新系统权限表
  4.授权test用户拥有所有数据库的某些权限
  grant select,delete,update,create,drop on . to test@”%” identified by “1234”; #”%” 表示对所有非本地主机授权,不包括localhost
  flush privileges;
  5.修改指定用户密码
  update mysql.user set authentication_string=password(“新密码”) where User=”test” and Host=”localhost”; 
  flush privileges;