您的位置:首页 > 数据库 > MySQL

mysql高级【6】:mysql用户、角色的管理(单用户多角色等)

2018-08-31 16:37 531 查看
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_26584263/article/details/82253562

 讲了这么多可以发现很多的操作都是基于root(最高权限的用户)用户的,但是有的用户是新增的,不可能所有的人都有最高权限嘛,就好比一个公司,市场经理肯定没有审批项目经理的请假的权限吧,项目经理也没有删除公司人员信息的权限吧,等等,其实除了最高权限的管理员,很多的用户和角色都是只有操作使用到或者相关连的权限。这样可以保证系统的安全性。mysql数据库也是这样的,有的用户可能只有查看数据的权利,有的用户只有查看和修改数据的权利,并且能操作的数据库就一两个。首先先讲一下用户,我们一般安装的mysql,一直默认下来就是root用户,root就是mysql的最高权限用户了,这个root用户可以对任何的数据库、数据表、存储过程、触发器、索引等操作。

新建用户的格式:

create user 用户名[@host地址]@ identified by 密码;

新建角色的格式:

create role 角色名;

权限设置的格式:

[code]GRANT
priv_type [(column_list)]
[, priv_type [(column_list)]] ...
ON [object_type] priv_level
TO user_or_role [, user_or_role] ...
[WITH GRANT OPTION]

GRANT PROXY ON user_or_role
TO user_or_role [, user_or_role] ...
[WITH GRANT OPTION]

GRANT role [, role] ...
TO user_or_role [, user_or_role] ...
[WITH ADMIN OPTION]

object_type: {
TABLE
| FUNCTION
| PROCEDURE
}

priv_level: {
*
| *.*
| db_name.*
| db_name.tbl_name
| tbl_name
| db_name.routine_name
}

user_or_role: {
user
| role
}

user:
(see Section 6.2.4, “Specifying Account Names”)

role:
(see Section 6.2.5, “Specifying Role Names”)

 

案例:

 

 我们再新建一个有root所具有的权限的用户rootone;

[code]create user 'rootone'@'localhost' identified by '123456';

GRANT ALL ON *.* TO 'roottwo'@'localhost' WITH GRANT OPTION;

新建了rootone并且把所用的权限都赋予了它,使用命令mysql -urootone -p 登录到该用户就可以mysql里面的数据都可以操作。

如果用户并且这些用户所拥有的权限都一样,那我们就不必一一去给每个用户赋予权限,我们可以新建一个角色,把权限赋予这个角色,然后把这个角色给这些用户,这样后期也方便管理,维护性提高了。

新建一个角色和两个用户

[code]create role 'roleone'@localhost ;

create user 'user1' identified by '123456';

create user 'user2' identified by '123456';

在mysql数据库的user表里面就可以查看到刚才新增的角色和用户:

给roleone赋予所有数据库所有表的修改和查询

[code]grant select,update on *.* to  roleone@localhost;

查看roleone角色的权限只有查询和修改。

把角色的权限赋给用户

查看user1的权限,user包含roleone角色的权限

但是有的用户还是多个角色,问题是mysql可以吗?答案是一定可以的

按照上面新建角色再新建一个角色roletwo,并且把对全部数据库的删除操作权限赋予roletwo角色,再把roletwo角色赋予user1,可以查看到,user1 有roleone,roletwo两个角色的权限,所以mysql是具备一个用户多角色的操作的。

撤销用户和角色的权限格式

[code]REVOKE
priv_type [(column_list)]
[, priv_type [(column_list)]] ...
ON [object_type] priv_level
FROM user_or_role [, user_or_role] ...

REVOKE ALL [PRIVILEGES], GRANT OPTION
FROM user_or_role [, user_or_role] ...

REVOKE PROXY ON user_or_role
FROM user_or_role [, user_or_role] ...

REVOKE role [, role ] ...
FROM user_or_role [, user_or_role ] ...

user_or_role: {
user
| role
}

user:
(see Section 6.2.4, “Specifying Account Names”)

role:
(see Section 6.2.5, “Specifying Role Names”.

把上面的用户user2和角色roletwo的权限撤销:

删除用户和角色:

drop user|role  名称

例如

可以发现不管是用户还是角色都可以使用drop user 和drop role都可以删除成功。我是在mysql8.0尝试的哦。这样的删除都会把依赖删除了,还有一种就是直接删除mysql.user表里面的用户数据,但是依赖是不会自动删除的。建议使用drop哦。

 

《………………………………………………菜鸟起飞中,请各位走过路过的多多指教……………………………………》

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: