通过修改MySQL用户授权IP了解其用户管理
admin
2023-05-16 20:22:15
0

下文主要给大家带来通过修改MySQL用户授权IP了解其用户管理,希望这些内容能够带给大家实际用处,这也是我编辑通过修改MySQL用户授权IP了解其用户管理这篇文章的主要目的。好了,废话不多说,大家直接看下文吧。

 

近期把数据库用户的授权IP由IP段, 调整为具体IP了, 用意是排查问题时, 可以定位到具体应用云服务器, 或针对性的做某些设置.

 

本以为一个UPDATE就可搞定, 测试后却发现被修改的用户只剩下USAGE权限了, 演示如下:

 

mysql> SELECT user, host, password FROM mysql.userWHERE user = 'zzzz_acc'\G

*************************** 1. row***************************

   user: zzzz_acc

   host: 192.168.4.%

password:*2B979ED0716E5FCB08CA97C284FE270B65991F34

1 row in set (0.00 sec)

 

mysql> SHOW GRANTS FOR 'zzzz_acc'@'192.168.4.%'\G

*************************** 1. row***************************

Grants for zzzz_acc@192.168.4.%: GRANTUSAGE ON *.* TO 'zzzz_acc'@'192.168.4.%' IDENTIFIED BY PASSWORD'*2B979ED0716E5FCB08CA97C284FE270B65991F34'

*************************** 2. row***************************

Grants for zzzz_acc@192.168.4.%: GRANTSELECT, INSERT, DELETE, EXECUTE ON `zzzz`.* TO 'zzzz_acc'@'192.168.4.%'

2 rows in set (0.00 sec)

 

mysql> UPDATE mysql.user SET host ='192.168.4.14' WHERE user = 'zzzz_acc' AND host = '192.168.4.%';

Query OK, 1 row affected (0.00 sec)

Rows matched: 1  Changed: 1 Warnings: 0

 

手动修改权限表后, 要FLUSH下:

 

mysql> FLUSH PRIVILEGES;

Query OK, 0 rows affected (0.00 sec)

 

mysql> SHOW GRANTS FOR'zzzz_acc'@'192.168.4.14'\G

*************************** 1. row***************************

Grants for zzzz_acc@192.168.4.14: GRANTUSAGE ON *.* TO 'zzzz_acc'@'192.168.4.14' IDENTIFIED BY PASSWORD'*2B979ED0716E5FCB08CA97C284FE270B65991F34'

1 row in set (0.00 sec)

 

原因呢, 是该用户权限是数据库级别的, mysql.db表也要做相应的修改:

 

mysql> SELECT host, db, user FROM dbWHERE host = '192.168.4.%'\G

*************************** 1. row***************************

host: 192.168.4.%

  db:zzzz

user: zzzz_acc

1 row in set (0.00 sec)

 

mysql> UPDATE mysql.db SET host ='192.168.4.14' WHERE user = 'zzzz_acc' AND host = '192.168.4.%';

Query OK, 1 row affected (0.00 sec)

Rows matched: 1  Changed: 1 Warnings: 0

 

mysql> FLUSH PRIVILEGES;

Query OK, 0 rows affected (0.00 sec)

 

瞧, 这时权限回来了:

 

mysql> SHOW GRANTS FOR'zzzz_acc'@'192.168.4.14'\G

*************************** 1. row***************************

Grants for zzzz_acc@192.168.4.14: GRANTUSAGE ON *.* TO 'zzzz_acc'@'192.168.4.14' IDENTIFIED BY PASSWORD'*2B979ED0716E5FCB08CA97C284FE270B65991F34'

*************************** 2. row***************************

Grants for zzzz_acc@192.168.4.14: GRANTSELECT, INSERT, DELETE, EXECUTE ON `zzzz`.* TO 'zzzz_acc'@'192.168.4.14'

2 rows in set (0.00 sec)

 

总结下, 就是一般不要手动直接修改权限表, 官方文档也不建议这样. MySQL中对于用户的管理, 如创建用户, 调整权限, 修改密码等, 都提供了相应的命令. 此处利用RENAME USER, 即可一步到位:

 

mysql> RENAME USER'zzzz_acc'@'192.168.4.%' TO 'zzzz_acc'@'192.168.4.14';

Query OK, 0 rows affected (0.01 sec)

 

但也存在着变通, 这里想起之前遇到的一个问题, 数据库的管理用户'root'@'localhost'有ALL PRIVILEGES的权限, 但没有了GRANT OPTION权限(不要问我为什么会这样). 即该管理用户, 不能赋予和撤销其它用户的权限, 也意味着不能创建实际有效的用户了, 演示如下:

 

mysql> SHOW GRANTS\G

*************************** 1. row***************************

Grants for root@localhost: GRANT ALLPRIVILEGES ON *.* TO 'root'@'localhost' IDENTIFIED BYPASSWORD '*2B979ED0716E5FCB08CA97C284FE270B65991F34'

1 row in set (0.00 sec)

 

mysql> CREATE USER'zzzz_acc2'@'192.168.4.15' IDENTIFIED BY 'zzzz_acc2';

Query OK, 0 rows affected (0.15 sec)

 

mysql> GRANT SELECT, INSERT, DELETE,EXECUTE ON `zzzz`.* TO 'zzzz_acc2'@'192.168.4.15';

ERROR 1044 (42000): Access denied for user'root'@'localhost' to database 'zzzz'

 

怎么办呢, 也只能直接修改mysql.user表的grant_priv字段了:

 

mysql> SELECT user, host, password,grant_priv FROM mysql.user WHERE user = 'root' AND host = 'localhost'\G

*************************** 1. row***************************

      user: root

     host: localhost

 password: *2B979ED0716E5FCB08CA97C284FE270B65991F34

grant_priv: N

1 row in set (0.00 sec)

 

mysql> UPDATE mysql.user SET grant_priv= 'Y' WHERE user = 'root' AND host = 'localhost';

Query OK, 1 row affected (0.00 sec)

Rows matched: 1  Changed: 1 Warnings: 0

 

mysql> FLUSH PRIVILEGES;

Query OK, 0 rows affected (0.00 sec)

 

mysql> SHOW GRANTS\G

*************************** 1. row***************************

Grants for root@localhost: GRANT ALLPRIVILEGES ON *.* TO 'root'@'localhost' IDENTIFIED BY PASSWORD'*2B979ED0716E5FCB08CA97C284FE270B65991F34' WITH GRANTOPTION

1 row in set (0.00 sec)

 

下面注意了, 虽然看到了GRANT OPTION权限, 还要重新登陆下, 该权限才能生效, 类似于修改了全局参数, 要重新连接下一样, 否则还会遇到上面的报错.

 

mysql> GRANT SELECT, INSERT,DELETE, EXECUTE ON `zzzz`.* TO 'zzzz_acc2'@'192.168.4.15';

Query OK, 0 rows affected (0.00 sec)

 

mysql> SHOW GRANTS FOR'zzzz_acc2'@'192.168.4.15'\G

*************************** 1. row***************************

Grants for zzzz_acc2@192.168.4.15: GRANTUSAGE ON *.* TO 'zzzz_acc2'@'192.168.4.15' IDENTIFIED BY PASSWORD'*0CF81DDE0A7213E4AB18F2925316C049BCF3F2E8'

*************************** 2. row***************************

Grants for zzzz_acc2@192.168.4.15: GRANTSELECT, INSERT, DELETE, EXECUTE ON `zzzz`.* TO 'zzzz_acc2'@'192.168.4.15'

2 rows in set (0.00 sec)

 

上面两个示例涉及到了MySQL权限表中的user, 和db. 前者记录了用户的全局权限和一些非权限信息, 后者记录了数据库级别权限; 与权限相关的还有table_priv, columns_priv和 proc_priv表, 分别对应了表, 列, 和存储过程(函数)级别的权限(proxies_priv代理用户权限暂不提).

 

最后再看下MySQL 5.6版本在管理用户密码部分中不太完善的地方, 由于项目临时调试, 需要开放线上数据库一个特定时长的临时只读权限(在从库上), 可是5.6版本只提供了密码过期设置, 并没有对过期时长做限制. 这些细节在5.7版本中有很多完善, 如密码何时过期, 用户锁定, SSL加密连接设置等.

对于以上关于通过修改MySQL用户授权IP了解其用户管理,大家是不是觉得非常有帮助。如果需要了解更多内容,请继续关注我们的行业资讯,相信你会喜欢上这些内容的。 

相关内容

热门资讯

8年后回应姗姗来迟,真相还有人... 八年了,李小璐想起来回应“做头发”事件了。而且这次,她一次性抛出了不少新信息,表示广为流传的“做头发...
男子在攀岩馆从高空坠落,目击者... 8月2日中午,北京大型攀岩馆超级奥攀,一名男子从高空坠落,随后被送医治疗,多名网友发帖留言称确有此事...
小红书黑红启示录:旅游帖诈骗冲... #小红书旅游帖诈骗#冲上了热搜。一位妈妈带孩子在大连,沿着小红书攻略找那条海底隧道——满心想着给孩子...
天然气灶不打火怎么回事 可能由以下原因导致天然气灶不打火:1、燃气阀门未开启:检查气阀是否处于关闭状态。2、灶具没有点火:可...
空调遥控器按开关没反应 原因可能是遥控器里面的发光管损坏,导致屏幕不显示,可以维修或更换遥控器解决;原因可能是遥控器的红外发...
油烟机开关按了没反应 油烟机开关按了没反应油烟机开关按了没反应的原因有可能是开关按钮损坏;电源接头没有连接;电路板损坏、传...
马桶水箱按钮按不动 有因有:马桶按钮内的弹簧生锈老化;出水阀被泥沙等杂物卡住;水漂卡住了。需打开马桶水箱看看联动冲水阀连...
德意油烟机按不动怎么办 如果德意油烟机按不动,首先需要确认是否是电源问题。你可以检查油烟机的插头是否插紧了,插座是否正常工作...
台湾民众党已不是一人政党!柯文... 海峡导报综合报道 台湾民众党2日举办7周年党庆,创党主席柯文哲上台致辞时获得在场人士欢呼,声音久久不...
男子买到破损游泳“跟屁虫”,退... “几十块钱的东西还保你啥子命?这就是一个玩具!”7月22日,成都市民李先生向红星新闻反映,自己周末准...