内容提要
该文章介绍了MySQL数据库中的用户和权限管理,包括权限生效时间、查看用户、创建用户、修改密码、用户授权、查看权限和删除用户权限等内容。
延伸解读
权限生效机制:内存与连接的影响
MySQL启动时将用户及权限信息从mysql库读入内存,因此直接修改表后需重启或执行flush privileges才能生效。此外,用户登录后权限信息保存在当前连接中,其他地方的权限变更仅在下一次登录时生效。这意味着权限调整后,已存在的连接不会立即获得新权限,需要重新连接。
创建用户时主机名与密码的细节
创建用户时,主机名默认值为%,表示可从任何主机连接。若省略密码,用户可无密码登录。指定主机名可限制登录来源,如localhost仅本机、192.168.1.%限制IP段。密码可单独指定,如'user3'@'127.0.0.1' identified by '123456'。合理设置主机名和密码有助于控制访问来源,提升安全性。
授权中的WITH GRANT OPTION与权限叠加
使用GRANT授权时,WITH GRANT OPTION允许用户将自己拥有的权限授予他人。若未指定,该用户无法使用GRANT命令创建用户或授权。此外,可重复使用GRANT给用户添加权限,权限会叠加。例如先授予select再授予insert,用户将同时拥有两者。这为权限管理提供了灵活性,但也需注意权限扩散风险。
查看与回收权限的实践
使用show grants可查看当前用户权限,show grants for 'user'@'host'查看指定用户权限。回收权限使用revoke语句,如revoke select(host) on mysql.user from 'user2'@'localhost'。回收后再次查看可确认权限已移除。定期检查并回收不必要的权限,有助于遵循最小权限原则,降低安全风险。
Q&A
MySQL中修改用户权限后,为什么需要执行flush privileges?
因为用户及权限信息存放在mysql库的表中,MySQL启动时这些内容被读进内存并生效。如果直接操作这些表来修改用户及权限信息,需要重启MySQL或执行flush privileges;才能使修改生效。
如何查看MySQL中所有用户?
使用命令:use mysql; select user, host from user;
创建MySQL用户时,不指定主机名和密码会有什么效果?
不指定主机名时,默认主机名为%,表示该用户可以从任何主机连接MySQL服务器;密码可以省略,表示无密码登录。例如:create user demo; 创建的用户demo可以无密码登录。
如何修改MySQL用户的登录密码?
可以通过SET PASSWORD命令修改,例如:SET PASSWORD FOR '用户名'@'主机'=PASSWORD('密码');也可以通过更新mysql.user表修改,例如:update user set authentication_string = password('321') where user = 'test1' and host = '%'; 修改后需要执行flush privileges;。
MySQL中GRANT命令的WITH GRANT OPTION选项有什么作用?
WITH GRANT OPTION选项表示该用户可以将自己拥有的权限授权给其他用户。如果不指定该选项,用户将不能使用GRANT命令创建用户或给其他用户授权。
如何查看指定MySQL用户的权限?
使用命令:show grants for 'user1'@'localhost'; 可以查看指定用户的权限。
如何删除MySQL用户的权限?
使用REVOKE命令,语法为:revoke privileges ON database.table FROM '用户名'@'主机名'; 例如:revoke select(host) on mysql.user from 'user2'@'localhost'; 删除后可以再次使用show grants查看确认。