在 MySQL 中实现刷新权限
- 在 MySQL 中实现刷新权限
- MySQL 中的授权表
-
在 MySQL 中使用
FLUSH PRIVILEGES
关键字提交对服务器的直接权限更改 -
使用
GRANT
关键字修改 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
命令。
Victor is an experienced Python Developer, Machine Learning Engineer and Technical Writer with interests across various fields of science and engineering. He is passionate about learning new technologies and skill and working on challenging problems. He enjoys teaching, intellectual discourse, and gaming, among other things.
LinkedIn GitHub