为什么写这篇文章

最近由于学校课程原因,需要掌握数据库的用户创建等一系列操作。学校的课程是使用的大象,而我自己呢,最开始使用的是MySQL,前面的几次的要求都差不多,能完成。万万没想到,在这个用户创建这里出了大问题,由于跟老师要求用的数据库不相同,所以一些问题只能自己解决。。然后,我发现网上有些东西说的不是很明白,所以在这里我系统的说下这方面的几个问题。。希望刚刚来接触这方面的小伙伴能少走一点弯路。。我自己是怕了。。提前说一句:MySQL5.0与MySQL8.0有点不一样,具体哪不一样,下面再来详谈。。好了,进入正题。gogogo。

MySQL的新用户的创建

create user 'user'@'%' identified by 'password';

在这里说明几点:
1、user:新创建用户的用户名
2、%:新创建用户的允许登录IP,%允许在任何主机登录,localhost只允许在本地登录,IP允许登录的IP(eg.127.0.0.1)
3、password:新建用户的登录密码
4、这样创建之后,注意是没有任何权限的,只能登录,除此之外什么都干不了。
那怎么样有权限呢?接下来就是给新用户授予权限了。

MySQL给新用户授予权限

grant A_privileges on B_table_name C_user_name;

说明几点:
1、A_privileges:需要授予的权限,如:select,update,delete,insert等,如果赋予多个权限,中间用逗号隔开;如果要赋予全部权限,用:all privileges;
2、B_table_name:对哪张表赋予上述权限,这里有两个写法:如果你已经进入了你需要授权表的数据库,则B_table_name这样写 table 表名;如果你没有进入表的数据库,则需要加入数据库的名字:B_table_name这样写:数据库名.表名;
3、C_user_name:需要将上面对表的权限赋予给哪个用户。
!!!注意!!!
上面都是常规操作,我现在说说上面容易错的地方,容易被理解为玄学问题:
4、如果你使用了Navicat这个来对MySQL进行操作,记住记住,当你新建完用户之后,千万不要直接进行这个授权操作,否则会报错。如果你使用doc窗口的话,没什么问题,新建完用户可以直接授权。
用Navicat操作的话,新建完用户之后,记得断开连接,然后重新连接,再进行授权操作。。原因我个人认为有两个点:grant这个授权操作,会默认新建一个用户,就是你后面授权的操作。然而这个授权的同时新建用户在MySQL8.0里面是不被允许,所以会报错。。但这里可能就有人好奇了,前面不是新建了用户了么,我猜测是前面新建了,但没刷新,退出重新连接下数据库就行。。这个问题当时可是困惑我有一点段时间了,,后面无意中重新连接就行,,,希望后面的人小小注意一点。
5、第四点已经说了一些,grant这个操作默认会新建一个用户,这个在MySQL8.0里面不被允许,所以在MySQL8.0里面想要授权,必须先新建一个用户,再对这个用户授权。MySQL5.0里面则可以这么操作,授权的同时新建一个用户。
6、差点忘了,,授予权限之后,一定要记得刷新下权限,不然写了个寂寞:

flush privileges;

7、奥,还有一个我想单独说明下:update这个如果想单独授予某一个属性的话,这样写:update(属性)
8、!!!MySQL8.0没有public关键字,所以想一次性给所有用户授予权限不能使用public,那么public不行,总得有解决方法吧。。。没错,就是遍历所有用户,然后一个个单独授权。。。据说这个是MySQL8.0的安全机制。。。。。

MySQL将用户的权限回收

revoke A_privileges on B_table_name from user_name;

1、A_privileges:需要回收的权限,写法参考上面授权的写法
2、B_table_name:对应的表名,写法参考上面授权的写法
3、user_name:被回收权限的用户
4、照样,权限回收之后,刷新权限:

flush privileges;

MySQL角色的创建

这里说明一下:MySQL5.0没有角色这个概念,只有到了MySQL8.0才有角色的概念。即想要使用角色,必须是MySQL8.0以上。

create role role_name;

1、role_name:角色名
2、角色被创建时,也没有任何权限,需要面跟它授予,下面就说说这个

MySQL角色的授权

这个授权跟授予用户的方法一样。角色跟用户的区别在于:角色没有登录权限,而用户有,然后其它的跟用户操作基本一样。

grant A_privileges on B_table_name to C_role_name;

1、A_privileges:需要被授予的权限
2、B_table_name:对哪个表进行授权
3、C_role_name:需要对哪个角色进行授权。

将角色的权限给用户

grant role_name to user_name;

1、role_name:角色名
2、user_name:用户名
到达这一步之后,如果你去验证用户是否得到了相应的权限时候,你会发现,不能进行相应的操作。。。然后你去查看他们的权限,,他们确实得到了对应角色的权限。。。。
那么是为什么呢??
这个问题当时属于快把我人搞没了,怀疑人生。。。在抛弃MySQL的边缘。ahhh
最后,我无疑在别的人一遍博客里面看到一句话,激活角色。。。。。我透???原来在MySQL8.0创建角色的时候,角色默认是不被激活的,换句话说:你创建了角色,也授予了权限,但就是用不了hhh
下面是激活角色的两种方法:
(1)临时激活

SET DEFAULT role role_name TO user_name;

1、role_name:角色名,就是需要激活的角色
2、user_name:你把角色赋予给的哪个用户
(2)永久激活

SET global activate_all_roles_on_login=ON;

1、对所有角色都激活。。我个人偏向这个,毕竟角色创建了就是拿来用的,如果不激活,那创建它干嘛。。。。

回收用户从角色获得的权限

revoke role_name from user_name;

删除用户和角色

这个没什么需要说明的,直接给出语句
(1)删除角色

drop role role_name;

1、role_name:被删除角色的名字
(2)删除用户

drop user user_name;

1、user_name:需要被删除的用户名
说明一个点:如果有多个想要被删除的角色或者用户,中间用逗号隔开即可。

其它想说的几个

(1)查看角色或者用户的权限

show grants for role_name/user-name;

这个是根据不同授权来分类的,一行代表一个来源

结束了

基本也没什么了,需要注意的是,MySQL8.0里面没有public;只有MySQL8.0以上才有角色的概念;MySQL8.0创建用户之后,记得要激活用户。上面一些基本是我碰到的几个折磨人的地方hhh,知道了之后好像也没什么。。。
希望有人一样之前刚刚接触这方面的少走点弯路!!!
hhh

Logo

更多推荐