MySQL如何创建一个普通用户?一共包含哪些部分?

在这里插入图片描述

这是一张表格,表格有三列,分别是“User”(用户)、“Host”(主机)和“authentication_string”(认证字符串,也就是密码相关的内容)。这张表可能来自于MySQL的“mysql.user”系统表,这个表存储了所有MySQL用户的信息。

2. 列内容详细讲解

- **User列**
    - 这里列出了不同的用户名,比如“root”、“mysql.session”、“mysql.sys”、“user”和“teacher”。
    - “root”是MySQL中超级管理员用户,拥有最高权限,可以对数据库进行任何操作,比如创建新用户、创建数据库、删除数据等。
    - “mysql.session”和“mysql.sys”是MySQL内部系统用户,用于管理数据库的会话和系统相关操作,一般不用于日常操作。
    - “user”和“teacher”看起来像是自定义用户,可能是为特定应用或人员创建的具有特定权限的用户。
- **Host列**
    - 这个列表示用户可以从哪个主机连接到MySQL数据库。
    - “localhost”表示用户只能从本地(也就是安装MySQL的这台机器)连接到数据库。
    - “%”是一个通配符,表示“root”用户可以从任何主机连接到数据库,这可能存在安全风险,如果安全设置不当,外部网络的攻击者可能尝试从远程连接到数据库。
- **authentication_string列**
    - 这个列存储了用户的密码(以加密形式)。
    - 对于“mysql.session”和“mysql.sys”用户,密码显示为“*THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE”,这意味着这些用户的密码不是通过常规方式设置的,可能是由MySQL内部机制管理的。
    - 其他用户有一长串看似随机的字符,这是经过加密后的密码。例如“root”用户在本地(localhost)的密码加密后是“*57237BB49761F29AB9724BA084E811D70C12393D”,这是为了安全存储用户密码,防止密码泄露。

3. 实际意义和应用

- 数据库管理员会使用这些信息来管理用户权限。比如,如果要限制“root”用户只能从本地登录,可以修改“root”用户对应的“Host”值。
- 当创建新用户时,也会在这个表中添加新的记录。例如,如果要创建一个新的应用用户“app_user”,就会在“User”列添加“app_user”,在“Host”列指定允许连接的主机,在“authentication_string”列设置加密后的密码。
- 同时,这张表也涉及到数据库的安全。管理员需要确保只有授权的用户能够访问数据库,并且密码足够安全,防止被破解。

总之,这张表是MySQL数据库安全和用户管理的核心部分,它决定了谁能访问数据库,从哪里访问,以及使用什么密码访问。

问题:为什么需要创建 MySQL 用户?

想象一下,幼儿园有一个玩具柜:

  • 园长:可以打开所有柜子,拿走或添加任何玩具(root 用户)。
  • 普通老师:只能打开指定的柜子,拿特定的玩具(普通用户)。
  • 小朋友:只能玩老师发的玩具,不能打开柜子(受限用户)。

为什么要这样?

  • 安全:不让所有人都有最高权限。
  • 责任分离:不同的人负责不同的工作。

创建普通用户的步骤

1. 使用 root 用户登录 MySQL
mysql -u root -p
# 输入 root 密码后进入 MySQL 命令行
2. 创建新用户
-- 创建一个名为 'teacher' 的用户,密码是 'ToyKey123'
-- 这个用户只能从本地连接(localhost)
CREATE USER 'teacher'@'localhost' IDENTIFIED BY 'ToyKey123';

代码解释

  • CREATE USER 'teacher'@'localhost':创建名为 teacher 的用户,只能从本地连接。
  • IDENTIFIED BY 'ToyKey123':设置用户密码为 ToyKey123
3. 授予权限
-- 授予 teacher 用户对 'kindergarten' 数据库的所有权限
GRANT ALL PRIVILEGES ON kindergarten.* TO 'teacher'@'localhost';

-- 只授予 SELECT 权限(只读)
GRANT SELECT ON kindergarten.* TO 'teacher'@'localhost';

-- 刷新权限使变更生效
FLUSH PRIVILEGES;

权限示例

权限类型作用
ALL PRIVILEGES所有权限(创建表、删除数据等)
SELECT只读权限
INSERT插入数据权限
UPDATE更新数据权限
DELETE删除数据权限
CREATE创建表、数据库权限

用户和权限的底层原理

1. MySQL 用户表

MySQL 将用户信息存储在 mysql.user 表中:

-- 查看所有用户
SELECT User, Host, authentication_string FROM mysql.user;
2. 权限表

MySQL 使用多个权限表记录权限:

  • mysql.user:全局权限(如创建用户)。
  • mysql.db:数据库级权限(如对 kindergarten 数据库的权限)。
  • mysql.tables_priv:表级权限(如对 toys 表的权限)。
  • mysql.columns_priv:列级权限(如只对 price 列的权限)。

使用场景示例

1. PHP 连接 MySQL 使用普通用户
<?php
// 使用 'teacher' 用户连接 MySQL
$servername = "localhost";
$username = "teacher";
$password = "ToyKey123";
$dbname = "kindergarten";

// 创建连接
$conn = new mysqli($servername, $username, $password, $dbname);

// 检查连接
if ($conn->connect_error) {
    die("连接失败: " . $conn->connect_error);
}

// 执行查询(假设 teacher 用户只有 SELECT 权限)
$sql = "SELECT * FROM toys";
$result = $conn->query($sql);

if ($result->num_rows > 0) {
    // 输出数据
    while($row = $result->fetch_assoc()) {
        echo "玩具: " . $row["name"]. " - 价格: " . $row["price"]. "<br>";
    }
} else {
    echo "0 结果";
}

// 关闭连接
$conn->close();
?>
2. 创建更安全的用户
-- 创建一个只能从 web 服务器连接的用户
CREATE USER 'web_app'@'192.168.1.100' IDENTIFIED BY 'SecurePass456';

-- 只授予对 products 表的 SELECT 和 INSERT 权限
GRANT SELECT, INSERT ON store.products TO 'web_app'@'192.168.1.100';

FLUSH PRIVILEGES;

总结

为什么要创建普通用户?

  • 安全:不让所有人都有最高权限,就像不让小朋友随便打开玩具柜。
  • 责任分离:不同的用户负责不同的工作,例如 web 应用只需要读写特定表的权限。

创建用户的步骤

  1. CREATE USER:创建用户并指定连接来源。
  2. GRANT:授予适当的权限。
  3. FLUSH PRIVILEGES:刷新权限表。

简单来说

  • 创建用户就像给不同的人发不同的钥匙,有的人只能开前门,有的人只能开玩具柜,这样更安全!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值