MySQL - 帐户锁定

MySQL - 帐户锁定 首页 / MySQL入门教程 / MySQL - 帐户锁定

锁是一种机制,用于防止对无涯教程的数据库进行未经授权的修改。这对数据库的安全至关重要。在本文中,将学习如何使用 CREATE USER…ACCOUNT LOCK ALTER TABLE…ACCOUNT LOCK 语句在MySQL服务器中锁定用户帐户。

可以使用 CREATE USER ... ACCOUNT LOCK语句来锁定用户帐户,如下所示:

CREATE USER account_name IDENTIFIED BY 'password' ACCOUNT LOCK;

ACCOUNT LOCK子句指定新用户帐户的初始锁定状态。如果未在语句中指定此子句,则默认情况下,新创建的用户以解锁状态存储。如果在用户创建期间启用了 validate_password 插件,则即使没有密码,也无法创建没有密码的帐户。

MySQL 还允许无涯教程通过使用ALTER USER…ACCOUNT LOCK语句对现有用户帐户提供锁定,如下所示:

ALTER USER account_name IDENTIFIED BY 'password' ACCOUNT LOCK;

如果不使用语句指定ACCOUNT LOCK子句,则帐户锁定状态将保持不变。

MySQL使用mysql.user系统表的 account_locked列来存储帐户锁定状态。可以使用 SHOW CREATE USER 语句来验证帐户是否已解锁。如果此列值为 Y ,则表示该帐户已被锁定。如果包含 N ,则表示该帐户已解锁。

如果尝试访问锁定的帐户,则尝试失败,并且MySQL发出错误,将以下消息写入错误日志:

Access denied for user 'user_name'@'host_name'.
An account is locked. 

用户帐户锁定示例

让通过示例了解锁定用户帐户的工作方式:

1.使用ACCOUNT LOCK子句锁定新的用户帐户

首先将使用以下语句在锁定状态下创建一个名为 learnfk @ localhost 的新用户帐户:

mysql> CREATE USER IF NOT EXISTS learnfk@localhost 
IDENTIFIED BY 'jtp123456'
ACCOUNT LOCK;  

接下来,将执行以下语句以显示用户帐户及其状态:

mysql> SELECT user, host, account_locked
FROM mysql.user
WHERE user = 'learnfk' AND host = 'localhost';

应该得到以下输出:

MySQL Lock Account

在此输出中,可以看到 mysql.user 系统表中的 account_locked 列表示Y。这意味着用户名 learnfk 已锁定服务器。

如果无涯教程尝试访问用户帐户learnfk以连接到MySQL Server,则尝试失败,并且将收到错误消息:

mysql -u learnfk -p
Enter password: *********

这是错误消息:

MySQL Lock Account

2.为现有用户帐户锁定MySQL帐户

可以通过使用以下语句创建一个名为 markus @ localhost 的新用户帐户来理解它:

mysql> CREATE USER IF NOT EXISTS markus@localhost 
IDENTIFIED BY 'mark12345';  

接下来,将使用新创建的用户帐户markus @ localhost登录MySQL服务器,如下所示:

mysql -u markus -p
Enter password: *********

无涯教程将获得以下输出,这意味着用户帐户markus @ localhost已成功登录。

MySQL Lock Account

现在,将使用 ALTER TABLE LOCK ACCOUNT 语句来锁定此用户帐户,如下所示:

mysql> ALTER USER markus@localhost ACCOUNT LOCK;

同样,将执行以下语句以显示用户状态:

mysql> SELECT user, host, account_locked
FROM mysql.user
WHERE user = 'markus' AND host = 'localhost';

无涯教程可以看到以下输出,指示用户帐户标记已成功锁定:

MySQL Lock Account

如果想显示连接到锁定帐户的MySQL Server的尝试次数,则需要locked_connects变量。每次尝试连接锁定的用户帐户时,MySQL都会将此变量的状态增加1。请参见以下命令:

无涯教程网

mysql> SHOW GLOBAL STATUS LIKE 'Locked_connects';

执行后将获得以下输出,该输出显示无涯教程已经尝试了三次来连接锁定的用户帐户:

MySQL Lock Account

祝学习愉快!(内容编辑有误?请选中要编辑内容 -> 右键 -> 修改 -> 提交!)

技术教程推荐

深入拆解Java虚拟机 -〔郑雨迪〕

从0开始学微服务 -〔胡忠想〕

MySQL实战45讲 -〔林晓斌〕

用户体验设计实战课 -〔相辉〕

WebAssembly入门课 -〔于航〕

深度学习推荐系统实战 -〔王喆〕

跟着高手学复盘 -〔张鹏〕

搞定音频技术 -〔冯建元 〕

eBPF核心技术与实战 -〔倪朋飞〕

好记忆不如烂笔头。留下您的足迹吧 :)