首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >information_schema.user_privileges和mysql.user有什么区别?

information_schema.user_privileges和mysql.user有什么区别?
EN

Database Administration用户
提问于 2014-05-22 01:50:34
回答 3查看 4.4K关注 0票数 2

我认为mysql.user中设置的特权应该反映在information_schema.user_privileges中,但是当我试图更改mysql.user中的某些特权并查询information_schema.user_privileges时,它们不匹配吗?我理解错了吗?

EN

回答 3

Database Administration用户

回答已采纳

发布于 2014-05-22 16:56:35

mysql.user是一个包含映射全局数据库特权的MyISAM表。这些特权在启动信息_SCHEMA.USER_特权时映射到MySQL中。

警告!在mysql.user上运行UPDATE命令要小心。您很容易忘记运行FLUSH PRIVILEGES;

根据关于刷新权限的MySQL文档

从mysql数据库中的授予表中重新加载特权。服务器将信息缓存在内存中,这是由于授予、创建用户、创建服务器和安装插件语句。此内存不会由相应的REVOKE、DROP、DROP和卸载插件语句释放,因此对于执行导致缓存的语句的许多实例的服务器,内存使用量将增加。可以使用刷新权限释放这个缓存的内存。

执行格兰特撤销命令时,将更改下列身份验证表

  • mysql.user
  • mysql.db
  • mysql.tables_priv
  • mysql.columns_priv

然后执行FLUSH TABLES;

您确实必须了解表的布局,才能了解如何手动更改权限。

例如,我使用以下权限创建了一个名为pam@localhost的用户

代码语言:javascript
复制
mysql> show grants for pam@localhost;
+------------------------------------------------------------------------------------------------------------+
| Grants for pam@localhost                                                                                   |
+------------------------------------------------------------------------------------------------------------+
| GRANT USAGE ON *.* TO 'pam'@'localhost' IDENTIFIED BY PASSWORD '*F925CA006C127B610C43AB06E16F92EF8712F90B' |
| GRANT SELECT, INSERT ON `edwards`.`pamela_tb1` TO 'pam'@'localhost'                                        |
| GRANT SELECT, INSERT ON `edwards`.`pamela_tb3` TO 'pam'@'localhost'                                        |
| GRANT SELECT, INSERT ON `edwards`.`pamela_tb2` TO 'pam'@'localhost'                                        |
+------------------------------------------------------------------------------------------------------------+
4 rows in set (0.00 sec)

mysql>

mysql.user对于pam@localhost是什么样子的?

代码语言:javascript
复制
mysql> select * from mysql.user where user='pam' and host='localhost'\G
*************************** 1. row ***************************
                  Host: localhost
                  User: pam
              Password: *F925CA006C127B610C43AB06E16F92EF8712F90B
           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: N
Create_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:
      password_expired: N
1 row in set (0.00 sec)

mysql>

什么?选择的特权在哪里??

它们位于mysql.tables_priv

代码语言:javascript
复制
mysql> select * from mysql.tables_priv where user='pam' and host='localhost'\G
*************************** 1. row ***************************
       Host: localhost
         Db: edwards
       User: pam
 Table_name: pamela_tb1
    Grantor: redwards@localhost
  Timestamp: 0000-00-00 00:00:00
 Table_priv: Select,Insert
Column_priv:
*************************** 2. row ***************************
       Host: localhost
         Db: edwards
       User: pam
 Table_name: pamela_tb2
    Grantor: redwards@localhost
  Timestamp: 0000-00-00 00:00:00
 Table_priv: Select,Insert
Column_priv:
*************************** 3. row ***************************
       Host: localhost
         Db: edwards
       User: pam
 Table_name: pamela_tb3
    Grantor: redwards@localhost
  Timestamp: 0000-00-00 00:00:00
 Table_priv: Select,Insert
Column_priv:
3 rows in set (0.00 sec)

mysql>

这就是mysqld期望在授权表中组织和分配用户权限的方式。

如果您将mysql.user中用于pam@localhost的所有特权更新为'Y‘并运行FLUSH PRIVILEGES;,则会将pam@localhost提升为全局超级用户。

这就是为什么你最好做格兰特撤销,并且相信mysqld会做对的。

票数 0
EN

Database Administration用户

发布于 2014-05-22 03:36:05

INFORMATION_SCHEMA提供对数据库元数据的访问、有关MySQL服务器的信息(例如数据库或表的名称)、列的数据类型或访问权限。有时用于这些信息的其他术语是数据字典和系统目录。

源- http://dev.mysql.com/doc/refman/5.5/en/information-schema.html

您应该使用适当的命令来修改帐户和flush PRIVILEGES,以重新加载特权。

  • http://dev.mysql.com/doc/refman/5.5/en/account-management-sql.html
  • http://dev.mysql.com/doc/refman/5.5/en/flush.html
票数 0
EN

Database Administration用户

发布于 2014-05-22 09:02:16

I_S USER_PRIVILEGES表提供有关全局特权的信息。此信息来自mysql.user授予表。这是一个非标准的表。它从mysql.user表中获取其值。

票数 0
EN
页面原文内容由Database Administration提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://dba.stackexchange.com/questions/65638

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档