我是靠谱客的博主 闪闪可乐,最近开发中收集的这篇文章主要介绍MySQL数据库的权限表user 表db 表tables_priv 表columns_priv表,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

文章目录

  • user 表
  • db 表
  • tables_priv 表
  • columns_priv表

MySQL 数据库中与权限相关的表:user、db、tables_priv、columns_priv。

user 表

mysql> select * from mysql.userG
*************************** 1. row ***************************
                  Host: localhost
                  User: root
           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: *6969E01196BECE74725D5CD9F8C58F1D7529C352
      password_expired: N
 password_last_changed: 2020-07-27 10:06:49
     password_lifetime: NULL
        account_locked: N

mysql.user 表列出可以连接服务器的用户信息,并且存储了用户的全局权限信息。在 mysql.user 表启用的任何权限均是全局权限,即适用于所有数据库的所有表。

如上面的查询结果所示,用户 root@localhostSelect_priv 字段值为 Y,说明该用户可以查询任意数据库的任意表。

当你执行下面的授权语句后,如果 user 表中不存在 test@% 用户,那么就会往 user 表中插入一条记录,如果存在则会将 Select_priv 字段的值设为 Y

mysql> grant select on *.* to 'test'@'%';

db 表

mysql> select * from mysql.dbG
*************************** 1. row ***************************
                 Host: %
                   Db: test
                 User: 
          Select_priv: Y
          Insert_priv: Y
          Update_priv: Y
          Delete_priv: Y
          Create_priv: Y
            Drop_priv: Y
           Grant_priv: N
      References_priv: Y
           Index_priv: Y
           Alter_priv: Y
Create_tmp_table_priv: Y
     Lock_tables_priv: Y
     Create_view_priv: Y
       Show_view_priv: Y
  Create_routine_priv: Y
   Alter_routine_priv: N
         Execute_priv: N
           Event_priv: Y
         Trigger_priv: Y
*************************** 2. row ***************************
                 Host: localhost
                   Db: performance_schema
                 User: mysql.session
          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: N
Create_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: N

mysql.db 表存储用户对数据库的权限数据。这里开启的权限适用于一个数据库中的所有表。

我们看下上面查询结果的第一条记录可得知,任何用户都可以访问数据库 test,因为 User 字段是空。但是用户除了 Grant_privAlter_routine_privExecute_priv 没有权限之外,其它权限都有。

我们再看下上面查询结果的第二条记录可得知,用户 mysql.session@localhost 对数据库 performance.schema 除了拥有 Select_priv 权限之外,其它权限都没有。

当你执行下面的语句后,如果 mysql.db 表不存在用户 test@% 对数据库 test 的授权记录,那么会往 mysql.db 表插入一条记录;如果存在该用户的授权记录,则会将字段 Select_priv 的值设为 Y

mysql> grant select on testdb.* to 'test'@'%';

tables_priv 表

mysql> select * from tables_privG 
*************************** 1. row ***************************
       Host: localhost
         Db: sys
       User: mysql.sys
 Table_name: sys_config
    Grantor: root@localhost
  Timestamp: 2020-07-27 10:06:49
 Table_priv: Select
Column_priv: 
*************************** 3. row ***************************
       Host: 127.0.0.1
         Db: qydpw
       User: lwx
 Table_name: tf_user
    Grantor: root@localhost
  Timestamp: 2021-10-07 13:16:11
 Table_priv: Select,Update
Column_priv: 

tables_priv 表存储着用户对某个表的权限数据,这里开启的一个权限适用于一个表的所有列。

看上面的查询结果的第一条记录可得知,用户 mysql.sys@localhost 对表 sys.sys_config 只有 Selec 权限;看上面查询结果的第二条记录可得知,用户 lwx@127.0.0.1 对表 qydpw.tf_userSelectUpdate 权限。

当你执行下面的语句后,如果表中没有用户对应的记录,则会往表中插入一条记录;如果存在该用户的记录,则会往字段 Table_priv 存入一个值 Select

mysql> grant select on testdb.student to 'test'@'%';

columns_priv表

columns_priv 表指定列级权限。这张表保存着用户对某个表的特定列的权限数据。这里指定的权限适用于一个表的特定列。

当你执行下面的语句:

mysql> grant select(advice_id,user_id) on qydpw.tf_advice to lwx@127.0.0.1;

会往表 columns_priv 插入两条记录,表示用户 lwx@127.0.0.1 对表的 advice_iduser_id 拥有 Select 权限:

mysql> select * from mysql.columns_priv;
+-----------+-------+------+------------+-------------+---------------------+-------------+
| Host      | Db    | User | Table_name | Column_name | Timestamp           | Column_priv |
+-----------+-------+------+------------+-------------+---------------------+-------------+
| 127.0.0.1 | qydpw | lwx  | tf_advice  | advice_id   | 0000-00-00 00:00:00 | Select      |
| 127.0.0.1 | qydpw | lwx  | tf_advice  | user_id     | 0000-00-00 00:00:00 | Select      |
+-----------+-------+------+------------+-------------+---------------------+-------------+
2 rows in set (0.00 sec)

最后

以上就是闪闪可乐为你收集整理的MySQL数据库的权限表user 表db 表tables_priv 表columns_priv表的全部内容,希望文章能够帮你解决MySQL数据库的权限表user 表db 表tables_priv 表columns_priv表所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(58)

评论列表共有 0 条评论

立即
投稿
返回
顶部