迹忆客 专注技术分享

当前位置:主页 > 学无止境 > 数据库 > MySQL >

在 MySQL 中实现刷新权限

作者:迹忆客 最近更新:2024/03/26 浏览次数:

本教程通过示例解释了刷新权限操作及其实现。


在 MySQL 中实现刷新权限

MySQL 通过授权表实现用户管理,以确保服务器中的安全性和访问控制。通常,root 用户直接通过 UPDATE 语句或通过 GRANT 关键字间接修改授权表。

但是,直接修改授权表需要刷新权限操作或重新启动/重新加载服务器以反映更改。

在 MySQL 中,可以使用三个关键字调用刷新权限操作,对于对服务器执行多个更改更加方便和高效。

  1. FLUSH PRIVILEGES 命令。
  2. mysqladmin flush-privileges 命令。
  3. 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-privilegesmysqladmin 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 命令。

转载请发邮件至 1244347461@qq.com 进行申请,经作者同意之后,转载请以链接形式注明出处

本文地址:

相关文章

如何在 MySQL 中声明和使用变量

发布时间:2024/03/26 浏览次数:102 分类:MySQL

当你需要在 MySQL 中的脚本中存储单个值时,最好的方法是使用变量。变量有不同的种类,有必要知道何时以及如何使用每种类型。

在 MySQL 中格式化和存储电话号码

发布时间:2024/03/26 浏览次数:77 分类:MySQL

本教程说明了 MySQL 数据库中电话号码字段的处理和格式设置。还讨论了根据数据库要求选择最合适的数据类型。

MySQL 中的减法运算

发布时间:2024/03/25 浏览次数:140 分类:MySQL

本教程将指导你如何在 MySQL 中模拟 MINUS 操作。它还通过不同的示例教你各种模拟 MINUS 操作的方法。

MySQL 中的安全模式

发布时间:2024/03/25 浏览次数:193 分类:MySQL

本教程帮助我们了解 MySQL 数据库中的安全模式。

MySQL 中的 MUL vs PRI vs UNI

发布时间:2024/03/25 浏览次数:190 分类:MySQL

本教程将指导你了解 MySQL 中 MUL、PRI 和 UNI 键之间的区别。它还强调了它们中的每一个的使用。

扫一扫阅读全部技术教程

社交账号
  • https://www.github.com/onmpw
  • qq:1244347461

最新推荐

教程更新

热门标签

扫码一下
查看教程更方便