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 ...
随机推荐
- Ubuntu环境下使用Maven编译并打包Java项目
一.安装Maven 打开终端输入以下指令: $ mvn -v Apache Maven Maven home: /usr/share/maven Java version: 1.8.0_181, ve ...
- Oracle 从 dual 表中查询返回多行记录
同时查询出十条数据 ; 按照这个特性计算两个日期之间的工作日: select days, week as days, to_char(to_date(, 'day') as week from dua ...
- 倍增(在线)求LCA
这几天,提高B组总是有求LCA的题.由于我是蒟蒻,所以老是做不出来,直接上暴力.现在才弄懂. 没耐心看前面部分的大神门可以直接看后面. ST(RMQ)算法(在线)求LCA LCA是什么? 在一棵树上, ...
- Linux中要重启apache服务与在windows是有很大的区别,下面我们来介绍一下
在Linux中要重启apache服务与在windows是有很大的区别,下面我们来介绍一下常用的命令,需要的朋友参考下吧(http://www.hnkjlb.com) linux系统为Ubuntu 一. ...
- 廖雪峰Java13网络编程-3其他-1HTTP编程
1.HTTP协议: Hyper Text Transfer Protocol:超文本传输协议 基于TCP协议之上的请求/响应协议 目前使用最广泛的高级协议 * 使用浏览器浏览网页和服务器交互使用的就是 ...
- 廖雪峰Java11多线程编程-2线程同步-2synchronized方法
1.Java使用synchronized对一个方法进行加锁 class Counter{ int count = 0; public synchronized void add(int n){ cou ...
- mysql localhost可以连输入本机ip地址连接不了
Mysql 默认是没有开启这个权限的(只允许使用 host:localhost,或者 host:127.0.0.1),如果想用 host:192.168.1.* ,来访问mysql ,需要手动开启这个 ...
- VS2012 TFS 解决计算机改名无法连接TFS的问题
闲着没事改了下计算机名字,结果造成TFS无法连接. 报错讯息如下: ---------------------------Microsoft Visual Studio-------------- ...
- css3之文本text-overflow 与 word-wrap, word-break
CSS3 Text Overflow属性 CSS3文本溢出属性指定应向用户如何显示溢出内容 语法: text-overflow:clip | ellipsis 但是text-overflow只是用来说 ...
- RabbitMQ安装到使用入门
一.安装erlang1.sudo vim /etc/yum.repos.d/rabbitmq-erlang.repo,将如下内容复制粘贴进去后保存:[rabbitmq-erlang]name=rabb ...