MySQL通过mysql系统数据库存储用户和权限信息,核心表为mysql.user,记录用户账户、密码哈希、认证插件及全局权限;权限分级管理,依次为全局、数据库、表、列级别,遵循“最具体优先”和累加原则;用户认证时先匹配Host和User,再根据plugin字段调用对应认证机制验证密码;可通过SHOW GRANTS、GRANT、REVOKE等命令查看和管理权限,推荐遵循最小权限原则以保障安全。

MySQL存储用户信息和权限,核心在于其内部的
mysql
user
要深入理解MySQL的用户信息与权限存储,我们得从
mysql
mysql.user
Host
user
Host
user
authentication_string
plugin
mysql_native_password
caching_sha2_password
auth_socket
_priv
Select_priv
Insert_priv
Update_priv
Delete_priv
Create_priv
Grant_priv
Super_priv
Select_priv='Y'
max_questions
max_updates
max_connections
max_user_connections
mysql.db
Host
Db
user
mydatabase
SELECT
mydatabase
Select_priv='Y'
mysql.tables_priv
mysql.db
Host
Db
user
Table_name
mydatabase.mytable
INSERT
mydatabase
INSERT
mysql.columns_priv
Host
Db
user
Table_name
Column_name
mysql.procs_priv
mysql.proxies_priv
当用户尝试连接和执行操作时,MySQL会按照一个特定的顺序来检查这些权限表:首先是
user
user
Db
tables_priv
columns_priv
谈到MySQL的用户认证,这可不是一个简单的密码比对过程,它背后有一套相对精密的机制在运作。在我看来,理解这个过程对于排查连接问题和提升安全性至关重要。
当你尝试用客户端连接到MySQL服务器时,大致会经历以下几个步骤:
Host
user
mysql.user
Host
%
192.168.1.100
user
'myuser'@'192.168.1.100'
'myuser'@'%'
'myuser'@'192.168.1.100'
Host
user
plugin
mysql_native_password
caching_sha2_password
sha256_password
auth_socket
root
root
plugin
mysql.user.authentication_string
整个过程中,
Host
plugin
Host
caching_sha2_password
plugin
MySQL的权限管理体系,说白了,就是一套层层递进、由粗到细的授权机制。它不是一刀切的,而是提供了一种灵活的粒度控制,让我们能够精确地定义每个用户能做什么、不能做什么。在我看来,这种分级管理是其强大之处,但也常常是权限配置复杂性的来源。
权限等级从最高到最低,大致可以这样理解:
全局权限(Global Privileges):
mysql.user
SUPER
PROCESS
RELOAD
CREATE USER
FILE
REPLICATION SLAVE
数据库级权限(Database-Level Privileges):
mysql.db
SELECT
INSERT
UPDATE
DELETE
CREATE
ALTER
DROP
表级权限(Table-Level Privileges):
mysql.tables_priv
SELECT
INSERT
UPDATE
DELETE
users
logs
列级权限(Column-Level Privileges):
mysql.columns_priv
UPDATE(salary)
employees
salary
SELECT(name, email)
users
name
除了这四种主要级别,还有针对存储过程/函数(
mysql.procs_priv
mysql.proxies_priv
权限的生效原则:MySQL在判断用户是否有权执行某个操作时,会遵循一个“最具体优先”的原则,并且权限是累加的。也就是说,如果一个用户在全局层面被授予了
SELECT
REVOKE
SELECT
SELECT
SELECT
SELECT
管理MySQL用户和权限,是数据库管理员的日常工作,也是保障数据安全的核心环节。我个人觉得,熟练掌握这些命令,能让你在面对权限问题时游刃有余。
1. 查看用户与权限
最直接、最权威的方式就是使用
SHOW GRANTS
查看特定用户的权限:
SHOW GRANTS FOR 'your_user'@'your_host'; -- 示例: SHOW GRANTS FOR 'app_user'@'localhost'; SHOW GRANTS FOR 'admin'@'%'; -- 查看从任意主机连接的admin用户
这个命令的输出会非常清晰地展示
GRANT
查看所有用户列表(不含权限详情):
SELECT user, host FROM mysql.user;
这能让你快速了解当前系统中有哪些用户账户。
查看mysql.user
SELECT user, host, Select_priv, Insert_priv, Update_priv, Delete_priv, Create_priv, Grant_priv, Super_priv FROM mysql.user WHERE user = 'your_user';
这可以让你看到某个用户在全局层面直接拥有的布尔权限标志。
查看mysql.db
SELECT host, db, user, Select_priv, Insert_priv, Update_priv FROM mysql.db WHERE user = 'your_user';
如果你想知道某个用户在哪些数据库上有权限,这个查询很有用。
2. 管理用户与权限
管理权限主要是通过
CREATE USER
GRANT
REVOKE
DROP USER
创建新用户:
CREATE USER 'new_user'@'localhost' IDENTIFIED BY 'your_password'; -- 使用更安全的caching_sha2_password认证插件(MySQL 8.0+ 默认) CREATE USER 'new_user_sha2'@'%' IDENT IDENTIFIED WITH caching_sha2_password BY 'secure_password';
IDENTIFIED BY
'%'
授予权限:
-- 全局权限:授予用户在所有数据库所有表上的SELECT和INSERT权限 GRANT SELECT, INSERT ON *.* TO 'new_user'@'localhost'; -- 数据库级权限:授予用户在mydatabase数据库上的所有权限 GRANT ALL PRIVILEGES ON mydatabase.* TO 'new_user'@'localhost'; -- 表级权限:授予用户对mydatabase.mytable表的SELECT和UPDATE权限 GRANT SELECT, UPDATE ON mydatabase.mytable TO 'new_user'@'localhost'; -- 列级权限:授予用户对mydatabase.mytable表的name列的SELECT权限 GRANT SELECT (name) ON mydatabase.mytable TO 'new_user'@'localhost'; -- 授予GRANT OPTION:允许用户将自己拥有的权限再授予给其他用户(慎用!) GRANT ALL PRIVILEGES ON *.* TO 'admin'@'localhost' WITH GRANT OPTION;
*.*
mydatabase.*
mydatabase
撤销权限:
REVOKE
GRANT
-- 撤销用户在所有数据库所有表上的INSERT权限 REVOKE INSERT ON *.* FROM 'new_user'@'localhost'; -- 撤销用户在mydatabase数据库上的所有权限 REVOKE ALL PRIVILEGES ON mydatabase.* FROM 'new_user'@'localhost';
修改用户密码:
ALTER USER 'new_user'@'localhost' IDENTIFIED BY 'new_secure_password';
删除用户:
DROP USER 'old_user'@'localhost';
刷新权限:
FLUSH PRIVILEGES;
虽然
GRANT
REVOKE
mysql
FLUSH PRIVILEGES
记住,在管理权限时,始终遵循最小权限原则。只授予用户完成其任务所需的最低权限,这样可以最大程度地降低潜在的安全风险。
以上就是MySQL成员如何存储_MySQL用户信息与权限存储结构解析教程的详细内容,更多请关注php中文网其它相关文章!
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号