如何快速临时禁止某账户登入
角色ROLES管理需要先激活
关于授权的其他几点补充
如何复制/复用账户密码
1. 快速临时禁止某用户登入
有几个方法:
修改其密码
ALTER USER x IDENTIFIED BY 'new_passwd'
,或者将其修改为随机密码ALTER USER x IDENTIFIED BY RANDOM PASSWORD
;锁定其账户
ALTER USER x LOCK ACCOUNT
;
2. 角色ROLES管理
把角色/ROLES授予某个账号后,记得还要再激活才行:
# 创建ROLE r1并授予用户u1
mysql> CREATE ROLE r1;
mysql> GRANT SELECT ON sbtest.* TO r1;
mysql> GRANT r1 to u1;
# 激活
mysql> SET DEFAULT ROLE r1 TO u1;
关于ROLES还有其他几个有趣的事:
和USERS一样,都存储在mysql.user表。
新创建的ROLE默认是没有密码的 & 密码过期 & 处于LOCK状态。
可以为ROLE设置密码,并对其UNLOCK后(执行ALTER USER命令),也可以像USER那样正常登入了。
将ROLE授予某个账户后,授权不能立即生效,需要新建立连接才可以(如果是直接对账户GRANT授权,无需重连就能立即生效)。
3. 关于授权的其他几点补充
可以对某个表单独授予CREATE\DROP\ALTER等权限。
创建临时表(CREATE TEMPORARY TABLES)的授权只能针对某个DB,不能指定具体数据表名。
无法回收USAGE权限。也就是说想要禁用某账户的话,要么DROP,要么参考上一条方法,修改其密码或将其LOCK,而不能通过回收USAGE权限将其禁用。
利用GRANT授权后,是能立即生效的。也就是说,如果在一个事务中发现权限不够,立即请管理员授权,(不用重新连接)直接重试一次事务,即可成功。
MySQL授权支持具体到某个列,但也