<style type="text/css">body { font-family: Helvetica, arial, sans-serif; font-size: 14px; line-height: 1.6; padding-top: 10px; padding-bottom: 10px; background-color: white; padding: 30px }
body>*:first-child { margin-top: 0 !important }
body>*:last-child { margin-bottom: 0 !important }
a { color: #4183C4 }
a.absent { color: #cc0000 }
a.anchor { display: block; padding-left: 30px; margin-left: -30px; cursor: pointer; position: absolute; top: 0; left: 0; bottom: 0 }
h1,h2,h3,h4,h5,h6 { margin: 20px 0 10px; padding: 0; font-weight: bold; cursor: text; position: relative }
h1:hover a.anchor,h2:hover a.anchor,h3:hover a.anchor,h4:hover a.anchor,h5:hover a.anchor,h6:hover a.anchor { background: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAA09pVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMy1jMDExIDY2LjE0NTY2MSwgMjAxMi8wMi8wNi0xNDo1NjoyNyAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENTNiAoMTMuMCAyMDEyMDMwNS5tLjQxNSAyMDEyLzAzLzA1OjIxOjAwOjAwKSAgKE1hY2ludG9zaCkiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6OUM2NjlDQjI4ODBGMTFFMTg1ODlEODNERDJBRjUwQTQiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6OUM2NjlDQjM4ODBGMTFFMTg1ODlEODNERDJBRjUwQTQiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDo5QzY2OUNCMDg4MEYxMUUxODU4OUQ4M0REMkFGNTBBNCIgc3RSZWY6ZG9jdW1lbnRJRD0ieG1wLmRpZDo5QzY2OUNCMTg4MEYxMUUxODU4OUQ4M0REMkFGNTBBNCIvPiA8L3JkZjpEZXNjcmlwdGlvbj4gPC9yZGY6UkRGPiA8L3g6eG1wbWV0YT4gPD94cGFja2V0IGVuZD0iciI/PsQhXeAAAABfSURBVHjaYvz//z8DJYCRUgMYQAbAMBQIAvEqkBQWXI6sHqwHiwG70TTBxGaiWwjCTGgOUgJiF1J8wMRAIUA34B4Q76HUBelAfJYSA0CuMIEaRP8wGIkGMA54bgQIMACAmkXJi0hKJQAAAABJRU5ErkJggg==") no-repeat 10px center; text-decoration: none }
h1 tt,h1 code { font-size: inherit }
h2 tt,h2 code { font-size: inherit }
h3 tt,h3 code { font-size: inherit }
h4 tt,h4 code { font-size: inherit }
h5 tt,h5 code { font-size: inherit }
h6 tt,h6 code { font-size: inherit }
h1 { font-size: 28px; color: black }
h2 { font-size: 24px; border-bottom: 1px solid #cccccc; color: black }
h3 { font-size: 18px }
h4 { font-size: 16px }
h5 { font-size: 14px }
h6 { color: #777777; font-size: 14px }
p,blockquote,ul,ol,dl,li,table,pre { margin: 15px 0 }
hr { background: transparent url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAYAAAAECAYAAACtBE5DAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyJpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMC1jMDYwIDYxLjEzNDc3NywgMjAxMC8wMi8xMi0xNzozMjowMCAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENTNSBNYWNpbnRvc2giIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6OENDRjNBN0E2NTZBMTFFMEI3QjRBODM4NzJDMjlGNDgiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6OENDRjNBN0I2NTZBMTFFMEI3QjRBODM4NzJDMjlGNDgiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDo4Q0NGM0E3ODY1NkExMUUwQjdCNEE4Mzg3MkMyOUY0OCIgc3RSZWY6ZG9jdW1lbnRJRD0ieG1wLmRpZDo4Q0NGM0E3OTY1NkExMUUwQjdCNEE4Mzg3MkMyOUY0OCIvPiA8L3JkZjpEZXNjcmlwdGlvbj4gPC9yZGY6UkRGPiA8L3g6eG1wbWV0YT4gPD94cGFja2V0IGVuZD0iciI/PqqezsUAAAAfSURBVHjaYmRABcYwBiM2QSA4y4hNEKYDQxAEAAIMAHNGAzhkPOlYAAAAAElFTkSuQmCC") repeat-x 0 0; border: 0 none; color: #cccccc; height: 4px; padding: 0 }
body>h2:first-child { margin-top: 0; padding-top: 0 }
body>h1:first-child { margin-top: 0; padding-top: 0 }
body>h1:first-child+h2 { margin-top: 0; padding-top: 0 }
body>h3:first-child,body>h4:first-child,body>h5:first-child,body>h6:first-child { margin-top: 0; padding-top: 0 }
a:first-child h1,a:first-child h2,a:first-child h3,a:first-child h4,a:first-child h5,a:first-child h6 { margin-top: 0; padding-top: 0 }
h1 p,h2 p,h3 p,h4 p,h5 p,h6 p { margin-top: 0 }
li p.first { display: inline-block }
li { margin: 0 }
ul,ol { padding-left: 30px }
ul :first-child,ol :first-child { margin-top: 0 }
dl { padding: 0 }
dl dt { font-size: 14px; font-weight: bold; font-style: italic; padding: 0; margin: 15px 0 5px }
dl dt:first-child { padding: 0 }
dl dt>:first-child { margin-top: 0 }
dl dt>:last-child { margin-bottom: 0 }
dl dd { margin: 0 0 15px; padding: 0 15px }
dl dd>:first-child { margin-top: 0 }
dl dd>:last-child { margin-bottom: 0 }
blockquote { border-left: 4px solid #dddddd; padding: 0 15px; color: #777777 }
blockquote>:first-child { margin-top: 0 }
blockquote>:last-child { margin-bottom: 0 }
table { padding: 0; border-collapse: collapse }
table tr { border-top: 1px solid #cccccc; background-color: white; margin: 0; padding: 0 }
table tr:nth-child(2n) { background-color: #f8f8f8 }
table tr th { font-weight: bold; border: 1px solid #cccccc; margin: 0; padding: 6px 13px }
table tr td { border: 1px solid #cccccc; margin: 0; padding: 6px 13px }
table tr th :first-child,table tr td :first-child { margin-top: 0 }
table tr th :last-child,table tr td :last-child { margin-bottom: 0 }
img { max-width: 100% }
span.frame { display: block; overflow: hidden }
span.frame>span { border: 1px solid #dddddd; display: block; float: left; overflow: hidden; margin: 13px 0 0; padding: 7px; width: auto }
span.frame span img { display: block; float: left }
span.frame span span { clear: both; color: #333333; display: block; padding: 5px 0 0 }
span.align-center { display: block; overflow: hidden; clear: both }
span.align-center>span { display: block; overflow: hidden; margin: 13px auto 0; text-align: center }
span.align-center span img { margin: 0 auto; text-align: center }
span.align-right { display: block; overflow: hidden; clear: both }
span.align-right>span { display: block; overflow: hidden; margin: 13px 0 0; text-align: right }
span.align-right span img { margin: 0; text-align: right }
span.float-left { display: block; margin-right: 13px; overflow: hidden; float: left }
span.float-left span { margin: 13px 0 0 }
span.float-right { display: block; margin-left: 13px; overflow: hidden; float: right }
span.float-right>span { display: block; overflow: hidden; margin: 13px auto 0; text-align: right }
code,tt { margin: 0 2px; padding: 0 5px; white-space: nowrap; border: 1px solid #eaeaea; background-color: #f8f8f8 }
pre code { margin: 0; padding: 0; white-space: pre; border: none; background: transparent }
.highlight pre { background-color: #f8f8f8; border: 1px solid #cccccc; font-size: 13px; line-height: 19px; overflow: auto; padding: 6px 10px }
pre { background-color: #f8f8f8; border: 1px solid #cccccc; font-size: 13px; line-height: 19px; overflow: auto; padding: 6px 10px }
pre code,pre tt { background-color: transparent; border: none }
sup { font-size: 0.83em; vertical-align: super; line-height: 0 }
kbd { display: inline-block; padding: 3px 5px; font-size: 11px; line-height: 10px; color: #555; vertical-align: middle; background-color: #fcfcfc; border: solid 1px #ccc; border-bottom-color: #bbb }
* { }</style>
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 account_5@% |
+-------------------------------------------------------------------------------------------------+
| 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 account_6@% |
+------------------------------------------------------------------+
| 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 命令,加用户加权限一步到位。
MySQL账户管理