关于在MySQL服务器上进行GRANT审查的build议

所以我在做一些单调乏味的工作。 我们有大约10台服务器,每台服务器大约有4个MySQL用户(加上mysql-root)。 所有这些用户都可以完全访问各自的模式。

现在我们已经决定他们应该只有基本的SELECT, INSERT, UPDATE权限(因为这是他们所需要的)。

看看REVOKE我感觉到,因为已经添加了GRANT ALL ON db.*我需要先撤消所有的priv,然后授予我需要的。

现在的问题。 对于所有用户(在一台服务器上)是否有一个好的方法可以同时进行,还是需要逐一进行检查?

编辑:

设置是这样的:

服务器1:

用户dbuser_a可以访问db_a

用户dbuser_b可以访问db_b …

服务器2:

用户dbuser_c可以访问db_c

用户dbuser_d可以访问db_d …

创build一个~/.my.cnf文件来存储你的MySQL密码,如下所示:

 [mysql] user = root password = secr3t host = ... 

记得chmod 600

然后,您可以使用下面的shell代码片段撤消所有用户的所有权限:

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

做同样的授予你想要的特权。


UPDATE

您也可以通过从上面删除on db.*来撤销所有权限:全局,数据库,表,例程等等on db.*

 mysql --skip-column-names -e 'select user,host from mysql.user;' | grep -v root | \ while read account; do mysql -e "revoke all privileges, grant option from '`echo $account | \ awk '{ print $1 }'`'@'`echo $account | awk '{ print $2 }'`'; flush privileges;" done