允许任何有效的MySQL用户访问特定的表

我有一个数据库表,我希望所有有效的MySQL用户都可以访问(它用于跟踪多个数据库中的一组特定统计信息)。 有没有办法做到这一点?

我知道你可以通配符主机,但你似乎不能通配用户名。 基本上,我想这样做:

REVOKE ALL PRIVILEGES ON `database`.`table` FROM ''@'%'; GRANT INSERT, UPDATE ON `database`.`table` TO ''@'%'; 

遍历mysql.user表中的所有MySQL用户并授予您想要的权限:

 mysql --skip-column-names -e "select user,host from mysql.user where host='%';" \ | grep -v root | \ while read account; do mysql -e "revoke all privileges on db.table from \ '`echo $account | awk '{ print $1 }'`'@'%';" mysql -e "grant insert, update on db.table to \ '`echo $account | awk '{ print $1 }'`'@'%';" done mysql -e "flush privileges;" 

UPDATE

正如我在下面的评论中所说的,你可以使用incron来监视/var/lib/mysql/mysql/user.MYI并在创build用户时运行上面的脚本。

安装incron并启动它:

 # /etc/init.d/incrond start Starting Filesystem event daemon (incrond): [ OK ] 

mysql用户创buildincron表:

 # incrontab -l -u mysql /var/lib/mysql/mysql/user.MYI IN_MODIFY,IN_CLOSE_WRITE /var/lib/mysql/update_privileges.sh 

当您创build一个新的MySQL用户时,您将在/var/log/cron看到以下内容:

 incrond[13084]: (mysql) CMD (/var/lib/mysql/update_privileges.sh) 

新用户将被自动授予db.table INSERT, UPDATE权限:

 +-----------------------------------------------------------------------------------------------------------+ | Grants for testuser@% | +-----------------------------------------------------------------------------------------------------------+ | GRANT USAGE ON *.* TO 'testuser'@'%' IDENTIFIED BY PASSWORD '*' | | GRANT INSERT, UPDATE ON `db`.`table` TO 'testuser'@'%' | +-----------------------------------------------------------------------------------------------------------+ 

我想知道是否有办法让最新的MySQL用户授予这个权限,而不是为所有用户做。

MySQL不支持在mysql文档中的用户名中使用通配符,除了每次添加新用户时使用任何脚本添加额外的用户权限以外,没有办法。

实际上,没有任何用户指定的授权声明将授予访问匿名用户帐户,您将需要设置和使用匿名用户帐户的密码来访问表。

如果你想在脚本中使用它,我宁愿build议使用一个单独的mysql用户从表中收集信息,而不是授予权限和使用个人mysql用户凭证。

参考文献:

http://dev.mysql.com/doc/refman/5.1/en/grant.html#grant-table-privileges

http://dev.mysql.com/doc/refman/5.5/en/default-privileges.html