MySQL 锁定账户

MySQL 锁定账户

锁定是一种机制,用于防止未经授权的对数据库的修改。对于数据库的安全性来说,它是至关重要的。在本文中,我们将学习如何使用 CREATE USER… ACCOUNT LOCKALTER 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. 

MySQL用户帐户锁定示例

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

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

首先,我们将使用以下语句创建一个名为 javatpoint@localhost 的新用户帐户并处于锁定状态:

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

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

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

我们应该获得以下输出:

MySQL 锁定账户

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

如果我们尝试访问用户帐户javatpoint并连接到MySQL服务器,尝试将失败,并且我们将收到一个错误:

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

这是错误信息:

MySQL 锁定账户

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 锁定账户

现在,我们将使用 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';

我们可以看到下面的输出,这表明用户帐户 markus 已成功锁定:

MySQL 锁定账户

如果我们想要展示被锁定账户的连接MySQL服务器的尝试次数,我们需要使用locked_connects变量。每次我们尝试连接被锁定的用户账户时,MySQL会把这个变量的状态增加1。请参考下面的命令:

mysql> SHOW GLOBAL STATUS LIKE 'Locked_connects';

执行后,我们将得到如下输出,显示我们已经尝试了三次连接被锁定的用户帐户:

MySQL 锁定账户

Camera课程

Python教程

Java教程

Web教程

数据库教程

图形图像教程

办公软件教程

Linux教程

计算机教程

大数据教程

开发工具教程