跳到主要内容

MySQL有关权限的表 ?

参考答案:

MySQL 的权限系统涉及多个表,这些表都存储在 mysql 数据库中。以下是与 MySQL 权限相关的几个主要表:

  1. user

    • 描述:存储了所有用户的全局权限。
    • 主要列:Host, User, Password, Select_priv, Insert_priv, Update_priv, ... 等。
  2. db

    • 描述:存储了针对特定数据库的权限。
    • 主要列:Host, Db, User, Select_priv, Insert_priv, Update_priv, ... 等。
  3. tables_priv

    • 描述:存储了针对特定表的权限。
    • 主要列:Host, Db, User, Table_name, Select_priv, Insert_priv, Update_priv, ... 等。
  4. columns_priv

    • 描述:存储了针对特定表的特定列的权限。
    • 主要列:Host, Db, User, Table_name, Column_name, Select_priv, Insert_priv, Update_priv, ... 等。
  5. procs_priv

    • 描述:存储了针对存储过程和函数的权限。
    • 主要列:Host, Db, User, Routine_name, Routine_type, Execute_priv 等。
  6. proxies_priv

    • 描述:存储了代理用户权限,即哪些用户可以代理为其他用户执行操作。
    • 主要列:Host, User, Proxied_host, Proxied_user
  7. global_privs

    • 描述:这是一个内部表,用于存储全局权限的缓存。
    • 注意:此表通常由 MySQL 内部使用,不应直接修改。
  8. db_privs

    • 描述:这是一个内部表,用于存储数据库权限的缓存。
    • 注意:此表通常由 MySQL 内部使用,不应直接修改。
  9. tables_privs

    • 描述:这是一个内部表,用于存储表权限的缓存。
    • 注意:此表通常由 MySQL 内部使用,不应直接修改。
  10. columns_privs

    • 描述:这是一个内部表,用于存储列权限的缓存。
    • 注意:此表通常由 MySQL 内部使用,不应直接修改。

当你更改 MySQL 的权限时(例如,使用 GRANTREVOKE 语句),这些更改实际上会反映在上述表中。但是,MySQL 也提供了一个权限缓存机制,这意味着在内存中也会有权限的副本。因此,在某些情况下,可能需要执行 FLUSH PRIVILEGES; 来清除缓存并确保权限更改立即生效。

请注意,直接修改这些表是不推荐的,因为可能会导致权限系统的混乱或不一致。始终使用 GRANTREVOKE 和其他相关语句来更改权限。