MySQL系列(十)--用户权限及远程访问
本文基于MySQL8.0,记录一下完整的远程访问的过程,以及这个过程中可能遇到的问题,MySQL运行在阿里云服务器,操作系统:CentOS 7.6 64位
顺便说下,买服务器还是要双十二这种拉新活动再买,用一个新的支付宝账号购买,能便宜一大半,不然双核4G就两千多块了。
这里默认防火墙已经向外暴露3306端口/关闭防火墙了,以及阿里云安全组配置暴露3306端口,在Windows通过Navicat测试连接
随便创建一个用户:
mysql> create user 'dev'@'localhost' identified by 'huluhulu'; //创建用户dev,只能在localhost使用,密码huluhulu
Query OK, 0 rows affected (0.00 sec) mysql> select host, user ,authentication_string, plugin from user; //查看user,host,加密后的字符串,以及加密类型
+-----------+------------------+------------------------------------------------------------------------+-----------------------+
| host | user | authentication_string | plugin |
+-----------+------------------+------------------------------------------------------------------------+-----------------------+
| % | root | *43C685FF9E03403DD721CF54B4E40B199DA06624 | mysql_native_password |
| % | test | *43C685FF9E03403DD721CF54B4E40B199DA06624 | mysql_native_password |
| localhost | dev | $A$005$6dH-H a.'^JNmbBkSYomGJK2180WHglWpm4mw.BIJGtuPX0qcBrOLIcMqC | caching_sha2_password |
| localhost | mysql.infoschema | $A$005$THISISACOMBINATIONOFINVALIDSALTANDPASSWORDTHATMUSTNEVERBRBEUSED | caching_sha2_password |
| localhost | mysql.session | $A$005$THISISACOMBINATIONOFINVALIDSALTANDPASSWORDTHATMUSTNEVERBRBEUSED | caching_sha2_password |
| localhost | mysql.sys | $A$005$THISISACOMBINATIONOFINVALIDSALTANDPASSWORDTHATMUSTNEVERBRBEUSED | caching_sha2_password |
| localhost | root | *43C685FF9E03403DD721CF54B4E40B199DA06624 | mysql_native_password |
+-----------+------------------+------------------------------------------------------------------------+-----------------------+
7 rows in set (0.00 sec)
创建用户之后,默认加密类型为caching_sha2_password
Navicat登录结果:

修改用户加密方式:
mysql> alter user 'dev'@'localhost'identified with mysql_native_password by 'huluhulu';
Query OK, 0 rows affected (0.00 sec) mysql> select host, user ,authentication_string, plugin from user;
+-----------+------------------+------------------------------------------------------------------------+-----------------------+
| host | user | authentication_string | plugin |
+-----------+------------------+------------------------------------------------------------------------+-----------------------+
| % | root | *43C685FF9E03403DD721CF54B4E40B199DA06624 | mysql_native_password |
| % | test | *43C685FF9E03403DD721CF54B4E40B199DA06624 | mysql_native_password |
| localhost | dev | *43C685FF9E03403DD721CF54B4E40B199DA06624 | mysql_native_password |
| localhost | mysql.infoschema | $A$005$THISISACOMBINATIONOFINVALIDSALTANDPASSWORDTHATMUSTNEVERBRBEUSED | caching_sha2_password |
| localhost | mysql.session | $A$005$THISISACOMBINATIONOFINVALIDSALTANDPASSWORDTHATMUSTNEVERBRBEUSED | caching_sha2_password |
| localhost | mysql.sys | $A$005$THISISACOMBINATIONOFINVALIDSALTANDPASSWORDTHATMUSTNEVERBRBEUSED | caching_sha2_password |
| localhost | root | *43C685FF9E03403DD721CF54B4E40B199DA06624 | mysql_native_password |
+-----------+------------------+------------------------------------------------------------------------+-----------------------+
7 rows in set (0.00 sec)
因为可视化工具只支持旧的加密方式mysql_native_password,如果是caching_sha2_password是无法远程连接登录的
Navicat登录结果:

因为dev用户支持的是localhost登录,我们需要把他修改为远程访问机器的IP或者%,%代表任意地址
修改用户登录授权地址:
mysql> rename user 'dev'@'localhost' to 'dev'@'%';
Query OK, 0 rows affected (0.00 sec)
Navicat登录结果:

到这里我们实现访问登录,但是登录dev用户,我们发现只有一个数据库

查看dev用户权限:
mysql> show grants for 'dev'@'%';
+---------------------------------+
| Grants for dev@% |
+---------------------------------+
| GRANT USAGE ON *.* TO `dev`@`%` |
+---------------------------------+
1 row in set (0.00 sec)
dev用户的权限为USAGE,MySQL用户权限介绍如下:
-- 权限列表
ALL [PRIVILEGES] -- 设置除GRANT OPTION之外的所有简单权限
ALTER -- 允许使用ALTER TABLE
ALTER ROUTINE -- 更改或取消已存储的子程序
CREATE -- 允许使用CREATE TABLE
CREATE ROUTINE -- 创建已存储的子程序
CREATE TEMPORARY TABLES -- 允许使用CREATE TEMPORARY TABLE
CREATE USER -- 允许使用CREATE USER, DROP USER, RENAME USER和REVOKE ALL PRIVILEGES。
CREATE VIEW -- 允许使用CREATE VIEW
DELETE -- 允许使用DELETE
DROP -- 允许使用DROP TABLE
EXECUTE -- 允许用户运行已存储的子程序
FILE -- 允许使用SELECT...INTO OUTFILE和LOAD DATA INFILE
INDEX -- 允许使用CREATE INDEX和DROP INDEX
INSERT -- 允许使用INSERT
LOCK TABLES -- 允许对您拥有SELECT权限的表使用LOCK TABLES
PROCESS -- 允许使用SHOW FULL PROCESSLIST
REFERENCES -- 未被实施
RELOAD -- 允许使用FLUSH
REPLICATION CLIENT -- 允许用户询问从属服务器或主服务器的地址
REPLICATION SLAVE -- 用于复制型从属服务器(从主服务器中读取二进制日志事件)
SELECT -- 允许使用SELECT
SHOW DATABASES -- 显示所有数据库
SHOW VIEW -- 允许使用SHOW CREATE VIEW
SHUTDOWN -- 允许使用mysqladmin shutdown
SUPER -- 允许使用CHANGE MASTER, KILL, PURGE MASTER LOGS和SET GLOBAL语句,mysqladmin debug命令;允许您连接(一次),即使已达到max_connections。
UPDATE -- 允许使用UPDATE
USAGE -- “无权限”的同义词
GRANT OPTION -- 允许授予权限
USAGE就是无权限,我们现在给dev用户添加select权限,但是只针对数据库mysql的test表,查看权限
mysql> grant select on mysql.test to 'dev'@'%' with grant option;
Query OK, 0 rows affected (0.01 sec)
mysql> show grants for 'dev'@'%';
+---------------------------------------------------------------+
| Grants for dev@% |
+---------------------------------------------------------------+
| GRANT USAGE ON *.* TO `dev`@`%` |
| GRANT SELECT ON `mysql`.`test` TO `dev`@`%` WITH GRANT OPTION |
+---------------------------------------------------------------+
2 rows in set (0.00 sec)
Navicat登录结果:只显示一张表

修改用户加密方式:执行select语句是可以的,
SELECT * FROM test;
但是如果执行delete,或者其他DML以及DDL语句,是没有权限的
[SQL]DELETE FROM test WHERE Id=100;
[Err] 1142 - DELETE command denied to user 'dev'@'202.101.0.2' for table 'test'
后序为了测试方便,把权限赋予所有的数据库的所有表,以及添加update,select权限
mysql> grant select,update, delete on *.* to 'dev'@'%' with grant option;
Query OK, 0 rows affected (0.00 sec) mysql> show grants for 'dev'@'%';
+--------------------------------------------------------------------+
| Grants for dev@% |
+--------------------------------------------------------------------+
| GRANT SELECT, insert, UPDATE, DELETE ON *.* TO `dev`@`%` WITH GRANT OPTION |
| GRANT SELECT ON `mysql`.`test` TO `dev`@`%` WITH GRANT OPTION |
+--------------------------------------------------------------------+
2 rows in set (0.00 sec)
撤销dev用户delete权限:
mysql> revoke delete on *.* from 'dev'@'%';
Query OK, 0 rows affected (0.01 sec)
mysql> show grants for 'dev'@'%';
+---------------------------------------------------------------------------+
| Grants for dev@% |
+---------------------------------------------------------------------------+
| GRANT SELECT, INSERT, UPDATE, ALTER ON *.* TO `dev`@`%` WITH GRANT OPTION |
| GRANT SELECT ON `mysql`.`test` TO `dev`@`%` WITH GRANT OPTION |
+---------------------------------------------------------------------------+
2 rows in set (0.00 sec)
撤销dev用户所有权限:
mysql> revoke all privileges on *.* from 'dev'@'%';
Query OK, 0 rows affected (0.01 sec) mysql> flush privileges;
Query OK, 0 rows affected (0.00 sec)
PS:flush privileges命令只刷新你MySQL所在机器的权限,如果远程访问,你需要在远程操作所在的机器使用flush privileges进行
刷新权限,或者断开连接,并重新连接也会刷新
到此为止,关于一般用户权限控制的操作讲完了,包括远程访问可能遇到的问题,算是一个入门吧,希望对新手有所帮助。
MySQL系列(十)--用户权限及远程访问的更多相关文章
- HOSt ip is not allowed to connect to this MySql server, MYSQL添加远程用户或允许远程访问三种方法
HOSt ip is not allowed to connect to this MySql server 报错:1130-host ... is not allowed to connect to ...
- 打开order by的大门,一探究竟《死磕MySQL系列 十二》
在日常开发工作中,你一定会经常遇到要根据指定字段进行排序的需求. 这时,你的SQL语句类似这样. select id,phone,code from evt_sms where phone like ...
- 闯祸了,生成环境执行了DDL操作《死磕MySQL系列 十四》
由于业务随着时间不停的改变,起初的表结构设计已经满足不了如今的需求,这时你是不是想那就加字段呗!加字段也是个艺术活,接下来由本文的主人咔咔给你吹. 试想一下这个场景 事务A在执行一个非常大的查询 事务 ...
- 为什么不让用join?《死磕MySQL系列 十六》
大家好,我是咔咔 不期速成,日拱一卒 在平时开发工作中join的使用频率是非常高的,很多SQL优化博文也让把子查询改为join从而提升性能,但部分公司的DBA又不让用,那么使用join到底有什么问题呢 ...
- 为什么不建议给MySQL设置Null值?《死磕MySQL系列 十八》
大家好,我是咔咔 不期速成,日拱一卒 之前ElasticSearch系列文章中提到了如何处理空值,若为Null则会直接报错,因为在ElasticSearch中当字段值为null时.空数组.null值数 ...
- MySQL学习——管理用户权限
MySQL学习——管理用户权限 摘要:本文主要学习了使用DCL语句管理用户权限的方法. 了解用户权限 什么是用户 用户,指的就是操作和使用MySQL数据库的人.使用MySQL数据库需要用户先通过用户名 ...
- 聊聊MySQL的加锁规则《死磕MySQL系列 十五》
大家好,我是咔咔 不期速成,日拱一卒 本期来聊聊MySQL的加锁规则,知道这些规则后可以判断SQL语句的加锁范围,同时也可以写出更好的SQL语句,防止幻读问题的产生,在能力范围内最大程度的提升MySQ ...
- MYSQL添加远程用户或允许远程访问
1.用root用户登陆 格式:grant 权限 on 数据库教程名.表名 to 用户@登录主机 identified by "用户密码"; @ 后面是访问M ...
- MYSQL添加远程用户或允许远程访问三种方法
添加远程用户admin密码为password GRANT ALL PRIVILEGES ON *.* TO admin@localhost IDENTIFIED BY \'password\' WIT ...
随机推荐
- MapReduce的体系结构
- Amazon S3和EBS的区别
- UNIX环境高级编程------apue.h找不到
运行1-3代码时,出现问题:apue.h 没有找到问题 1.去此网址下载源码: http://www.apuebook.com/code3e.html 压缩包名为:src.3e.tar.gz 2.解压 ...
- 杂项-公司:Microsoft
ylbtech-杂项-公司:Microsoft 微软,是一家美国跨国科技公司,也是世界PC(Personal Computer,个人计算机)软件开发的先导,由比尔·盖茨与保罗·艾伦创办于1975年,公 ...
- Android基础控件TextView
1.常用属性 <TextView android:id="@+id/text11" //组件id android:layout_width="match_paren ...
- Android开发随笔
1.线性布局LinearLayout时,用到layout_weight权重的使用 控件的宽度(高度)=自身宽度(高度)+剩余空间的所占比例 剩余空间(可以为负值)=屏幕宽-所有控件宽度(高度)< ...
- Origin使用自定义函数拟合曲线函数
(2019年2月19日注:这篇文章原先发在自己github那边的博客,时间是2016年10月28日) 最近应该是六叔的物化理论作业要交了吧,很多人问我六叔的作业里面有两道题要怎么进行图像函数的拟合.综 ...
- PAT甲级——【牛客练习A1004】
题目描述 An inorder binary tree traversal can be implemented in a non-recursive way with a stack. For ex ...
- RESTful API -- rules
RESTful介绍 REST与技术无关,代表的是一种软件架构风格,REST是Representational State Transfer的简称,中文翻译为“表征状态转移”或“表现层状态转化”. 推荐 ...
- Microsoft store打不开,解决办法
1.打开电脑,点击左下角的图标开始,然后找到设置选项,也可以直接使用快捷键win+i: 2.在弹出的新页面中有很多选项功能,找到并且点击”网络和Internet“选项: 3.查看网络连接方式,如果是宽 ...