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

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

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

我知道您可以使用通配符主机,但您似乎无法使用通配符用户名。本质上,我想这样做:

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

答案1

循环遍历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;"

更新

正如我在下面的评论中所说,你可以使用因克龙/var/lib/mysql/mysql/user.MYI每当创建用户时监视并运行上述脚本。

安装 incron 并启动它:

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

为用户创建 incron 表mysql

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

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

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

并且新用户将自动获得INSERT, UPDATE以下权限db.table

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

我想知道是否有办法获取最新的 MySQL 用户并为其授予权限,而不是为所有用户授予权限。

答案2

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

实际上,未指定任何用户的授权语句将授予匿名用户帐户的访问权限,并且您需要设置并使用匿名用户帐户的密码来访问该表。

如果您尝试在脚本中使用它,我建议使用单独的 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

相关内容