访问权限_揭秘一条select语句,在MySQL中权限访问控制内幕

4084b919e328ea00887410f7f845be69.png

在MySQL数据库中,权限访问控制实际上有两大模块。
第一:用户管理模块
第二:用户访问动作控制模块,用户访问动作最常见就是DML,DDL

其中用户管理模块的作用,就是验证用户能否合法登录mysql数据库,而用户访问动作控制模块,则控制着合法用户能做动作。

其实这么说还是有些抽象,那来看看mysql数据库中关于权限访问控制的4张表。

mysql.usermysql.dbmysql.tables_privmysql.columns_priv

用户管理模块由mysql.user控制,用户访问动作控制模块由mysql.db,mysql.tables_priv,mysql.columns_priv三张表一起控制。

其权限验证大概流程如下所示

de4e498b537bcf4ae61dfb9de10ad452.png

举一个select语句的例子

select id,name from test.t4 where status='delete';

用户要执行这个select语句整个流程


第一步:用户登录验证

应用首先需要连接mysql数据库,连接时验证host,user,password,如果不满足,则连接被拒绝,例如:用户名不正确,密码不正确,host主机被限制在特殊网段(192.168.2.%),或者限制本地登录(localhost)

第二步:global级别权限验证

验证global级别是否有select权限,即验证mysql.user表中的select权限,如果Select_priv为Y,则不做后续验证

mysql>  select * from mysql.user where user='abc'G;*************************** 1. row ***************************                  Host: %                  User: abc           Select_priv: N           Insert_priv: N           Update_priv: N           Delete_priv: N           Create_priv: N             Drop_priv: N           Reload_priv: N         Shutdown_priv: N          Process_priv: N             File_priv: N            Grant_priv: N       References_priv: N            Index_priv: N            Alter_priv: N          Show_db_priv: N            Super_priv: N Create_tmp_table_priv: N      Lock_tables_priv: N          Execute_priv: N       Repl_slave_priv: N      Repl_client_priv: N      Create_view_priv: N        Show_view_priv: N   Create_routine_priv: N    Alter_routine_priv: N      Create_user_priv: N            Event_priv: N          Trigger_priv: NCreate_tablespace_priv: N              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: *0D3CED9BEC10A777AEC23CCC353A8C08A633045E      password_expired: N password_last_changed: 2020-09-01 00:52:37     password_lifetime: NULL        account_locked: N1 row in set (0.00 sec)

第三步:验证db级别select权限,如果有,则后续不验证

mysql> select * from mysql.db where user='abc'G;*************************** 1. row ***************************                 Host: %                   Db: test                 User: abc          Select_priv: Y          Insert_priv: N          Update_priv: N          Delete_priv: N          Create_priv: N            Drop_priv: N           Grant_priv: N      References_priv: N           Index_priv: N           Alter_priv: NCreate_tmp_table_priv: N     Lock_tables_priv: N     Create_view_priv: N       Show_view_priv: N  Create_routine_priv: N   Alter_routine_priv: N         Execute_priv: N           Event_priv: N         Trigger_priv: N1 row in set (0.00 sec)

第四步:验证表级别权限,如果有,则后续不验证

mysql> select * from mysql.tables_priv where user='abc'G;*************************** 1. row ***************************       Host: %         Db: test       User: abc Table_name: t4    Grantor: root@localhost  Timestamp: 0000-00-00 00:00:00 Table_priv: SelectColumn_priv: 1 row in set (0.00 sec)

第五步:验证列级别权限,如果有,则后续不验证

mysql> select * from columns_priv;+------+------+------+------------+-------------+---------------------+-------------+| Host | Db   | User | Table_name | Column_name | Timestamp           | Column_priv |+------+------+------+------------+-------------+---------------------+-------------+| %    | test | abc  | t4         | id          | 0000-00-00 00:00:00 | Select      || %    | test | abc  | t4         | name        | 0000-00-00 00:00:00 | Select      || %    | test | abc  | t4         | status      | 0000-00-00 00:00:00 | Select      |+------+------+------+------------+-------------+---------------------+-------------+3 rows in set (0.00 sec)

如果以上都验证都通过,则拒接执行select语句,上述详细流程图如下所示

6b258eb35b3997fcea629d4dc9d4f43c.png

这个mysql权限访问控制内幕,你get了吧。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值