Write the Code. Change the World.

11月 15

我们除了使用 phpmyadmin 管理mysql数据库,还会用到 navicat等。但,就是连接不上,提示 Host xxx.xxx.xxx.xxxis not allowed to connect to this MariaDB server。这个是没有权限啊。

原来,刚装的mysql,由于执行安全初始化脚本(mysql_secure_installation)的时候,禁用root用户远程登录设置为true了。所以,下边有两种方法来解决这个问题。

  1. 改表法。

  2. 授权法。

以下操作,在linux下进行。

改表法

在 mysql库的user表中,你会看到有3条数据,其host字段的值有 127.0.0.1localhost::1 ,user都是默认的root。如果将host改成 % ,就可以了。但这样很不安全。别人通过ip和密码就很容易远程登录数据库了。

mysql -u root -p

// 输入密码
use mysql

select host, user from user;

这样你就会看到上边所说的表的情况。

update user set host='%' where user='root' 

像上边这样的 userroot 的好几条记录,只需要一条记录。删除其他,保留一条记录,然后修改。或指定host是localhost的修改。

授权法

使用 grant all privileges on 来更改用户对应某些库的远程权限

语法模板:

grant all privileges on 库名.表名 to '用户名'@'IP地址' identified by '密码' with grant option;
flush privileges;

库名:要远程访问的数据库名称,所有的数据库使用“
表名:要远程访问的数据库下的表的名称,所有的表使用“

用户名:要赋给远程访问权限的用户名称
IP地址:可以远程访问的电脑的IP地址,所有的地址使用“%”
密码:要赋给远程访问权限的用户对应使用的密码

示例:

// IP为180.169.127.118的电脑可以使用zhoulin用户,密码为02277852远程访问所有的数据库
GRANT ALL PRIVILEGES ON *.* TO 'zhoulin'@'180.169.127.118' IDENTIFIED BY '11111111' WITH GRANT OPTION;

flush privileges;

然后你再 select user,host from user; 就会看见多了一条 host 是 180.169.127.118,user 是 zhoulin 的记录。

这时,你用新创建的用户名和密码就可以远程登录mysql了。

注意

需要注意mysql的配置文件中的 bindaddress 的参数和 skip-networking 配置。

bindaddress : 设定哪些ip地址被配置,使得mysql服务器只回应哪些ip地址的请求),最好注释掉该参数或设置成为127.0.0.1以外的值
skip-networking : 如果设置了该参数项,将导致所有TCP/IP端口没有被监听,也就是说出了本机,其他客户端都无法用网络连接到本mysql服务器,所以应该注释掉该参数

如何找mysql的配置文件呢,只需要下边两步就可以了。

which mysqld
# /alidata/service/mariadb/mysql/bin/mysqld

/alidata/service/mariadb/mysql/bin/mysqld --verbose --help|grep -A 1 'Default options'
# /etc/my.cnf /etc/mysql/my.cnf ~/.my.cnf

all privileges

select,  # 查
insert,  # 插入
update,  # 更新
delete,  # 删除
create,  # 创建表
drop,    # 删除表
references,  # 外键
index,   # 索引
alter,   # 修改表结构
create temporary tables,  # 创建临时表
lock tables,  # 锁定
execute, # 执行存储过程权限
create view,  # 操作视图
show view,  # 查看视图
create routine, # 创建存储过程,函数
alter routine, # 修改存储过程,函数
event,  # event
trigger # trigger

mysql的all privileges 有以上这些。如果想对特定用户设置特定权限,可以单独设置。如:

GRANT SELECT, INSERT, UPDATE, DELETE, CREATE ON *.* TO 'zhoulin'@'180.169.127.118' IDENTIFIED BY '11111111' WITH GRANT OPTION;

创建用户和授权,也可以分开执行。

创建删除数据库

CREATE DATABASE IF NOT EXISTS xiangrong DEFAULT CHARSET utf8mb4 -- UTF-8 Unicode COLLATE utf8mb4_general_ci;  

DROP DATABASE xiangrong

参考

http://blog.csdn.net/louisliaoxh/article/details/52767209

https://www.cnblogs.com/abclife/p/5789808.html

http://7567567.blog.51cto.com/706378/710159

http://blog.csdn.net/bzfys/article/details/53332530

发表评论

电子邮件地址不会被公开。 必填项已用*标注