程序员社区

MySQL系列教程 --- 28、MySQL锁定账户

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

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

CREATE USER  account_name IDENTIFIED  BY 'password'  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';  

我们应该得到以下输出:

file

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

如果我们尝试访问用户帐户 javatpoint 连接到 MySQL 服务器,则尝试失败,我们将收到错误消息:

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

这是错误消息:

file

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已成功登录。

file

现在,我们将使用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 已成功锁定:

file

如果我们想显示连接到锁定帐户的 MySQL 服务器的尝试次数,我们需要 lock_connects 变量。每次我们尝试连接锁定的用户帐户时,MySQL 都会将此变量的状态加 1。请参阅以下命令:

mysql> SHOW GLOBAL STATUS LIKE 'Locked_connects';  

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

file

赞(0) 打赏
未经允许不得转载:IDEA激活码 » MySQL系列教程 --- 28、MySQL锁定账户

一个分享Java & Python知识的社区