最近由于学校课程原因,需要掌握数据库的用户创建等一系列操作。学校的课程是使用的大象,而我自己呢,最开始使用的是MySQL,前面的几次的要求都差不多,能完成。万万没想到,在这个用户创建这里出了大问题,由于跟老师要求用的数据库不相同,所以一些问题只能自己解决。。然后,我发现网上有些东西说的不是很明白,所以在这里我系统的说下这方面的几个问题。。希望刚刚来接触这方面的小伙伴能少走一点弯路。。我自己是怕了。。提前说一句:MySQL5.0与MySQL8.0有点不一样,具体哪不一样,下面再来详谈。。好了,进入正题。gogogo。
create user 'user'@'%' identified by 'password';
在这里说明几点:
1、user:新创建用户的用户名
2、%:新创建用户的允许登录IP,%允许在任何主机登录,localhost只允许在本地登录,IP允许登录的IP(eg.127.0.0.1)
3、password:新建用户的登录密码
4、这样创建之后,注意是没有任何权限的,只能登录,除此之外什么都干不了。
那怎么样有权限呢?接下来就是给新用户授予权限了。
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的安全机制。。。。。
revoke A_privileges on B_table_name from user_name;
1、A_privileges:需要回收的权限,写法参考上面授权的写法
2、B_table_name:对应的表名,写法参考上面授权的写法
3、user_name:被回收权限的用户
4、照样,权限回收之后,刷新权限:
flush privileges;
这里说明一下:MySQL5.0没有角色这个概念,只有到了MySQL8.0才有角色的概念。即想要使用角色,必须是MySQL8.0以上。
create role role_name;
1、role_name:角色名
2、角色被创建时,也没有任何权限,需要面跟它授予,下面就说说这个
这个授权跟授予用户的方法一样。角色跟用户的区别在于:角色没有登录权限,而用户有,然后其它的跟用户操作基本一样。
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