锁是一种机制,用于防止对无涯教程的数据库进行未经授权的修改。这对数据库的安全至关重要。在本文中,将学习如何使用 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.
让通过示例了解锁定用户帐户的工作方式:
首先将使用以下语句在锁定状态下创建一个名为 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.user 系统表中的 account_locked 列表示Y。这意味着用户名 learnfk 已锁定服务器。
如果无涯教程尝试访问用户帐户learnfk以连接到MySQL Server,则尝试失败,并且将收到错误消息:
mysql -u learnfk -p Enter password: *********
这是错误消息:
可以通过使用以下语句创建一个名为 markus @ localhost 的新用户帐户来理解它:
mysql> CREATE USER IF NOT EXISTS markus@localhost IDENTIFIED BY 'mark12345';
接下来,将使用新创建的用户帐户markus @ localhost登录MySQL服务器,如下所示:
mysql -u markus -p Enter password: *********
无涯教程将获得以下输出,这意味着用户帐户markus @ localhost已成功登录。
现在,将使用 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 Server的尝试次数,则需要locked_connects变量。每次尝试连接锁定的用户帐户时,MySQL都会将此变量的状态增加1。请参见以下命令:
mysql> SHOW GLOBAL STATUS LIKE 'Locked_connects';
执行后将获得以下输出,该输出显示无涯教程已经尝试了三次来连接锁定的用户帐户:
祝学习愉快!(内容编辑有误?请选中要编辑内容 -> 右键 -> 修改 -> 提交!)