我们除了使用 phpmyadmin
管理mysql数据库,还会用到 navicat
等。但,就是连接不上,提示 Host xxx.xxx.xxx.xxx
is not allowed to connect to this MariaDB server。这个是没有权限啊。
原来,刚装的mysql,由于执行安全初始化脚本(mysql_secure_installation)的时候,禁用root用户远程登录设置为true了。所以,下边有两种方法来解决这个问题。
- 改表法。
-
授权法。
以下操作,在linux下进行。
改表法
在 mysql库的user表中,你会看到有3条数据,其host字段的值有 127.0.0.1
,localhost
和 ::1
,user都是默认的root
。如果将host改成 %
,就可以了。但这样很不安全。别人通过ip和密码就很容易远程登录数据库了。
mysql -u root -p
// 输入密码
use mysql
select host, user from user;
这样你就会看到上边所说的表的情况。
update user set host='%' where user='root'
像上边这样的 user 是 root 的好几条记录,只需要一条记录。删除其他,保留一条记录,然后修改。或指定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