六、Mysql - 用户管理 - 权限(二)

目录

知识点1:权限的传递

with grant option语句

查看给wangsh用户授予的权限语句

知识点2:权限的分类

全局权限

 数据库权限

 表权限

列权限

权限管控-颗粒度问题

 知识点3:权限检查顺序

知识点4:废除权限


知识点1:权限的传递

之前我们给wangsh用户添加了select和insert权限,但是wangsh用户是不可以新建数据库,表操作的,那么如何能给wangsh用户更大的权限呢?

wangsh@(none) 14:59  mysql>create database test;
ERROR 1044 (42000): Access denied for user 'wangsh'@'%' to database 'test'

示例:给予wangsh用户所有操作的权限

root@(none) 14:56  mysql>grant all on *.* to 'wangsh'@'%' ;
Query OK, 0 rows affected (0.00 sec)

然后让wangsh用户重新登录mysql服务,就能拥有这些权利了

wangsh@(none) 15:10  mysql>show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| sanchuang          |
| student            |
| sys                |
| wangsh             |
+--------------------+
7 rows in set (0.01 sec)

wangsh@(none) 15:10  mysql>create database t1;
Query OK, 1 row affected (0.00 sec)

############################################################# 

with grant option语句

with grant option

        通过在grant语句的最后使用该语句,就允许被授权的用户把得到的权限继续授予其他用户。

我们已经使用grant all 语句给wangsh用户授予了很大的权利,但是wangsh用户还是不是最大的权利,因为最大的权利者是root用户,一般只有root用户能给其他用户授权。

示例:查看用户有哪些权利,

所有用户都存放在user表里面

root@mysql 15:20  mysql>select * from user\G;
*************************** 5. row ***************************
                  Host: %
                  User: wangsh
           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: N
       References_priv: Y
            Index_priv: Y
            Alter_priv: Y
          Show_db_priv: Y
            Super_priv: Y
 Create_tmp_table_priv: Y
      Lock_tables_priv: Y
          Execute_priv: Y
       Repl_slave_priv: Y
      Repl_client_priv: Y
      Create_view_priv: Y
        Show_view_priv: Y
   Create_routine_priv: Y
    Alter_routine_priv: Y
      Create_user_priv: Y
            Event_priv: Y
          Trigger_priv: Y
Create_tablespace_priv: Y
              ssl_type: 
            ssl_cipher: 
           x509_issuer: 
          x509_subject: 
         max_questions: 0
           max_updates: 0
       max_connections: 0
  max_user_connections: 0
                plugin: mysql_native_password
 authentication_string: *6BB4837EB74329105EE4568DDA7DC67ED2CA2AD9
      password_expired: N
 password_last_changed: 2022-08-11 11:55:59
     password_lifetime: NULL
        account_locked: N

可以看到,wangsh用户只有grant权限没有,

我们可以使用with grant option语句来给wangsh用户授予grant权限

示例:给wangsh用户授予grant权限。

root@mysql 15:23  mysql>grant all on *.* to 'wangsh'@'%' with grant option;
Query OK, 0 rows affected (0.00 sec)

root@mysql 15:25  mysql>

可以看到wangsh用户已经拥有了grant权限,已经和root用户平起平坐

*************************** 5. row ***************************
                  Host: %
                  User: wangsh
           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
       References_priv: Y
            Index_priv: Y
            Alter_priv: Y
          Show_db_priv: Y
            Super_priv: Y
 Create_tmp_table_priv: Y
      Lock_tables_priv: Y
          Execute_priv: Y
       Repl_slave_priv: Y
      Repl_client_priv: Y
      Create_view_priv: Y
        Show_view_priv: Y
   Create_routine_priv: Y
    Alter_routine_priv: Y
      Create_user_priv: Y
            Event_priv: Y
          Trigger_priv: Y
Create_tablespace_priv: Y
              ssl_type: 
            ssl_cipher: 
           x509_issuer: 
          x509_subject: 
         max_questions: 0
           max_updates: 0
       max_connections: 0
  max_user_connections: 0
                plugin: mysql_native_password
 authentication_string: *6BB4837EB74329105EE4568DDA7DC67ED2CA2AD9
      password_expired: N
 password_last_changed: 2022-08-11 11:55:59
     password_lifetime: NULL
        account_locked: N

查看给wangsh用户授予的权限语句

root@mysql 15:30  mysql>show grants for 'wangsh'@'%';
+---------------------------------------------------------------+
| Grants for wangsh@%                                           |
+---------------------------------------------------------------+
| GRANT ALL PRIVILEGES ON *.* TO 'wangsh'@'%' WITH GRANT OPTION |
| GRANT SELECT, INSERT ON `student`.* TO 'wangsh'@'%'           |
+---------------------------------------------------------------+
2 rows in set (0.00 sec)

root@mysql 15:30  mysql>

使用grant语句创建一个新用户

root@mysql 15:30  mysql>grant all on *.* to 'zhangj'@'%' identified by '123123';
Query OK, 0 rows affected, 1 warning (0.00 sec)

创建用户成功,但是有一条警告信息,告诉我们使用grant创建用户将会被弃用,让我们使用creat user的方式来创建用户。


root@mysql 15:36  mysql>show warnings;
+---------+------+------------------------------------------------------------------------------------------------------------------------------------+
| Level   | Code | Message                                                                                                                            |
+---------+------+------------------------------------------------------------------------------------------------------------------------------------+
| Warning | 1287 | Using GRANT for creating new user is deprecated and will be removed in future release. Create new user with CREATE USER statement. |
+---------+------+------------------------------------------------------------------------------------------------------------------------------------+
1 row in set (0.00 sec)

#############################################################

知识点2:权限的分类

按照权限的授予级别,可以分成以下几类

全局权限

全局权限 Global Privileges

        它是管理权限,应用到服务器上面的所有数据库上面,要授予全局权限,使用 on *.* 的语法

        Mysql把全局权限保存在mysql.user表里面

 数据库权限

数据库权限 Database Privileges

        应用到某个特定的数据库的所有对象上面,要授予数据库权限,使用 on db_name.*的语法,

        Mysql 把数据库权限保存在mysql.db表里面

 表权限

表权限Table Privileges

        应用到某个特定的表的所有列上面,使用 on db_name.tbl_name 的语法,

        Mysql把表权限保存在myslq.tables_priv表里面。

列权限

列权限 Column Privileges:

        应用到某个特定表的单个列上面,要授予列权限,必须在权限名称后面跟小括号

        其中写上列名

        Mysql把列权限保存在mysql.columns_priv 表里面

权限管控-颗粒度问题

mysql.user   全局权限, 

mysql.db  只能操作某个数据库

mysql.table_priv  只能操作某个表

mysql.columns  只能对某个列进行操作、

############################################################# 

 知识点3:权限检查顺序

 使用skip-grant-tables语句破解root用户密码跳过的授权表格就是这些表格。

############################################################# 

知识点4:废除权限

 给予某个用户很大的权利,如何将权利回收?

语法格式:

REVOKE
    priv_type [(column_list)]
      [, priv_type [(column_list)]] ...
    ON [object_type] priv_level
    FROM user [, user] ...

REVOKE ALL [PRIVILEGES], GRANT OPTION
    FROM user [, user] ...

REVOKE INSERT ON *.* FROM 'jeffrey'@'localhost';

示例:先授予shiyaling用户所有权利,然后使用revoke语句废除他的所有权限

root@mysql 16:03  mysql>grant all on *.* to 'shiyaling'@'%' with grant option;
Query OK, 0 rows affected (0.00 sec)

root@mysql 16:04  mysql>show grants for 'shiyaling'@'%';
+------------------------------------------------------------------+
| Grants for shiyaling@%                                           |
+------------------------------------------------------------------+
| GRANT ALL PRIVILEGES ON *.* TO 'shiyaling'@'%' WITH GRANT OPTION |
+------------------------------------------------------------------+
1 row in set (0.00 sec)

root@mysql 16:05  mysql>revoke all on *.* from 'shiyaling'@'%' ;
Query OK, 0 rows affected (0.00 sec)
root@mysql 16:06  mysql>show grants for 'shiyaling'@'%';
+---------------------------------------------------------+
| Grants for shiyaling@%                                  |
+---------------------------------------------------------+
| GRANT USAGE ON *.* TO 'shiyaling'@'%' WITH GRANT OPTION |
+---------------------------------------------------------+
1 row in set (0.00 sec)

root@mysql 16:06  mysql>

使用revoke语句废除权限后,用户就只剩 USAGE权限了,这个权限是指用户只能使用,是最基本的权限,默认新建用户都只有拥有USAGE权限

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值