• Mysql用户管理-权限(二)


    目录

    知识点1:权限的传递

    with grant option语句

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

    知识点2:权限的分类

    全局权限

     数据库权限

     表权限

    列权限

    权限管控-颗粒度问题

     知识点3:权限检查顺序

    知识点4:废除权限


    知识点1:权限的传递

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

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

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

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

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

    1. wangsh@(none) 15:10 mysql>show databases;
    2. +--------------------+
    3. | Database |
    4. +--------------------+
    5. | information_schema |
    6. | mysql |
    7. | performance_schema |
    8. | sanchuang |
    9. | student |
    10. | sys |
    11. | wangsh |
    12. +--------------------+
    13. 7 rows in set (0.01 sec)
    14. wangsh@(none) 15:10 mysql>create database t1;
    15. Query OK, 1 row affected (0.00 sec)

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

    with grant option语句

    with grant option

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

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

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

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

    1. root@mysql 15:20 mysql>select * from user\G;
    2. *************************** 5. row ***************************
    3. Host: %
    4. User: wangsh
    5. Select_priv: Y
    6. Insert_priv: Y
    7. Update_priv: Y
    8. Delete_priv: Y
    9. Create_priv: Y
    10. Drop_priv: Y
    11. Reload_priv: Y
    12. Shutdown_priv: Y
    13. Process_priv: Y
    14. File_priv: Y
    15. Grant_priv: N
    16. References_priv: Y
    17. Index_priv: Y
    18. Alter_priv: Y
    19. Show_db_priv: Y
    20. Super_priv: Y
    21. Create_tmp_table_priv: Y
    22. Lock_tables_priv: Y
    23. Execute_priv: Y
    24. Repl_slave_priv: Y
    25. Repl_client_priv: Y
    26. Create_view_priv: Y
    27. Show_view_priv: Y
    28. Create_routine_priv: Y
    29. Alter_routine_priv: Y
    30. Create_user_priv: Y
    31. Event_priv: Y
    32. Trigger_priv: Y
    33. Create_tablespace_priv: Y
    34. ssl_type:
    35. ssl_cipher:
    36. x509_issuer:
    37. x509_subject:
    38. max_questions: 0
    39. max_updates: 0
    40. max_connections: 0
    41. max_user_connections: 0
    42. plugin: mysql_native_password
    43. authentication_string: *6BB4837EB74329105EE4568DDA7DC67ED2CA2AD9
    44. password_expired: N
    45. password_last_changed: 2022-08-11 11:55:59
    46. password_lifetime: NULL
    47. account_locked: N

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

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

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

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

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

    1. *************************** 5. row ***************************
    2. Host: %
    3. User: wangsh
    4. Select_priv: Y
    5. Insert_priv: Y
    6. Update_priv: Y
    7. Delete_priv: Y
    8. Create_priv: Y
    9. Drop_priv: Y
    10. Reload_priv: Y
    11. Shutdown_priv: Y
    12. Process_priv: Y
    13. File_priv: Y
    14. Grant_priv: Y
    15. References_priv: Y
    16. Index_priv: Y
    17. Alter_priv: Y
    18. Show_db_priv: Y
    19. Super_priv: Y
    20. Create_tmp_table_priv: Y
    21. Lock_tables_priv: Y
    22. Execute_priv: Y
    23. Repl_slave_priv: Y
    24. Repl_client_priv: Y
    25. Create_view_priv: Y
    26. Show_view_priv: Y
    27. Create_routine_priv: Y
    28. Alter_routine_priv: Y
    29. Create_user_priv: Y
    30. Event_priv: Y
    31. Trigger_priv: Y
    32. Create_tablespace_priv: Y
    33. ssl_type:
    34. ssl_cipher:
    35. x509_issuer:
    36. x509_subject:
    37. max_questions: 0
    38. max_updates: 0
    39. max_connections: 0
    40. max_user_connections: 0
    41. plugin: mysql_native_password
    42. authentication_string: *6BB4837EB74329105EE4568DDA7DC67ED2CA2AD9
    43. password_expired: N
    44. password_last_changed: 2022-08-11 11:55:59
    45. password_lifetime: NULL
    46. account_locked: N

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

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

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

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

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

    1. root@mysql 15:36 mysql>show warnings;
    2. +---------+------+------------------------------------------------------------------------------------------------------------------------------------+
    3. | Level | Code | Message |
    4. +---------+------+------------------------------------------------------------------------------------------------------------------------------------+
    5. | Warning | 1287 | Using GRANT for creating new user is deprecated and will be removed in future release. Create new user with CREATE USER statement. |
    6. +---------+------+------------------------------------------------------------------------------------------------------------------------------------+
    7. 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:废除权限

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

    语法格式:

    1. REVOKE
    2. priv_type [(column_list)]
    3. [, priv_type [(column_list)]] ...
    4. ON [object_type] priv_level
    5. FROM user [, user] ...
    6. REVOKE ALL [PRIVILEGES], GRANT OPTION
    7. FROM user [, user] ...
    8. REVOKE INSERT ON *.* FROM 'jeffrey'@'localhost';

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

    1. root@mysql 16:03 mysql>grant all on *.* to 'shiyaling'@'%' with grant option;
    2. Query OK, 0 rows affected (0.00 sec)
    3. root@mysql 16:04 mysql>show grants for 'shiyaling'@'%';
    4. +------------------------------------------------------------------+
    5. | Grants for shiyaling@% |
    6. +------------------------------------------------------------------+
    7. | GRANT ALL PRIVILEGES ON *.* TO 'shiyaling'@'%' WITH GRANT OPTION |
    8. +------------------------------------------------------------------+
    9. 1 row in set (0.00 sec)
    10. root@mysql 16:05 mysql>revoke all on *.* from 'shiyaling'@'%' ;
    11. Query OK, 0 rows affected (0.00 sec)
    12. root@mysql 16:06 mysql>show grants for 'shiyaling'@'%';
    13. +---------------------------------------------------------+
    14. | Grants for shiyaling@% |
    15. +---------------------------------------------------------+
    16. | GRANT USAGE ON *.* TO 'shiyaling'@'%' WITH GRANT OPTION |
    17. +---------------------------------------------------------+
    18. 1 row in set (0.00 sec)
    19. root@mysql 16:06 mysql>

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

  • 相关阅读:
    Centos7环境下搭建Rabbitmq 集群
    动力环境监控是什么?动力环境监控系统包括哪些设备
    Python基础快速入门
    P1195 口袋的天空-Kruskal(优先队列+并查集)
    短信发送:使用RestTemplate的时候,遇到类型无法转换的问题
    Spring Web Flow入门(带详细注释)
    pytorch模型量化和移植安卓详细教程
    富格林:应用正规技巧阻挠被骗
    简单了解ARP协议
    (附源码)计算机毕业设计ssmJAVA高校田径运动会管理
  • 原文地址:https://blog.csdn.net/qq_48391148/article/details/126285934