最近在做公司项目的过程中,出现了这样的需求。第三方系统需要将数据写到我们的业务系统中,由于目前这些数据没有实际的使用场景,在讨论下,为简单快捷,选择第二种方案,即不书写接口,第三方系统通过数据库直接将数据写入到业务系统的数据库中。但是呢又不能将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. Spring解决泛型擦除的思路不错,现在它是我的了。

    你好呀,我是歪歪. Spring 的事件监听机制,不知道你有没有用过,实际开发过程中用来进行代码解耦简直不要太爽. 但是我最近碰到了一个涉及到泛型的场景,常规套路下,在这个场景中使用该机制看起来会很傻 ...

  2. Java Bean 注册对象

    注册对象 POM.xml <dependency> <groupId>cn.hutool</groupId> <artifactId>hutool-al ...

  3. Kubernetes(K8S) 安装Nacos,报 No DataSource set

    原因,数据库为 MySQL 5.7 需要在yaml加上参数 mysql.db.param: "characterEncoding=utf8&connectTimeout=1000&a ...

  4. .Net Core 跨域

    Startup.cs public void Configure(IApplicationBuilder app, IHostingEnvironment env) { app.UseCorsMidd ...

  5. VS 进行了无法编译的编辑

    Debug的时候碰到这个很烦人得重新运行 工具=>选项=>常规=>调试=>常规  将启用"编辑"并继续,勾取消掉

  6. SpringBoot Kafka SSL接入点PLAIN机制收发消息

    applycation.yml spring: # https://developer.aliyun.com/article/784990 kafka: bootstrap-servers: XXXX ...

  7. 比文件操作os库更优异的标准库pathlib

    pathlib 库从 python3.4 开始作为内置库,到 python3.6 已经比较成熟.相比于老式的 os.path 有几个优势: 老的路径操作函数管理比较混乱,有的是导入 os, 有的又是在 ...

  8. 谣言粉碎机?Python验证股市操盘口诀

    更多精彩内容,欢迎关注公众号:数量技术宅,也可添加技术宅个人微信号:sljsz01,与我交流. 经常炒股的朋友,应该都听说过这段操盘口诀: 早上大跌要买,早上大涨要卖 下午大涨不追,下午大跌次日买 早 ...

  9. Spring 学习笔记(3)控制反转 IoC

    本篇文章主要对 Spring 框架中的核心功能之一控制反转 (IOC,Inversion of Control)进行介绍,采用理论 + 实战的方式给大家阐述其中的原理以及明确需要注意的地方. 控制反转 ...

  10. mysql批量替换字段

    一.需求将数据库内指定的数据进行批量修改,可使用replace函数如IP:端口号,只改端口号的部分,将所有192.168.1.1:8001的数据8001的端口号修改为3001replace函数的用法如 ...