我认为mysql.user中设置的特权应该反映在information_schema.user_privileges中,但是当我试图更改mysql.user中的某些特权并查询information_schema.user_privileges时,它们不匹配吗?我理解错了吗?
发布于 2014-05-22 16:56:35
表mysql.user是一个包含映射全局数据库特权的MyISAM表。这些特权在启动信息_SCHEMA.USER_特权时映射到MySQL中。
警告!在mysql.user上运行UPDATE命令要小心。您很容易忘记运行FLUSH PRIVILEGES;。
根据关于刷新权限的MySQL文档
从mysql数据库中的授予表中重新加载特权。服务器将信息缓存在内存中,这是由于授予、创建用户、创建服务器和安装插件语句。此内存不会由相应的REVOKE、DROP、DROP和卸载插件语句释放,因此对于执行导致缓存的语句的许多实例的服务器,内存使用量将增加。可以使用刷新权限释放这个缓存的内存。
执行格兰特和撤销命令时,将更改下列身份验证表
mysql.usermysql.dbmysql.tables_privmysql.columns_priv然后执行FLUSH TABLES;。
您确实必须了解表的布局,才能了解如何手动更改权限。
例如,我使用以下权限创建了一个名为pam@localhost的用户
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是什么样子的?
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
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会做对的。
发布于 2014-05-22 03:36:05
INFORMATION_SCHEMA提供对数据库元数据的访问、有关MySQL服务器的信息(例如数据库或表的名称)、列的数据类型或访问权限。有时用于这些信息的其他术语是数据字典和系统目录。
源- http://dev.mysql.com/doc/refman/5.5/en/information-schema.html
您应该使用适当的命令来修改帐户和flush PRIVILEGES,以重新加载特权。
发布于 2014-05-22 09:02:16
I_S USER_PRIVILEGES表提供有关全局特权的信息。此信息来自mysql.user授予表。这是一个非标准的表。它从mysql.user表中获取其值。
https://dba.stackexchange.com/questions/65638
复制相似问题