Navicat for MySQL给用户赋予角色

创建用户、角色以及赋予相应的权限:

创建用户有两种方法,第一种是Navicat可视化界面创建,第二种是sql语句创建,下面分别介绍一下:

  1. 方法一:

点击【用户】:
在这里插入图片描述

点击【新建用户】
在这里插入图片描述

用户名自己确定,主机可以填写localhost或者%,后者可以允许用户远程访问数据库,前者只能使用本机访问。后面将介绍到如果创建角色,那么这里就会默认是%,这个到后面进行比较。然后设置密码,再权限设置,权限设置看到有【服务器权限】和【权限】,后者指的是对于数据库的权限。这里的【服务器权限】和【(数据库)权限】就像是画画的时候,我们先画出大概,然后去细细的勾勒边边角角,这么说应该容易理解了。

设置好权限之后如何测试呢?新建连接:
在这里插入图片描述

连接名自己取一个,主机和端口都不用动它,用默认的即可,用户名为你想测试的用户名,比如我前面创建的用户名为u1,那么这里就应该是u1,然后密码要和创建用户时的密码一致,这些设置好了之后点击左下角的【测试连接】,如果成功了就点击【确定】就创建成功了。
然后就可以新建查询,进行测试你所设置的权限是否是预期之内。

使用这种方法创建不了角色,或者说,它没有像SQL server那样专门的通道来创建角色,事实上是,MySQL中用户和角色可以通用,只是说如果使用create role 'r1'来创建角色的话,后面的主机名称是%,还有就是如果你创建的用户主机的名称设置为%,在删除的时候使用删除角色的语句drop role [role_name]也可以成功,当然,如果你创建的用户的主机名是localhost,也可以使用类似于drop role 'u1'@'localhost'的语句实现。

还需要注意一点的是,如果你在创建好用户u1并且赋予一定的权限了之后,然后创建了一个依赖于这个用户的连接,随后你又更改了用户u1的权限,那么你需要重新连接才能看到改变,可以自己尝试一下以加深印象。

  1. 方法二:

创建用户:

-- 创建用户
create user '222'@'localhost' IDENTIFIED by '123456';

删除用户:

-- 删除用户;
drop user '222'@'localhost';

查看指定用户的权限:

-- 查看某个用户的权限
show grants for 'u1'@'localhost';

为用户u1赋予数据库test1的所有权限:

-- 赋予权限
grant all on table test1.* to '客户'@'localhost' with grant option;

创建角色:

-- 创建角色
create role 'role1', 'role2', 'role3';

会发现创建角色不用设置密码,联系到上面方法测试用户的时候,我们提到要保证新建的连接的密码和待测试的密码一致,然后在这里发现创建角色的时候没有设置密码,所以我们在新建连接的时候不能依赖角色来创建(除非你知道密码),这也是MySQL中角色和用户的一个区别。

赋予角色权限:

-- 赋予角色权限
grant all on test1.* to 'role1';
grant all on test2.* to 'role2';
grant all on test3.* to 'role3';

赋予用户角色:

grant 'role1' to 'u1'@'localhost';
show grants for 'u1'@'localhost';

回收用户角色:

-- 回收角色
REVOKE 'role1' FROM 'u1'@'localhost';

回收角色的权限:

-- 回收角色的权限;
revoke all on test1.* from 'role1';

删除角色:

-- 删除角色
drop role 'role2';

角色和账户可以互相替代,比如说把账户赋予账户,角色赋予角色,账户赋予角色,角色赋予账户:

-- 角色和账户可以互相替代,比如说把账户赋予账户,角色赋予角色,账户赋予角色,角色赋予账户:
CREATE USER 'u1'; 
CREATE ROLE 'r1';
GRANT SELECT ON test1.* TO 'u1';
GRANT SELECT ON test2.* TO 'r1';
CREATE USER 'u2';
CREATE ROLE 'r2';
GRANT 'u1', 'r1' TO 'u2';
GRANT 'u1', 'r1' TO 'r2';

示例:

创建用户和一个角色:

create role 'r1';
create user 'u1' IDENTIFIED by '123456';

在这里插入图片描述

为角色赋权,拥有对于test2数据库的全部权限:

grant all on test2.* to 'r1';

服务器权限是空的:
在这里插入图片描述

数据库权限不为空:
在这里插入图片描述

将角色赋给用户:

grant 'r1' to 'u1';
show grants for `u1`;

在这里插入图片描述

show grants for `u1` using `r1`;

在这里插入图片描述

后面加一个using可以显示获得的角色的功能。

然后直接利用u1创建一个连接并命名为user1,然后发现如下错误:
在这里插入图片描述

这个是因为服务器权限没有选择造成的,如果不喜欢它总是弹出来可以将用户u1的服务器权限中的select权限勾选,然后重新打开这个连接。我暂时先不进行勾选,一步一步记录一下。除了上面这个报错之外,还有左边的连接显示:
在这里插入图片描述

只有两个,在一路降妖除魔(关闭上面提到的弹出的窗口)之后,可以发现确实有对于test2数据库的全部操作权限,这里就不演示了。然后消除那个弹窗:
在root用户的用户栏选定u1,然后勾选【服务器权限】保存:
在这里插入图片描述

再次重新打开它:
在这里插入图片描述

报错也没了,数据库也齐全了,只是权限限制而已。
我在很多地方看到如果使用用户登录发现权限不对,那就要激活角色,使用:set DEFAULT role all to u1;但是我好像没用上。

最后需要提醒的是,即便用户u1拥有了角色r1,如果在用户那里点击用户u1,想查看一下他的权限,发现都是空的:
在这里插入图片描述

具体为什么这里显示没有,我暂时也没有弄明白,我也因为这个耗费了很久很久…曾一度怀疑人生。如果聪明的你知道解决方法,请在评论区告知我一下,不胜感激…

如果觉得不过瘾,你可以尝试在命令行中操作,命令行中可以直接使用角色登录,具体参照下面的博客吧:
https://blog.csdn.net/yanzongshuai/article/details/79118472

https://blog.csdn.net/qq_40323844/article/details/89922035?depth_1-utm_source=distribute.pc_relevant.none-task-blog-BlogCommendFromBaidu-1&utm_source=distribute.pc_relevant.none-task-blog-BlogCommendFromBaidu-1

https://blog.csdn.net/qq_30162859/article/details/81952228

发布了79 篇原创文章 · 获赞 8 · 访问量 3301

猜你喜欢

转载自blog.csdn.net/weixin_43141320/article/details/105704737
今日推荐