欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

MySQL账户管理

程序员文章站 2022-06-01 23:14:06
...
MySQL账户管理

MySQL账户管理

这些天一直都浑浑噩噩的,折腾MySQLInnoDB数据引擎的热备份,折腾了很久,结果也没有折腾出来,心里有很多的挫败感。继而在主从(master replication to slave)配置上学习了下,学习的过程中踩到了不少的坑,最后还成功的完成了主从的配置。学习完主从之后,继续折腾热备份的东西,自己的电脑也不争气,虚拟机经常掉线。可能这一段时间并不适合学习热备份,于是乎转向MySQL账户管理,这一块的内容,在以前的工作学习生涯中经常用到,也去问过DBA大叔帮我配置权限。还记得那个DBA大叔,其实年龄并不是很大,一看就是脾气很好的那种。工作区摆放了三个显示器,显示器上全是不断变化的管理信息,顿时觉得很厉害也很佩服。那个时候我引以为傲的是在工作中,使用存储过程取数据,然后使用程序去调用,使用很长的SQL命令将复杂的业务需求封装解决。当时平台的访问量太小,效率再差的SQL不会被发现。再说没有人关注过代码的执行效率,没有人关心过sql得执行效率。只要上了线,运行ok我们就放心了。那个时候我还是初级程序员,以为所有的复杂逻辑,都可以通过if else 去解决,没有遇到过大并发,没有遇到过大数据。进入目前的这家公司后,开始有意的学习这方面的内容,也逐渐了明白了解决大数据和高并发的解决方案。因为近一周没有写过博客,话题跑的有点远,接下来我们来看下MySQL的账户管理该怎么操作。

一、MySQL账户体系

根据账户所具有的权限的不同,MySQL的账户可以分为以下几种:

服务实例级账号

如果某用户如root,拥有服务实例级分配的权限,那么该账号就可以删除所有的数据库、连同这些库中的表。

数据库级别账号

该账号可以在具有权限的数据库中执行增删改查的所有操作(如果分配了这些权限)。

数据表级别账号

该账号可以在具有权限的表上执行增删改查等所有操作(如果分配了这些权限)。

字段级别的权限

该账号可以对某些表中具有权限的字段进行操作(取决于所分配的权限)。

存储程序级别的账号

该账号可以对存储程序进行增删改查的操作(取决于所分配的权限)

二、配置权限

grant 命令语法格式

grant 权限名称[字段列表] on [数据库资源类型]数据库资源 to MySQL账户1,[MySQL账户2] [with grant option]

*.* 表示所有数据库,所有数据表

'account_4'@'%' 表示account_4 账号可以在任意的主机上进行登录。

创建服务实例级账号

grant all privileges on *.* to 'account_4'@'%' identified by '123456' with grant option;
将创建一个名字为account_4的账号,拥有所有的数据库权限,并且具有grant 权限,可以创建其他拥有服务实例权限的其他用户。

创建数据库实例账号

grant all privileges on liangzi.* to 'account_5'@'%' identified by '123456' with grant option;
将创建一个名字为account_5的账号。拥有liangzi 数据库的所有权限,可以随该库中的表进行所有操作。

创建数据表级别的账号

grant all privileges on table liangzi.test_1 to 'account_6'@'%' identified by '123456';
将创建一个名字为account_6 的用户,对langzi数据库中test_1拥有所有的权限。

由于字段级别的权限并不经常使用,所以不必列举。字段设置国语冗余复杂,则每次MySQL在进行SQL执行的时候回进行同样复杂的权限判断,造成效率降低性能下降,同事也会存在安全隐患。因此简单、易管理的、高可用的权限才是可取的。

权限的增删改查

1.增权限

比如原本的权限为:
grant select,insert on liangzi.* to 'account_5'@'%' identified by '123456' with grant option;
想要增加update, delete,alter 权限可以如下操作:
grant update,delete,alter on liangzi.* to 'account_5'@'%' identified by '123456' with grant option;
然后使用
show privileges for account_5;
mysql> show grants for account_5;
+-------------------------------------------------------------------------------------------------+
| Grants for [email protected]%                                                                          |
+-------------------------------------------------------------------------------------------------+
| GRANT USAGE ON *.* TO 'account_5'@'%'                                                           |
| GRANT SELECT, INSERT, UPDATE, DELETE, ALTER ON `liangzi`.* TO 'account_5'@'%' WITH GRANT OPTION |
+-------------------------------------------------------------------------------------------------+

2、移除权限

比如原本的权限为:
grant select,insert on liangzi.* to 'account_6'@'%' identified by '123456' with grant option;
想要移除insert 权限:
mysql> revoke insert on liangzi.* from  'account_6'@'%';
mysql> show grants for account_6;
+------------------------------------------------------------------+
| Grants for [email protected]%                                           |
+------------------------------------------------------------------+
| GRANT USAGE ON *.* TO 'account_6'@'%'                            |
| GRANT SELECT ON `liangzi`.* TO 'account_6'@'%' WITH GRANT OPTION |
+------------------------------------------------------------------+

三、用户管理

用户管理也无非是增加用户、删除用户之类的。 还记得在装mysql第一次使用的时候,使用了默认密码,进了系统之后无论进行什么操作都需要我设置密码。但是如何设置,提示信息上并没有写。 后来才知道了可以使用:

set password=password('123456');

其实这个命令不仅能够设置当前用户的密码,也可以设置其他用户的密码,这个命令的完整格式是:

set password [for USER] = passowrd('新密码');

比如公司里一个同事离职了,我需要删除他的mysql权限,可以使用如下的命令:

drop user USER_NAME;

drop user roverliang;

增加用户可以使用:

create user 'roverliang'@'%' identified by '123456';
添加的格式为:
create user 'USER_NAME'@'HOST' identified by 'PASSOWRD';

其实这个命令相当复杂,由这个命令创建出来的用户不具有任何权限,仅仅能够登录系统。因此创建用户的时候,可以使用grant 命令,加用户加权限一步到位。