所以我要做一些繁琐的工作。我们有大约 10 台服务器,每台服务器大约有 4 个 MySQL 用户(加上 mysql-root)。所有这些用户都拥有对其各自架构的完全访问权限。
现在我们决定他们只应享有基本SELECT, INSERT, UPDATE
权利(因为这就是他们所需要的)。
看着它们REVOKE
,我感觉既然它们已经添加,GRANT ALL ON db.*
我需要首先撤销所有权限,然后授予我需要的权限。
现在的问题是,有没有一个好的方法可以同时为所有用户(在一台服务器上)执行此操作,还是我需要逐一检查?
编辑:
设置如下:
服务器 1:
具有 db_a 访问权限的用户 dbuser_a
用户 dbuser_b 有权访问 db_b ...
服务器2:
具有 db_c 访问权限的用户 dbuser_c
用户 dbuser_d 有权访问 db_d ...
答案1
创建一个~/.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
对授予您想要的特权执行相同操作。
更新
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