带您深入了解MySQL的权限管理
2017-11-01 00:00
399 查看
MySQL的权限表在数据库启动的时候就载入内存,当用户通过身份认证后,就在内存中进行相应权限的存取,这样,此用户就可以在数据库中做权限范围内的各种操作了。
一、权限表的存取
在权限存取的两个过程中,系统会用到“mysql”数据库(安装MySQL时被创建,数据库名称叫“mysql”)中user、host和db这3个最重要的权限表。
在这3个表中,最重要的表示user表,其次是db表,host表在大多数情况下并不使用。
user中的列主要分为4个部分:用户列、权限列、安全列和资源控制列。
通常用的最多的是用户列和权限列,其中权限列又分为普通权限和管理权限。普通权限用于数据库的操作,比如select_priv、super_priv等。
当用户进行连接时,权限表的存取过程有以下两个过程:
先从user表中的host、user和password这3个字段中判断连接的IP、用户名、和密码是否存在于表中,如果存在,则通过身份验证,否则拒绝连接。
如果通过身份验证、则按照以下权限表的顺序得到数据库权限:user->db->tables_priv->columns_priv。
在这几个权限表中,权限范围依次递减,全局权限覆盖局部权限。上面的第一阶段好理解,下面以一个例子来详细解释一下第二阶段。
为了方便测试,需要修改变量sql_mode
//sql_mode默认值中有NO_AUTO_CREATE_USER(防止GRANT自动创建新用户,除非还指定了密码)
SETSESSIONsql_mode='STRICT_TRANS_TABLES,NO_ENGINE_SUBSTITUTION';
1.创建用户zj@localhost,并赋予所有数据库上的所有表的select权限
MySQL[mysql]>grantselecton*.*tozj@localhost;
QueryOK,0rowsaffected,2warnings(0.00sec)
MySQL[mysql]>select*fromuserwhereuser="zj"andhost='localhost'\G;
***************************1.row***************************
Host:localhost
User:zj
Select_priv:Y
Insert_priv:N
Update_priv:N
Delete_priv:N
Create_priv:N
Drop_priv:N
Reload_priv:N
...
2.查看db表
MySQL[mysql]>select*fromdbwhereuser='zj'\G;
Emptyset(0.00sec)
可以发现,user表的select_priv列是“Y”,而db表中并没有记录,也就是说,对所有数据库都具有相同的权限的用户并不需要记录到db表,而仅仅需要将user表中的select_priv改为“Y”即可。换句话说,user表中的每个权限都代表了对所有数据库都有权限。
3.将zj@localhost上的权限改为只对t2数据库上所有表的select权限。
MySQL[mysql]>revokeselecton*.*fromzj@localhost;
QueryOK,0rowsaffected,1warning(0.02sec)
MySQL[mysql]>grantselectont2.*tozj@localhost;
QueryOK,0rowsaffected,1warning(0.04sec)
MySQL[mysql]>select*fromuserwhereuser='zj'\G;
***************************1.row***************************
Host:localhost
User:zj
Select_priv:N
Insert_priv:N
Update_priv:N
Delete_priv:N
Create_priv:N
Drop_priv:N
Reload_priv:N
...
MySQL[mysql]>select*fromdbwhereuser='zj'\G;
***************************1.row***************************
Host:localhost
Db:t2
User:zj
Select_priv:Y
Insert_priv:N
Update_priv:N
Delete_priv:N
Create_priv:N
Drop_priv:N
Grant_priv:N
这时候发现,user表中的select_priv变为“N”,而db表中增加了db为t2的一条记录。也就是说,当只授予部分数据库某些权限时,user表中的相应权限列保持“N”,而将具体的数据库权限写入db表。table和column的权限机制和db类似。
从上例可以看出,当用户通过权限认证,进行权限分配时,将按照user->db->tables_priv->columns_priv的顺序进行权限分配,即先检查全局权限表user,如果user中对应权限为“Y”,则此用户对所有数据库的权限都为“Y”,将不再检查db、tables_priv和columns_priv;如果为“N”,则到db表中检查此用户对应的具体数据库,并得到db中为“Y”的权限;如果db中相应权限为“N”,则再依次检查tables_priv和columns_priv中的权限,如果所有的都为“N”,则判断为不具备权限。
二、账号管理
主要包括账号的创建,权限的更改和账号的删除。
1.创建账号
使用grant语法创建,示例:
(1)创建用户zj,权限为可以在所有数据库上执行所有权限,只能从本地进行连接。
MySQL[mysql]>grantallprivilegeson*.*tozj@localhost;
QueryOK,0rowsaffected,2warnings(0.00sec)
MySQL[mysql]>select*fromuserwhereuser="zj"andhost="localhost"\G;
***************************1.row***************************
Host:localhost
User:zj
Select_priv:Y
Insert_priv:Y
Update_priv:Y
Delete_priv:Y
Create_priv:Y
Drop_priv:Y
Reload_priv:Y
Shutdown_priv:Y
可以发现,除了grant_priv权限外,所有权限在user表里面都是“Y”。
(2)在(1)基础上,增加对zj的grant权限
MySQL[(none)]>grantallprivilegeson*.*tozj@localhostwithgrantoption;
QueryOK,0rowsaffected,1warning(0.01sec)
MySQL[mysql]>select*fromuserwhereuser="zj"andhost='localhost'\G;
***************************1.row***************************
Host:localhost
User:zj
Select_priv:Y
Insert_priv:Y
Update_priv:Y
Delete_priv:Y
Create_priv:Y
Drop_priv:Y
Reload_priv:Y
Shutdown_priv:Y
Process_priv:Y
File_priv:Y
Grant_priv:Y
...
(3)在(2)基础上,设置密码为“123”
MySQL[mysql]>grantallprivilegeson*.*tozj@localhostidentifiedby'123'withgrantoption;
QueryOK,0rowsaffected,2warnings(0.01sec)
MySQL[mysql]>select*fromuserwhereuser="zj"andhost="localhost"\G;
***************************1.row***************************
Host:localhost
User:zj
Select_priv:Y
Insert_priv:Y
Update_priv:Y
Delete_priv:Y
Create_priv:Y
Drop_priv:Y
Reload_priv:Y
......
authentication_string:*23AE809DDACAF96AF0FD78ED04B6A265E05AA257
password_expired:N
password_last_changed:2017-09-2520:29:42
password_lifetime:NULL
可以发现,密码变成了一堆加密后的字符串。
(4)创建新用户zj2,可以从任何IP连接,权限为对t2数据库里的所有表进行select、update、insert和delete操作,初始密码为“123”
MySQL[mysql]>grantselect,insert,update,deleteont2.*to'zj2'@'%'identifiedby'123';
QueryOK,0rowsaffected,1warning(0.00sec)
MySQL[mysql]>select*fromuserwhereuser='zj2'andhost="%"\G;
***************************1.row***************************
Host:%
User:zj2
Select_priv:N
Insert_priv:N
Update_priv:N
Delete_priv:N
Create_priv:N
Drop_priv:N
......
authentication_string:*23AE809DDACAF96AF0FD78ED04B6A265E05AA257
password_expired:N
password_last_changed:2017-09-2520:37:49
password_lifetime:NULL
MySQL[mysql]>select*fromdbwhereuser="zj2"andhost='%'\G;
***************************1.row***************************
Host:%
Db:t2
User:zj2
Select_priv:Y
Insert_priv:Y
Update_priv:Y
Delete_priv:Y
Create_priv:N
Drop_priv:N
......
user表中的权限都是“N”,db表中增加的记录权限则都是“Y”。一般的,只授予用户适当的权限,而不会授予过多的权限。
本例中的IP限制为所有IP都可以连接,因此设置为“*”,mysql数据库中是通过user表的host字段来进行控制,host可以是以下类型的赋值。
Host值可以是主机名或IP号,或“localhost”指出本地主机。
可以在Host列值使用通配符字符“%”和“_”
Host值“%”匹配任何主机名,空Host值等价于“%”,它们的含义与like操作符的模式匹配操作相同。
注意:mysql数据库的user表中host的值为“*”或者空,表示所有外部IP都可以连接,但是不包括本地服务器localhost,因此,如果要包括本地服务器,必须单独为localhost赋予权限。
(5)授予super、process、file权限给用户zj3@%
MySQL[mysql]>grantsuper,process,fileon*.*to'zj3'@'%';
QueryOK,0rowsaffected,1warning(0.00sec)
因为这几个权限都是属于管理权限,因此不能够指定某个数据库,on后面必须跟“.”,下面语法将提示错误
MySQL[mysql]>grantsuper,process,fileont2.*to'zj3'@'%';
ERROR1221(HY000):IncorrectusageofDBGRANTandGLOBALPRIVILEGES
(6)只授予登录权限给zj4@localhost
MySQL[mysql]>grantusageon*.*to'zj4'@'localhost';
QueryOK,0rowsaffected,2warnings(0.01sec)
MySQL[mysql]>exit
Bye
zj@bogon:~$mysql-uzj4-p
Enterpassword:
WelcometotheMySQLmonitor.Commandsendwith;or\g.
YourMySQLconnectionidis78
Serverversion:5.7.18-logSourcedistribution
Copyright(c)2000,2017,Oracleand/oritsaffiliates.Allrightsreserved.
OracleisaregisteredtrademarkofOracleCorporationand/orits
affiliates.Othernamesmaybetrademarksoftheirrespective
owners.
Type'help;'or'\h'forhelp.Type'\c'toclearthecurrentinputstatement.
MySQL[(none)]>showdatabases;
+--------------------+
|Database|
+--------------------+
|information_schema|
+--------------------+
1rowinset(0.02sec)
usage权限只能用于数据库登录,不能执行任何操作
2.查看账号权限
账号创建好后,可以通过如下命令查看权限:
showgrantsforuser@host;
示例:
MySQL[(none)]>showgrantsforzj@localhost;
+-------------------------------------------------------------------+
|Grantsforzj@localhost|
+-------------------------------------------------------------------+
|GRANTALLPRIVILEGESON*.*TO'zj'@'localhost'WITHGRANTOPTION|
+-------------------------------------------------------------------+
1rowinset(0.01sec)
3.更改账号权限
可以进行权限的新增和回收。和创建账号一样,权限变更也有两种方法:使用grant(新增)和revoke(回收)语句,或者更改权限表。
示例:
(1)zj4@localhost目前只有登录权限
MySQL[(none)]>showgrantsforzj4@localhost;
+-----------------------------------------+
|Grantsforzj4@localhost|
+-----------------------------------------+
|GRANTUSAGEON*.*TO'zj4'@'localhost'|
+-----------------------------------------+
1rowinset(0.00sec)
(2)赋予zj4@localhost所有数据库上的所有表的select权限
MySQL[(none)]>grantselecton*.*to'zj4'@'localhost';
QueryOK,0rowsaffected,1warning(0.00sec)
MySQL[(none)]>showgrantsforzj4@localhost;
+------------------------------------------+
|Grantsforzj4@localhost|
+------------------------------------------+
|GRANTSELECTON*.*TO'zj4'@'localhost'|
+------------------------------------------+
1rowinset(0.00sec)
(3)继续给zj4@localhost赋予select和insert权限,和已有的select权限进行合并
MySQL[(none)]>showgrantsfor'zj4'@'localhost';
+--------------------------------------------------+
|Grantsforzj4@localhost|
+--------------------------------------------------+
|GRANTSELECT,INSERTON*.*TO'zj4'@'localhost'|
+--------------------------------------------------+
1rowinset(0.00sec)
revoke语句可以回收已经赋予的权限,对于上面的例子,这里决定要收回zj4@localhost上的insert和select权限:
MySQL[(none)]>revokeselect,inserton*.*fromzj4@localhost;
QueryOK,0rowsaffected,1warning(0.00sec)
MySQL[(none)]>showgrantsforzj4@localhost;
+-----------------------------------------+
|Grantsforzj4@localhost|
+-----------------------------------------+
|GRANTUSAGEON*.*TO'zj4'@'localhost'|
+-----------------------------------------+
1rowinset(0.00sec)
usage权限不能被回收,也就是说,revoke用户并不能删除用户。
4.修改账号密码
(1)可以用mysqladmin命令在命令行指定密码。
shell>mysqladmin-uuser_name-hhost_namepassword"123456"
(2)执行setpassword语句。
mysql>setpasswordfor'username'@'%'=password('pwd');
如果是更改自己的密码,可以省略for语句
mysql>setpassword=password('pwd');
(3)可以在全局级别使用grantusage语句(在“.”)来指定某个账户的密码而不影响账户当前的权限。
mysql>grantusageon*.*to'username'@'%'identifiedby'pwd';
5.删除账号
要彻底的删除账号,可以使用dropuser:
dropuserzj@localhost;
6.账号资源限制
创建MySQL账号时,还有一类选项称为账号资源限制,这类选项的作用是限制每个账号实际具有的资源限制,这里的“资源”主要包括:
max_queries_per_hourcount:单个账号每小时执行的查询次数
max_upodates_per_hourcount:单个账号每小时执行的更新次数
max_connections_per_hourcount:单个账号每小时连接服务器的次数
max_user_connectionscount:单个账号并发连接服务器的次数
一、权限表的存取
在权限存取的两个过程中,系统会用到“mysql”数据库(安装MySQL时被创建,数据库名称叫“mysql”)中user、host和db这3个最重要的权限表。
在这3个表中,最重要的表示user表,其次是db表,host表在大多数情况下并不使用。
user中的列主要分为4个部分:用户列、权限列、安全列和资源控制列。
通常用的最多的是用户列和权限列,其中权限列又分为普通权限和管理权限。普通权限用于数据库的操作,比如select_priv、super_priv等。
当用户进行连接时,权限表的存取过程有以下两个过程:
先从user表中的host、user和password这3个字段中判断连接的IP、用户名、和密码是否存在于表中,如果存在,则通过身份验证,否则拒绝连接。
如果通过身份验证、则按照以下权限表的顺序得到数据库权限:user->db->tables_priv->columns_priv。
在这几个权限表中,权限范围依次递减,全局权限覆盖局部权限。上面的第一阶段好理解,下面以一个例子来详细解释一下第二阶段。
为了方便测试,需要修改变量sql_mode
//sql_mode默认值中有NO_AUTO_CREATE_USER(防止GRANT自动创建新用户,除非还指定了密码)
SETSESSIONsql_mode='STRICT_TRANS_TABLES,NO_ENGINE_SUBSTITUTION';
1.创建用户zj
MySQL[mysql]>grantselecton*.*tozj
QueryOK,0rowsaffected,2warnings(0.00sec)
MySQL[mysql]>select*fromuserwhereuser="zj"andhost='localhost'\G;
***************************1.row***************************
Host:localhost
User:zj
Select_priv:Y
Insert_priv:N
Update_priv:N
Delete_priv:N
Create_priv:N
Drop_priv:N
Reload_priv:N
...
2.查看db表
MySQL[mysql]>select*fromdbwhereuser='zj'\G;
Emptyset(0.00sec)
可以发现,user表的select_priv列是“Y”,而db表中并没有记录,也就是说,对所有数据库都具有相同的权限的用户并不需要记录到db表,而仅仅需要将user表中的select_priv改为“Y”即可。换句话说,user表中的每个权限都代表了对所有数据库都有权限。
3.将zj
MySQL[mysql]>revokeselecton*.*fromzj
QueryOK,0rowsaffected,1warning(0.02sec)
MySQL[mysql]>grantselectont2.*tozj
QueryOK,0rowsaffected,1warning(0.04sec)
MySQL[mysql]>select*fromuserwhereuser='zj'\G;
***************************1.row***************************
Host:localhost
User:zj
Select_priv:N
Insert_priv:N
Update_priv:N
Delete_priv:N
Create_priv:N
Drop_priv:N
Reload_priv:N
...
MySQL[mysql]>select*fromdbwhereuser='zj'\G;
***************************1.row***************************
Host:localhost
Db:t2
User:zj
Select_priv:Y
Insert_priv:N
Update_priv:N
Delete_priv:N
Create_priv:N
Drop_priv:N
Grant_priv:N
这时候发现,user表中的select_priv变为“N”,而db表中增加了db为t2的一条记录。也就是说,当只授予部分数据库某些权限时,user表中的相应权限列保持“N”,而将具体的数据库权限写入db表。table和column的权限机制和db类似。
从上例可以看出,当用户通过权限认证,进行权限分配时,将按照user->db->tables_priv->columns_priv的顺序进行权限分配,即先检查全局权限表user,如果user中对应权限为“Y”,则此用户对所有数据库的权限都为“Y”,将不再检查db、tables_priv和columns_priv;如果为“N”,则到db表中检查此用户对应的具体数据库,并得到db中为“Y”的权限;如果db中相应权限为“N”,则再依次检查tables_priv和columns_priv中的权限,如果所有的都为“N”,则判断为不具备权限。
二、账号管理
主要包括账号的创建,权限的更改和账号的删除。
1.创建账号
使用grant语法创建,示例:
(1)创建用户zj,权限为可以在所有数据库上执行所有权限,只能从本地进行连接。
MySQL[mysql]>grantallprivilegeson*.*tozj@localhost;
QueryOK,0rowsaffected,2warnings(0.00sec)
MySQL[mysql]>select*fromuserwhereuser="zj"andhost="localhost"\G;
***************************1.row***************************
Host:localhost
User:zj
Select_priv:Y
Insert_priv:Y
Update_priv:Y
Delete_priv:Y
Create_priv:Y
Drop_priv:Y
Reload_priv:Y
Shutdown_priv:Y
可以发现,除了grant_priv权限外,所有权限在user表里面都是“Y”。
(2)在(1)基础上,增加对zj的grant权限
MySQL[(none)]>grantallprivilegeson*.*tozj@localhostwithgrantoption;
QueryOK,0rowsaffected,1warning(0.01sec)
MySQL[mysql]>select*fromuserwhereuser="zj"andhost='localhost'\G;
***************************1.row***************************
Host:localhost
User:zj
Select_priv:Y
Insert_priv:Y
Update_priv:Y
Delete_priv:Y
Create_priv:Y
Drop_priv:Y
Reload_priv:Y
Shutdown_priv:Y
Process_priv:Y
File_priv:Y
Grant_priv:Y
...
(3)在(2)基础上,设置密码为“123”
MySQL[mysql]>grantallprivilegeson*.*tozj@localhostidentifiedby'123'withgrantoption;
QueryOK,0rowsaffected,2warnings(0.01sec)
MySQL[mysql]>select*fromuserwhereuser="zj"andhost="localhost"\G;
***************************1.row***************************
Host:localhost
User:zj
Select_priv:Y
Insert_priv:Y
Update_priv:Y
Delete_priv:Y
Create_priv:Y
Drop_priv:Y
Reload_priv:Y
......
authentication_string:*23AE809DDACAF96AF0FD78ED04B6A265E05AA257
password_expired:N
password_last_changed:2017-09-2520:29:42
password_lifetime:NULL
可以发现,密码变成了一堆加密后的字符串。
(4)创建新用户zj2,可以从任何IP连接,权限为对t2数据库里的所有表进行select、update、insert和delete操作,初始密码为“123”
MySQL[mysql]>grantselect,insert,update,deleteont2.*to'zj2'@'%'identifiedby'123';
QueryOK,0rowsaffected,1warning(0.00sec)
MySQL[mysql]>select*fromuserwhereuser='zj2'andhost="%"\G;
***************************1.row***************************
Host:%
User:zj2
Select_priv:N
Insert_priv:N
Update_priv:N
Delete_priv:N
Create_priv:N
Drop_priv:N
......
authentication_string:*23AE809DDACAF96AF0FD78ED04B6A265E05AA257
password_expired:N
password_last_changed:2017-09-2520:37:49
password_lifetime:NULL
MySQL[mysql]>select*fromdbwhereuser="zj2"andhost='%'\G;
***************************1.row***************************
Host:%
Db:t2
User:zj2
Select_priv:Y
Insert_priv:Y
Update_priv:Y
Delete_priv:Y
Create_priv:N
Drop_priv:N
......
user表中的权限都是“N”,db表中增加的记录权限则都是“Y”。一般的,只授予用户适当的权限,而不会授予过多的权限。
本例中的IP限制为所有IP都可以连接,因此设置为“*”,mysql数据库中是通过user表的host字段来进行控制,host可以是以下类型的赋值。
Host值可以是主机名或IP号,或“localhost”指出本地主机。
可以在Host列值使用通配符字符“%”和“_”
Host值“%”匹配任何主机名,空Host值等价于“%”,它们的含义与like操作符的模式匹配操作相同。
注意:mysql数据库的user表中host的值为“*”或者空,表示所有外部IP都可以连接,但是不包括本地服务器localhost,因此,如果要包括本地服务器,必须单独为localhost赋予权限。
(5)授予super、process、file权限给用户zj3@%
MySQL[mysql]>grantsuper,process,fileon*.*to'zj3'@'%';
QueryOK,0rowsaffected,1warning(0.00sec)
因为这几个权限都是属于管理权限,因此不能够指定某个数据库,on后面必须跟“.”,下面语法将提示错误
MySQL[mysql]>grantsuper,process,fileont2.*to'zj3'@'%';
ERROR1221(HY000):IncorrectusageofDBGRANTandGLOBALPRIVILEGES
(6)只授予登录权限给zj4@localhost
MySQL[mysql]>grantusageon*.*to'zj4'@'localhost';
QueryOK,0rowsaffected,2warnings(0.01sec)
MySQL[mysql]>exit
Bye
zj@bogon:~$mysql-uzj4-p
Enterpassword:
WelcometotheMySQLmonitor.Commandsendwith;or\g.
YourMySQLconnectionidis78
Serverversion:5.7.18-logSourcedistribution
Copyright(c)2000,2017,Oracleand/oritsaffiliates.Allrightsreserved.
OracleisaregisteredtrademarkofOracleCorporationand/orits
affiliates.Othernamesmaybetrademarksoftheirrespective
owners.
Type'help;'or'\h'forhelp.Type'\c'toclearthecurrentinputstatement.
MySQL[(none)]>showdatabases;
+--------------------+
|Database|
+--------------------+
|information_schema|
+--------------------+
1rowinset(0.02sec)
usage权限只能用于数据库登录,不能执行任何操作
2.查看账号权限
账号创建好后,可以通过如下命令查看权限:
showgrantsforuser@host;
示例:
MySQL[(none)]>showgrantsforzj@localhost;
+-------------------------------------------------------------------+
|Grantsforzj@localhost|
+-------------------------------------------------------------------+
|GRANTALLPRIVILEGESON*.*TO'zj'@'localhost'WITHGRANTOPTION|
+-------------------------------------------------------------------+
1rowinset(0.01sec)
3.更改账号权限
可以进行权限的新增和回收。和创建账号一样,权限变更也有两种方法:使用grant(新增)和revoke(回收)语句,或者更改权限表。
示例:
(1)zj4@localhost目前只有登录权限
MySQL[(none)]>showgrantsforzj4@localhost;
+-----------------------------------------+
|Grantsforzj4@localhost|
+-----------------------------------------+
|GRANTUSAGEON*.*TO'zj4'@'localhost'|
+-----------------------------------------+
1rowinset(0.00sec)
(2)赋予zj4@localhost所有数据库上的所有表的select权限
MySQL[(none)]>grantselecton*.*to'zj4'@'localhost';
QueryOK,0rowsaffected,1warning(0.00sec)
MySQL[(none)]>showgrantsforzj4@localhost;
+------------------------------------------+
|Grantsforzj4@localhost|
+------------------------------------------+
|GRANTSELECTON*.*TO'zj4'@'localhost'|
+------------------------------------------+
1rowinset(0.00sec)
(3)继续给zj4@localhost赋予select和insert权限,和已有的select权限进行合并
MySQL[(none)]>showgrantsfor'zj4'@'localhost';
+--------------------------------------------------+
|Grantsforzj4@localhost|
+--------------------------------------------------+
|GRANTSELECT,INSERTON*.*TO'zj4'@'localhost'|
+--------------------------------------------------+
1rowinset(0.00sec)
revoke语句可以回收已经赋予的权限,对于上面的例子,这里决定要收回zj4@localhost上的insert和select权限:
MySQL[(none)]>revokeselect,inserton*.*fromzj4@localhost;
QueryOK,0rowsaffected,1warning(0.00sec)
MySQL[(none)]>showgrantsforzj4@localhost;
+-----------------------------------------+
|Grantsforzj4@localhost|
+-----------------------------------------+
|GRANTUSAGEON*.*TO'zj4'@'localhost'|
+-----------------------------------------+
1rowinset(0.00sec)
usage权限不能被回收,也就是说,revoke用户并不能删除用户。
4.修改账号密码
(1)可以用mysqladmin命令在命令行指定密码。
shell>mysqladmin-uuser_name-hhost_namepassword"123456"
(2)执行setpassword语句。
mysql>setpasswordfor'username'@'%'=password('pwd');
如果是更改自己的密码,可以省略for语句
mysql>setpassword=password('pwd');
(3)可以在全局级别使用grantusage语句(在“.”)来指定某个账户的密码而不影响账户当前的权限。
mysql>grantusageon*.*to'username'@'%'identifiedby'pwd';
5.删除账号
要彻底的删除账号,可以使用dropuser:
dropuserzj@localhost;
6.账号资源限制
创建MySQL账号时,还有一类选项称为账号资源限制,这类选项的作用是限制每个账号实际具有的资源限制,这里的“资源”主要包括:
max_queries_per_hourcount:单个账号每小时执行的查询次数
max_upodates_per_hourcount:单个账号每小时执行的更新次数
max_connections_per_hourcount:单个账号每小时连接服务器的次数
max_user_connectionscount:单个账号并发连接服务器的次数
相关文章推荐
- 带您深入了解MySQL权限管理要学习的东西
- 带您深入了解oracle权限管理
- 带您深入了解oracle权限管理
- mysql 权限管理详解
- mysql用户权限管理(Grant,Revoke)
- 第三十一天 MySQL并发控制、存储引擎介绍、用户权限管理、缓存管理和数据类型选择
- mysql用户权限管理
- mysql权限管理
- 项目实战篇-餐馆管理系统—MFC,PHP,MySql:4.权限管理模块
- MySQL学习系列12: 权限管理
- 关于文件权限管理了解和使用
- mysql之权限管理
- mysql 用户管理和权限管理
- 【转载】MySQL之权限管理
- ExtJs 4.*、Guice3、MyBatis3、MySql架构的 弱权限管理框架 更新 一
- mysql 用户及权限管理
- mysql 用户及权限管理 允许远程连接
- mysql 用户管理和权限设置
- MySQL权限管理-安全与效率的折中
- mysql创建用户且给用户权限管理某表