旗下导航:搜·么
当前位置:网站首页 > MySQL教程 > 正文

MySQL怎样举行权限治理?【MySQL教程】,权限控制,mysql

作者:搜教程发布时间:2019-12-01分类:MySQL教程浏览:68评论:0


导读:本篇文章给人人带来的内容是引见MySQL怎样举行权限治理?有肯定的参考价值,有须要的朋侪能够参考一下,愿望对你有所协助。MySQL的权限表在数据库启动的时刻就载入内存,当...
本篇文章给人人带来的内容是引见MySQL怎样举行权限治理?有肯定的参考价值,有须要的朋侪能够参考一下,愿望对你有所协助。

MySQL 的权限表在数据库启动的时刻就载入内存,当用户经由历程身份认证后,就在内存中举行响应权限的存取,如许,此用户就能够在数据库中做权限局限内的种种操纵了。【视频教程引荐:MySQL 教程】

一、权限表的存取

在权限存取的两个历程当中,体系会用到 “mysql” 数据库(装置 MySQL 时被建立,数据库称号叫“mysql”) 中 user、host 和 db 这3个最重要的权限表。

在这 3 个表中,最重要的示意 user 表,其次是 db 表,host 表在大多数情况下并不运用。

user 中的列重要分为 4 个部份:用户列、权限列、平安列和资本掌握列。

通经常使用的最多的是用户列和权限列,个中权限列又分为平常权限和治理权限。平常权限用于数据库的操纵,比方 select_privsuper_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 : 单个账号并发衔接服务器的次数

  1. 专栏

  2. 落棋不悔

  3. 文章概况









waterandair 955 宣布于 落棋不悔

2017-10-30 宣布

MySQL 权限治理


  • 权限掌握

  • mysql

1.5k 次浏览 · 读完须要 38 分钟



4


MySQL 的权限表在数据库启动的时刻就载入内存,当用户经由历程身份认证后,就在内存中举行响应权限的存取,如许,此用户就能够在数据库中做权限局限内的种种操纵了。

一、权限表的存取

在权限存取的两个历程当中,体系会用到 “mysql” 数据库(装置 MySQL 时被建立,数据库称号叫“mysql”) 中 user、host 和 db 这3个最重要的权限表。

在这 3 个表中,最重要的示意 user 表,其次是 db 表,host 表在大多数情况下并不运用。

user 中的列重要分为 4 个部份:用户列、权限列、平安列和资本掌握列。

通经常使用的最多的是用户列和权限列,个中权限列又分为平常权限和治理权限。平常权限用于数据库的操纵,比方 select_privsuper_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怎样举行权限治理?的细致内容,更多请关注ki4网别的相干文章!

标签:权限控制mysql


欢迎 发表评论: