Login
网站首页 > 文章中心 > 其它

Mysql 8.0 实现创建用户,指定用户只能访问指定的数据库中的表

作者:小编 更新时间:2023-09-17 19:20:38 浏览量:84人看过

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


create user usertwo@'%' identified by '123qwe';

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



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

//将数据库的所有权限赋给这个用户
grant all privileges on dbTestErp.stsalesOrderitems to usertwo@'%' with grant option;

'%' - 所有情况都能访问
'localhost' - 本机才能访问
'192.16⑧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.16⑧0.1 with grant option;



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

【原因】由于MySQL ⑧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'@'%';



grant all privileges on dbTestErp.stsalesOrderitems to usertwo@'%' identified by '123456';

当在 MySQL ⑧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 '123qwe'' at line 1



flush privilege;


以上就是土嘎嘎小编大虾米为大家整理的相关主题介绍,如果您觉得小编更新的文章只要能对粉丝们有用,就是我们最大的鼓励和动力,不要忘记讲本站分享给您身边的朋友哦!!

版权声明:倡导尊重与保护知识产权。未经许可,任何人不得复制、转载、或以其他方式使用本站《原创》内容,违者将追究其法律责任。本站文章内容,部分图片来源于网络,如有侵权,请联系我们修改或者删除处理。

编辑推荐

热门文章