MySQL怎样进行权限治理?
MySQL 的权限表在数据库启动的时候就载入内存,当会员通过身份认证后,就在内存中进行响应权限的存取,这样,此会员就可以在数据库中做权限范畴内的各种操纵了。【视频教程举荐: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主动新建新会员,除非还指定了密码) SET SESSION sql_mode='STRICT_TRANS_TABLES,NO_ENGINE_SUBSTITUTION';
1. 新建会员 zj@localhost,并给予所有数据库上的所有表的 select 权限
MySQL [mysql]> grant select on *.* to zj@localhost; Query OK, 0 rows affected, 2 warnings (0.00 sec) MySQL [mysql]> select * from user where user="zj" and host='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 * from db where user='zj' \G ; Empty set (0.00 sec)
可以发明,user 表的 select_priv 列是 “Y”,而 db 表中并没有记载,也就是说,对所有数据库都拥有雷同的权限的会员并不需要记载到 db 表,而仅仅需要将 user 表中的 select_priv 改为 “Y” 即可。换句话说,user 表中的每个权限都代表了对所有数据库都有权限。
3. 将 zj@localhost 上的权限改为只对 t2 数据库上所有表的 select 权限。
MySQL [mysql]> revoke select on *.* from zj@localhost; Query OK, 0 rows affected, 1 warning (0.02 sec) MySQL [mysql]> grant select on t2.* to zj@localhost; Query OK, 0 rows affected, 1 warning (0.04 sec) MySQL [mysql]> select * from user where user='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 * from db where user='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]> grant all privileges on *.* to zj@localhost; Query OK, 0 rows affected, 2 warnings (0.00 sec) MySQL [mysql]> select * from user where user="zj" and host="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)]> grant all privileges on *.* to zj@localhost with grant option; Query OK, 0 rows affected, 1 warning (0.01 sec) MySQL [mysql]> select * from user where user="zj" and host='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]> grant all privileges on *.* to zj@localhost identified by '123' with grant option; Query OK, 0 rows affected, 2 warnings (0.01 sec) MySQL [mysql]> select * from user where user="zj" and host="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-25 20:29:42 password_lifetime: NULL
可以发明,密码酿成了一堆加密后的字符串。
(4) 新建新会员 zj2,可以从任何 IP 连贯,权限为对 t2 数据库里的所有表进行 select 、update、insert 和 delete 操纵,初始密码为“123”
MySQL [mysql]> grant select ,insert, update,delete on t2.* to 'zj2'@'%' identified by '123'; Query OK, 0 rows affected, 1 warning (0.00 sec) MySQL [mysql]> select * from user where user='zj2' and host="%" \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-25 20:37:49 password_lifetime: NULL MySQL [mysql]> select * from db where user="zj2" and host='%' \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]> grant super,process,file on *.* to 'zj3'@'%'; Query OK, 0 rows affected, 1 warning (0.00 sec)
由于这几个权限都是属于治理权限,因而不克不及够指定某个数据库,on 背面必需跟 “.”,下面语法将提醒差错
MySQL [mysql]> grant super,process,file on t2.* to 'zj3'@'%'; ERROR 1221 (HY000): Incorrect usage of DB GRANT and GLOBAL PRIVILEGES
(6) 只授予登录权限给 zj4@localhost
MySQL [mysql]> grant usage on *.* to 'zj4'@'localhost'; Query OK, 0 rows affected, 2 warnings (0.01 sec) MySQL [mysql]> exit Bye zj@bogon:~$ mysql -uzj4 -p Enter password: Welcome to the MySQL monitor. Commands end with ; or \g. Your MySQL connection id is 78 Server version: 5.7.18-log Source distribution Copyright (c) 2000, 2017, Oracle and/or its affiliates. All rights reserved. Oracle is a registered trademark of Oracle Corporation and/or its affiliates. Other names may be trademarks of their respective owners. Type 'help;' or '\h' for help. Type '\c' to clear the current input statement. MySQL [(none)]> show databases; +--------------------+ | Database | +--------------------+ | information_schema | +--------------------+ 1 row in set (0.02 sec)
usage 权限只能用于数据库登录,不克不及施行任何操纵
2. 查看账号权限
账号新建好后,可以通过如下下令查看权限:
show grants for user@host;
示例:
MySQL [(none)]> show grants for zj@localhost; +-------------------------------------------------------------------+ | Grants for zj@localhost | +-------------------------------------------------------------------+ | GRANT ALL PRIVILEGES ON *.* TO 'zj'@'localhost' WITH GRANT OPTION | +-------------------------------------------------------------------+ 1 row in set (0.01 sec)
3. 更改账号权限
可以进行权限的新增和回购。和新建账号同样,权限变动也有两种办法:运用 grant(新增) 和 revoke (回购) 语句,或者更改权限表。
示例:
(1) zj4@localhost 当前只要登录权限
MySQL [(none)]> show grants for zj4@localhost; +-----------------------------------------+ | Grants for zj4@localhost | +-----------------------------------------+ | GRANT USAGE ON *.* TO 'zj4'@'localhost' | +-----------------------------------------+ 1 row in set (0.00 sec)
(2) 给予 zj4@localhost 所有数据库上的所有表的 select 权限
MySQL [(none)]> grant select on *.* to 'zj4'@'localhost'; Query OK, 0 rows affected, 1 warning (0.00 sec) MySQL [(none)]> show grants for zj4@localhost; +------------------------------------------+ | Grants for zj4@localhost | +------------------------------------------+ | GRANT SELECT ON *.* TO 'zj4'@'localhost' | +------------------------------------------+ 1 row in set (0.00 sec)
(3) 继续给 zj4@localhost 给予 select 和 insert 权限,和已有的 select 权限进行合并
MySQL [(none)]> show grants for 'zj4'@'localhost'; +--------------------------------------------------+ | Grants for zj4@localhost | +--------------------------------------------------+ | GRANT SELECT, INSERT ON *.* TO 'zj4'@'localhost' | +--------------------------------------------------+ 1 row in set (0.00 sec)
revoke 语句可以回购已经给予的权限,关于上面的例子,这里决议要收回 zj4@localhost 上的 insert 和 select 权限:
MySQL [(none)]> revoke select,insert on *.* from zj4@localhost; Query OK, 0 rows affected, 1 warning (0.00 sec) MySQL [(none)]> show grants for zj4@localhost; +-----------------------------------------+ | Grants for zj4@localhost | +-----------------------------------------+ | GRANT USAGE ON *.* TO 'zj4'@'localhost' | +-----------------------------------------+ 1 row in set (0.00 sec)
usage 权限不克不及被回购,也就是说,revoke 会员并不克不及删除会员。
4. 修改账号密码
(1) 可以用 mysqladmin 下令在下令行指定密码。
shell> mysqladmin -u user_name -h host_name password "123456"
(2) 施行 set password 语句。
mysql> set password for 'username'@'%' = password('pwd');
要是是更改本人的密码,可以省去 for 语句
mysql> set password=password('pwd');
(3) 可以在全局级别运用 grant usage 语句(在“.”)来指定某个账户的密码而不影响账户目前的权限。
mysql> grant usage on *.* to 'username'@'%' identified by 'pwd';
5. 删除账号
要彻底的删除账号,可以运用 drop user :
drop user zj@localhost;
6. 账号资源限定
新建 MySQL 账号时,还有一类选项称为账号资源限定
,这类选项的作用是限定每个账号现实拥有的资源限定,这里的“资源”主要包含:
max_queries_per_hour count : 单个账号每小时施行的查询次数
max_upodates_per_hour count : 单个账号每小时施行的更新次数
max_connections_per_hour count : 单个账号每小时连贯办事器的次数
max_user_connections count : 单个账号并发连贯办事器的次数
2017-10-30 发表
MySQL 权限治理
权限控制
mysql
1.5k 次浏览 · 读完需要 38 分钟
4
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主动新建新会员,除非还指定了密码) SET SESSION sql_mode='STRICT_TRANS_TABLES,NO_ENGINE_SUBSTITUTION';
1. 新建会员 zj@localhost,并给予所有数据库上的所有表的 select 权限
MySQL [mysql]> grant select on *.* to zj@localhost; Query OK, 0 rows affected, 2 warnings (0.00 sec) MySQL [mysql]> select * from user where user="zj" and host='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 * from db where user='zj' \G ; Empty set (0.00 sec)
可以发明,user 表的 select_priv 列是 “Y”,而 db 表中并没有记载,也就是说,对所有数据库都拥有雷同的权限的会员并不需要记载到 db 表,而仅仅需要将 user 表中的 select_priv 改为 “Y” 即可。换句话说,user 表中的每个权限都代表了对所有数据库都有权限。
3. 将 zj@localhost 上的权限改为只对 t2 数据库上所有表的 select 权限。
MySQL [mysql]> revoke select on *.* from zj@localhost; Query OK, 0 rows affected, 1 warning (0.02 sec) MySQL [mysql]> grant select on t2.* to zj@localhost; Query OK, 0 rows affected, 1 warning (0.04 sec) MySQL [mysql]> select * from user where user='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 * from db where user='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]> grant all privileges on *.* to zj@localhost; Query OK, 0 rows affected, 2 warnings (0.00 sec) MySQL [mysql]> select * from user where user="zj" and host="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)]> grant all privileges on *.* to zj@localhost with grant option; Query OK, 0 rows affected, 1 warning (0.01 sec) MySQL [mysql]> select * from user where user="zj" and host='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]> grant all privileges on *.* to zj@localhost identified by '123' with grant option; Query OK, 0 rows affected, 2 warnings (0.01 sec) MySQL [mysql]> select * from user where user="zj" and host="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-25 20:29:42 password_lifetime: NULL
可以发明,密码酿成了一堆加密后的字符串。
(4) 新建新会员 zj2,可以从任何 IP 连贯,权限为对 t2 数据库里的所有表进行 select 、update、insert 和 delete 操纵,初始密码为“123”
MySQL [mysql]> grant select ,insert, update,delete on t2.* to 'zj2'@'%' identified by '123'; Query OK, 0 rows affected, 1 warning (0.00 sec) MySQL [mysql]> select * from user where user='zj2' and host="%" \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-25 20:37:49 password_lifetime: NULL MySQL [mysql]> select * from db where user="zj2" and host='%' \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]> grant super,process,file on *.* to 'zj3'@'%'; Query OK, 0 rows affected, 1 warning (0.00 sec)
由于这几个权限都是属于治理权限,因而不克不及够指定某个数据库,on 背面必需跟 “.”,下面语法将提醒差错
MySQL [mysql]> grant super,process,file on t2.* to 'zj3'@'%'; ERROR 1221 (HY000): Incorrect usage of DB GRANT and GLOBAL PRIVILEGES
(6) 只授予登录权限给 zj4@localhost
MySQL [mysql]> grant usage on *.* to 'zj4'@'localhost'; Query OK, 0 rows affected, 2 warnings (0.01 sec) MySQL [mysql]> exit Bye zj@bogon:~$ mysql -uzj4 -p Enter password: Welcome to the MySQL monitor. Commands end with ; or \g. Your MySQL connection id is 78 Server version: 5.7.18-log Source distribution Copyright (c) 2000, 2017, Oracle and/or its affiliates. All rights reserved. Oracle is a registered trademark of Oracle Corporation and/or its affiliates. Other names may be trademarks of their respective owners. Type 'help;' or '\h' for help. Type '\c' to clear the current input statement. MySQL [(none)]> show databases; +--------------------+ | Database | +--------------------+ | information_schema | +--------------------+ 1 row in set (0.02 sec)
usage 权限只能用于数据库登录,不克不及施行任何操纵
2. 查看账号权限
账号新建好后,可以通过如下下令查看权限:
show grants for user@host;
示例:
MySQL [(none)]> show grants for zj@localhost; +-------------------------------------------------------------------+ | Grants for zj@localhost | +-------------------------------------------------------------------+ | GRANT ALL PRIVILEGES ON *.* TO 'zj'@'localhost' WITH GRANT OPTION | +-------------------------------------------------------------------+ 1 row in set (0.01 sec)
3. 更改账号权限
可以进行权限的新增和回购。和新建账号同样,权限变动也有两种办法:运用 grant(新增) 和 revoke (回购) 语句,或者更改权限表。
示例:
(1) zj4@localhost 当前只要登录权限
MySQL [(none)]> show grants for zj4@localhost; +-----------------------------------------+ | Grants for zj4@localhost | +-----------------------------------------+ | GRANT USAGE ON *.* TO 'zj4'@'localhost' | +-----------------------------------------+ 1 row in set (0.00 sec)
(2) 给予 zj4@localhost 所有数据库上的所有表的 select 权限
MySQL [(none)]> grant select on *.* to 'zj4'@'localhost'; Query OK, 0 rows affected, 1 warning (0.00 sec) MySQL [(none)]> show grants for zj4@localhost; +------------------------------------------+ | Grants for zj4@localhost | +------------------------------------------+ | GRANT SELECT ON *.* TO 'zj4'@'localhost' | +------------------------------------------+ 1 row in set (0.00 sec)
(3) 继续给 zj4@localhost 给予 select 和 insert 权限,和已有的 select 权限进行合并
MySQL [(none)]> show grants for 'zj4'@'localhost'; +--------------------------------------------------+ | Grants for zj4@localhost | +--------------------------------------------------+ | GRANT SELECT, INSERT ON *.* TO 'zj4'@'localhost' | +--------------------------------------------------+ 1 row in set (0.00 sec)
revoke 语句可以回购已经给予的权限,关于上面的例子,这里决议要收回 zj4@localhost 上的 insert 和 select 权限:
MySQL [(none)]> revoke select,insert on *.* from zj4@localhost; Query OK, 0 rows affected, 1 warning (0.00 sec) MySQL [(none)]> show grants for zj4@localhost; +-----------------------------------------+ | Grants for zj4@localhost | +-----------------------------------------+ | GRANT USAGE ON *.* TO 'zj4'@'localhost' | +-----------------------------------------+ 1 row in set (0.00 sec)
usage 权限不克不及被回购,也就是说,revoke 会员并不克不及删除会员。
4. 修改账号密码
(1) 可以用 mysqladmin 下令在下令行指定密码。
shell> mysqladmin -u user_name -h host_name password "123456"
(2) 施行 set password 语句。
mysql> set password for 'username'@'%' = password('pwd');
要是是更改本人的密码,可以省去 for 语句
mysql> set password=password('pwd');
(3) 可以在全局级别运用 grant usage 语句(在“.”)来指定某个账户的密码而不影响账户目前的权限。
mysql> grant usage on *.* to 'username'@'%' identified by 'pwd';
5. 删除账号
要彻底的删除账号,可以运用 drop user :
drop user zj@localhost;
6. 账号资源限定
新建 MySQL 账号时,还有一类选项称为账号资源限定
,这类选项的作用是限定每个账号现实拥有的资源限定,这里的“资源”主要包含:
max_queries_per_hour count : 单个账号每小时施行的查询次数
max_upodates_per_hour count : 单个账号每小时施行的更新次数
max_connections_per_hour count : 单个账号每小时连贯办事器的次数
max_user_connections count : 单个账号并发连贯办事器的次数
评价
以上就是MySQL怎样进行权限治理?的细致内容,更多请关注 百分百源码网 其它相干文章!