最近在做公司项目的过程中,出现了这样的需求。第三方系统需要将数据写到我们的业务系统中,由于目前这些数据没有实际的使用场景,在讨论下,为简单快捷,选择第二种方案,即不书写接口,第三方系统通过数据库直接将数据写入到业务系统的数据库中。但是呢又不能将ROOT用户分配给第三方,所以在数据库建立私有用户,指定用户只能访问指定的数据库中的表。

我们的数据库版本 MySQL 8.0.19

1、已有数据库就不进行创建啦,名称(dbTestErp)

2、创建用户并设置密码

create user usertwo@'%' identified by 'test%^*';

'%' - 所有情况都能访问
'localhost' - 本机才能访问
'192.168.0.1' - 指定 ip 才能访问

3、授予该用户访问该数据库时的权限

grant select,insert on dbTestErp.stsalesOrderitems to usertwo@'%' with grant option;

//将数据库的所有权限赋给这个用户
grant all privileges on dbTestErp.stsalesOrderitems to usertwo@'%' with grant option; '%' - 所有情况都能访问
'localhost' - 本机才能访问
'192.168.0.1' - 指定 ip 才能访问
例子:
1、grant all privileges on dbTestErp.stsalesOrderitems to usertwo@'%' with grant option;
2、grant all privileges on dbTestErp.stsalesOrderitems to usertwo@localhost with grant option;
3、grant all privileges on dbTestErp.stsalesOrderitems to usertwo@192.168.0.1 with grant option;

3.1注:最好不要将所有权限赋值给除root以外的用户

在MySQL8.0中,如果创建了用户并授予了 all 权限,那么即便用 root 用户也可能无法删除这些用户。会报 ERROR 1227 (42000): Access denied; you need (at least one of) the SYSTEM_USER privilege(s) for this operation

【原因】由于MySQL 8.0新增了一个SYSTEM_USER权限,如果创建用户并授予 all 权限时,就会赋予SYSTEM_USER权限,而root用户并没有这个权限,所以无法删除其他用户

【解决】授予root用户SYSTEM_USER,然后删除其他用户

show grants for 'root'@'%';
grant SYSTEM_USER on *.* to 'root'@'%';
flush privileges;
drop user 'test'@'%';

3.2、with grant option 可以省略,也可以加,但是加后会出现一些问题。

with grant option 这个选项表示该用户可以将自己拥有的权限授权给别人。注意:经常有人在创建操作用户的时候不指定with grant option 选项导致后来该用户不能使用GRANT命令创建用户或者给其它用户授权。

3.3、下面为MySQL 5.7 授权命令

grant all privileges on dbTestErp.stsalesOrderitems to usertwo@'%' identified by 'test%^*';

当在 MySQL 8.0.19 中使用上述命令时会出现下面的错误。查看数据库版本,高版本数据库不能按照上面的方式进行授权;
在高版本中修改用户权限,必须分两步来实现设置用户权限【先创建用户、再对该用户分配用户权限】 > 1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'identified by 'test%^*'' at line 1

4、刷新权限,否则可能无法立即生效。

flush privilege;

注:双方传数时,若是数据库的版本一个为5.x.x,另一个为8.x.x ,会报出下面错误

Client does not support authentication protocol requested by server; consider upgrading MySQL client.

  MySQL 8之前的版本中加密规则是mysql_native_password,而在MySQL 8之后,加密规则是caching_sha2_password,所以需要改变MySQL的加密规则

ALTER USER 'usertwo'@'%' IDENTIFIED WITH mysql_native_password BY 'test%^*';

Mysql 8.0前后,实现创建用户,指定用户只能访问指定的数据库中的表的更多相关文章

  1. oracle 创建一个用户,并且设定只能访问指定的对象

    出处:http://www.cnblogs.com/BetterWF/archive/2012/07/03/2574416.html 今天在开发接口时候,需要给接口开发公司提供一个ORACLE 用户, ...

  2. 如何让用户只能访问特定的数据库(MSSQL)

    背景 客户的SQL Server实例上有多个厂商的数据库,每个数据库由各自的进行厂进行商维护, 为了限定不同厂商的维护人员只能访问自己的数据库,现需要给各个厂商限定权限,让他们登录SQL Server ...

  3. C#:CodeSmith根据数据库中的表创建C#数据模型Model + 因为没有钱买正版,所以附加自己写的小代码

    对于C#面向对象的思想,我们习惯于将数据库中的表创建对应的数据模型: 但假如数据表很多时,我们手动增加模型类会显得很浪费时间: 这个时候有些人会用微软提供的EntityFrameWork,这个框架很强 ...

  4. mysql查看当前所有数据库中的表大小和元信息information_schema

    查看所有mysql数据库表和索引大小 mysql查看当前所有的数据库和索引大小 ,),' mb') as data_size, concat(,),'mb') as index_size from i ...

  5. mysql管理 ------查看 MySQL 数据库中每个表占用的空间大小

    如果想知道MySQL数据库中每个表占用的空间.表记录的行数的话,可以打开MySQL的 information_schema 数据库.在该库中有一个 TABLES 表,这个表主要字段分别是: TABLE ...

  6. 用SQL语句创建和删除Access数据库中的表;添加列和删除列

    用SQL语句创建和删除Access数据库中的表;添加列和删除列 Posted on 2009-08-11 13:42 yunbo 阅读(1240) 评论(0) 编辑 收藏 用SQL语句创建和删除Acc ...

  7. 两种获取MySql数据库中所有表的主键和外键约束信息的Sql语句

    最近在写Rafy底层的一些东西,在数据库方面把MySql数据库集成到里面去,里面有一个需求,需要获取非系统数据库,也就是我们自己建立的数据库中所有表的主键和外键元数据列表. 第一种方法:是网上的方法, ...

  8. iptables只允许指定ip地址访问指定端口

    首先,清除所有预设置 iptables -F#清除预设表filter中的所有规则链的规则 iptables -X#清除预设表filter中使用者自定链中的规则 其次,设置只允许指定ip地址访问指定端口 ...

  9. linux下通过iptables只允许指定ip地址访问指定端口的设置方法

    这篇文章主要介绍了linux下通过iptables只允许指定ip地址访问指定端口的设置方法,需要的朋友可以参考下. 首先,清除所有预设置 iptables -F#清除预设表filter中的所有规则链的 ...

  10. MySql 查询数据库中所有表名以及对比分布式库中字段和表的不同

    查询数据库中所有表名select table_name from information_schema.tables where table_schema='数据库名' and table_type= ...

随机推荐

  1. Java SpringBoot FTP 上传下载文件

    POM 添加依赖 <dependency> <groupId>cn.hutool</groupId> <artifactId>hutool-all< ...

  2. You are not using binary logging

    Error Code : 1381You are not using binary logging show variables like '%log_bin%'; 在mysqld配置项下面加上log ...

  3. VS IIS Express 启动项目后,绑IP让别人可以访问你的网站

    如何VS IIS Express 启动项目后,绑本机IP,让别人可以访问你的网站,方便Debug 一.修改iis配置 1.在web服务器执行后,会运行IIS Express,右击它选择显示所有应用程序 ...

  4. 比 Python 快得吓人,PyPy 极简入门

    众所周知 Python 有一个致命的缺点:速度比 C.C ++ 等语言慢很多.PyPy 恰好可以解决这一问题,它能够让 Python 代码运行得比 C 还快. 比如: import time from ...

  5. 【JAVA基础】MySQL配置

    mySQL配置 数据库连接 初始化配置 --创建用户 并授权 create user 'injasup'@'%' identified by 'supplier@2023#!'; GRANT SELE ...

  6. 在 HTML 页面中使用 React

    该方案使用场景:在html页面中使用react,主js文件index.js和其它非react功能使用js模块化的方式开发,适合轻量级中小型应用 index.html代码: 引入react.react- ...

  7. 《Function Programming in C++》

    说明 <Functional Programming in C++>书中代码练习测试以及一些笔记,部分代码需要用到C++20可以使用在线编译器编译代码 地址:https://coliru. ...

  8. Tomcat 9.0.26 高并发场景下DeadLock问题排查与修复

    本文首发于 vivo互联网技术 微信公众号 链接:https://mp.weixin.qq.com/s/-OcCDI4L5GR8vVXSYhXJ7w作者:黄卫兵.陈锦霞 一.Tomcat容器 9.0. ...

  9. 智慧运维:基于 BIM 技术的可视化管理系统

    前言 近年来,随着新一代信息技术的不断发展和应用,以及国家对于"新基建"布局的加速,我国地铁站信息化建设步入快速发展阶段.同时,地铁车站的空间环境也变得复杂多样.反映在地铁空间环境 ...

  10. MaxListenersExceededWarning:Possible EventEmitter memory leak detected.

    打包出现内存溢出 解决办法: