在 MySQL 中实现刷新权限
本教程通过示例解释了刷新权限操作及其实现。
在 MySQL 中实现刷新权限
MySQL 通过授权表实现用户管理,以确保服务器中的安全性和访问控制。通常,root 用户
直接通过 UPDATE
语句或通过 GRANT
关键字间接修改授权表。
但是,直接修改授权表需要刷新权限操作或重新启动/重新加载服务器以反映更改。
在 MySQL 中,可以使用三个关键字调用刷新权限操作,对于对服务器执行多个更改更加方便和高效。
FLUSH PRIVILEGES
命令。mysqladmin flush-privileges
命令。mysqladmin reload
命令。
MySQL 中的授权表
了解 MySQL 授权表可以为刷新权限提供更好的上下文。如前所述,grants 表是一个系统表,用于存储有关 MySQL 服务器连接中各种用户及其权限的信息。
要检查授权表中的权限,请使用 SHOW GRANTS
关键字。
-- Showing Grant privileges for the current user
SHOW GRANTS FOR CURRENT_USER();
/* Showing Grant privileges for specific user
SHOW GRANTS FOR [USERNAME]
*/
授权表中列出的权限描述了用户可用的限制或权限。让我们创建一个名为 test_user
的用户并在 mysql.user
表中查看该用户的权限。
-- Creating a sample user
CREATE USER 'test_user'@'localhost' IDENTIFIED BY '20202010';
-- checking assigned privileges
SELECT * FROM mysql.user where user='test_user' \G;
在 MySQL 中使用 FLUSH PRIVILEGES
关键字提交对服务器的直接权限更改
UPDATE
语句与 flushprivilege
命令相结合,授予用户特权并同时反映更改。
例如,让我们为服务器中的所有数据库授予 test_user
只读权限 (SELECT
)。
UPDATE mysql.user -- Directly modifying the user table
SET Select_priv = 'Y' -- Granting SELECT privilege for test_user
WHERE user = 'test_user';
SELECT * FROM mysql.user where user='test_user' \G; -- Viewing changes
输出:
*************************** 1. row ***************************
Host: localhost
User: test_user
Select_priv: Y <- This is the updated permission
Insert_priv: N
Update_priv: N
Delete_priv: N (OUTPUT HAS BEEN TRUNCATED)
查询结果显示用户现在对所有数据库都有 SELECT
权限。但是,此操作尚未反映在服务器中。
SHOW GRANTS FOR test_user@localhost; -- Viewing the grants for the user
输出:
+-----------------------------------------------+
| Grants for test_user@localhost |
+-----------------------------------------------+
| GRANT USAGE ON *.* TO `test_user`@`localhost` |
+-----------------------------------------------+
1 row in set (0.00 sec)
现在,让我们执行刷新特权操作。
FLUSH PRIVILEGES; -- This affects the changes made
SHOW GRANTS FOR test_user@localhost; -- Viewing the grants for the user, again
输出:
+------------------------------------------------+
| Grants for test_user@localhost |
+------------------------------------------------+
| GRANT SELECT ON *.* TO `test_user`@`localhost` |
+------------------------------------------------+
1 row in set (0.00 sec)
其他刷新权限命令也可以采用相同的方法,即 mysqladmin flush-privileges
和 mysqladmin reload
。
修改用户权限的推荐方法是通过 GRANT
命令,因为更改会自动反映,而无需刷新权限操作。
授权表的直接和间接修改之间的区别在这个官方文档中有足够详细的说明。
使用 GRANT
关键字修改 MySQL 中的用户权限
让我们给 test_user
服务器上所有数据库和表的 INSERT
权限。这一次,我们使用 GRANT ON
命令。
GRANT ON
命令语法如下。
GRANT [privilege(s)] ON [Db_name . table_name] TO user
要指定所有数据库和表,请使用通配符 *.*
代替 [Db_name . table_name]
。
GRANT INSERT ON *.* TO test_user@localhost; -- Giving test_user Insert privileges
SHOW GRANTS FOR test_user@localhost; -- Checking for reflected changes
输出:
+--------------------------------------------------------+
| Grants for test_user@localhost |
+--------------------------------------------------------+
| GRANT SELECT, INSERT ON *.* TO `test_user`@`localhost` |
+--------------------------------------------------------+
1 row in set (0.00 sec)
正如预期的那样,更改反映了没有使用 FLUSH PRIVILEGES
命令。
相关文章
如何在 MySQL 中声明和使用变量
发布时间:2024/03/26 浏览次数:102 分类:MySQL
-
当你需要在 MySQL 中的脚本中存储单个值时,最好的方法是使用变量。变量有不同的种类,有必要知道何时以及如何使用每种类型。
在 MySQL 中使用 Mysqladmin 刷新主机解除阻塞
发布时间:2024/03/26 浏览次数:53 分类:MySQL
-
你将了解阻止主机的原因。此外,通过使用 phpMyAdmin 和命令提示符刷新主机缓存来解除阻塞的不同方法和效果。
在 MySQL 中格式化和存储电话号码
发布时间:2024/03/26 浏览次数:77 分类:MySQL
-
本教程说明了 MySQL 数据库中电话号码字段的处理和格式设置。还讨论了根据数据库要求选择最合适的数据类型。
MySQL 中的减法运算
发布时间:2024/03/25 浏览次数:140 分类:MySQL
-
本教程将指导你如何在 MySQL 中模拟 MINUS 操作。它还通过不同的示例教你各种模拟 MINUS 操作的方法。
MySQL 中的 MUL vs PRI vs UNI
发布时间:2024/03/25 浏览次数:190 分类:MySQL
-
本教程将指导你了解 MySQL 中 MUL、PRI 和 UNI 键之间的区别。它还强调了它们中的每一个的使用。