数据控制语言 DCL

本文涉及的产品
云数据库 RDS SQL Server,基础系列 2核4GB
RDS SQL Server Serverless,2-4RCU 50GB 3个月
推荐场景:
RDS PostgreSQL Serverless,0.5-4RCU 50GB 3个月
推荐场景:
对影评进行热评分析
简介: 本篇文章详细介绍了 MySQL 中 DCL(数据控制语言)的核心命令,包括用户账户的创建、修改、删除 (CREATE USER, ALTER USER, DROP USER),以及数据库权限的授予与撤销 (GRANT, REVOKE)。文章通过清晰语法和实际示例,指导读者如何设置强密码、限制登录主机、精细授权数据库对象,帮助构建更安全可控的数据库系统。结合最佳实践与练习题,本教程适合 DBA 入门者和开发人员快速掌握 MySQL 权限管理能力。

作者:IvanCodes
日期:2025年6月7日

核心目标: 学习如何管理 MySQL 用户账户及其对数据库对象的访问权限,确保数据库安全。

主要命令: CREATE USER, ALTER USER, DROP USER, GRANT, REVOKE.

前提: DCL 操作通常需要具有相应管理权限的用户(如 root 用户或拥有 CREATE USERGRANT 等权限的用户)来执行。

1. 用户管理

创建用户 (create user)
作用:创建新的 MySQL 用户账户。
语法:

create user 'username'@'host' identified by 'password';
AI 代码解读

说明:

  • 'username': 要创建的用户名。
  • 'host': 指定用户可以从哪个主机连接 ('localhost', '%', 特定 IP)。
  • identified by 'password': 设置用户的登录密码。务必使用强密码!

示例:

-- 创建一个只能本地登录,密码为 'pass123' 的用户 'appuser'
create user 'appuser'@'localhost' identified by 'pass123';

-- 创建一个可以从任何地方登录,密码为 'complex_Pwd!@#' 的用户 'remote_admin'
create user 'remote_admin'@'%' identified by 'complex_Pwd!@#';

-- 创建一个只能从特定 IP 登录的用户
create user 'report_user'@'192.168.1.50' identified by 'report_secret';
AI 代码解读

查看用户
作用:列出 MySQL 中的用户账户。
语法 (查询系统表):

select user, host from mysql.user;
AI 代码解读

修改用户 (alter user)
作用:修改现有用户的属性,最常用的是修改密码。
语法 (修改密码 - 推荐方式):

alter user 'username'@'host' identified by 'new_password';
AI 代码解读

语法 (其他修改 - 不常用):

-- rename user 'olduser'@'oldhost' to 'newuser'@'newhost'; -- 重命名
-- alter user 'username'@'host' account lock; -- 锁定
-- alter user 'username'@'host' account unlock; -- 解锁
AI 代码解读

示例:

-- 修改 'appuser'@'localhost' 的密码为 'newStrongPass456'
alter user 'appuser'@'localhost' identified by 'newStrongPass456';
AI 代码解读

删除用户 (drop user)
作用:永久删除一个用户账户。
语法:

drop user 'username'@'host';
AI 代码解读

!!! 警告:删除用户是不可逆的 !!!

示例:

-- 删除本地用户 'testuser'
drop user 'testuser'@'localhost';

-- 删除远程用户 'old_admin'
drop user 'old_admin'@'%';
AI 代码解读

2. 权限管理

权限 (Privileges) 概念:
定义用户能在数据库上执行的操作。常见权限:select, insert, update, delete, create, drop, alter, all privileges 等。权限作用域:全局 (*.*), 数据库 (database_name.*), 表 (database_name.table_name)。

授予权限 (grant)
作用:给用户分配操作数据库对象的权限。
语法:

grant privilege_list on object_type to 'username'@'host' [with grant option];
AI 代码解读

说明:

  • privilege_list: 权限列表 (如 select, insert) 或 all privileges
  • object_type: 权限作用的对象 (如 db_name.*, db_name.table_name, *.*)。
  • with grant option: (可选) 允许该用户将权限授予他人(危险)。

示例:

-- 授予 'appuser'@'localhost' 对 'company_db' 所有表的 select, insert, update 权限
grant select, insert, update on company_db.* to 'appuser'@'localhost';

-- 授予 'report_user'@'192.168.1.50' 对 'sales_db.orders' 表的只读权限
grant select on sales_db.orders to 'report_user'@'192.168.1.50';

-- 授予 'db_admin'@'localhost' 对 'inventory_db' 的所有权限并允许授权
grant all privileges on inventory_db.* to 'db_admin'@'localhost' with grant option;

-- 授予创建数据库的全局权限 (谨慎)
grant create on *.* to 'developer'@'localhost';
AI 代码解读

查看权限 (show grants)
作用:显示指定用户拥有的权限。
语法:

show grants for 'username'@'host';
AI 代码解读

示例:

-- 查看 'appuser'@'localhost' 的权限
show grants for 'appuser'@'localhost';

-- 查看当前登录用户的权限
show grants;
-- 或者
-- show grants for current_user();
AI 代码解读

撤销权限 (revoke)
作用:收回已授予用户的权限。
语法:

revoke privilege_list on object_type from 'username'@'host';
AI 代码解读

注意:privilege_listobject_type 需与 grant 时匹配。撤销 grant option 使用 revoke grant option on ... from ...

示例:

-- 从 'appuser'@'localhost' 收回对 'company_db' 的 update 权限
revoke update on company_db.* from 'appuser'@'localhost';

-- 从 'report_user'@'192.168.1.50' 收回对 'sales_db.orders' 的 select 权限
revoke select on sales_db.orders from 'report_user'@'192.168.1.50';

-- 撤销 'db_admin'@'localhost' 对 'inventory_db' 的所有权限
revoke all privileges on inventory_db.* from 'db_admin'@'localhost';

-- 撤销 'db_admin'@'localhost' 的授权能力
revoke grant option on inventory_db.* from 'db_admin'@'localhost';
AI 代码解读

3. 重要说明与最佳实践

  • flush privileges;: 通常不需要手动执行。仅在直接修改系统权限表(不推荐)后才需要。标准 DCL 命令会自动刷新权限。
  • 最小权限原则: 只授予必需的最小权限。
  • 应用程序用户: 为应用创建独立用户,精确授权。
  • 强密码策略: 使用复杂密码。
  • 定期审查: 定期检查用户和权限。

练习题 (Practice Exercises - DCL with Answers)

假设你以 root 用户或其他有足够权限的用户登录。

  1. 创建一个新用户 readonly_user,只能从本地 (localhost) 登录,密码设置为 ReadOnly123
    答案:

    create user 'readonly_user'@'localhost' identified by 'ReadOnly123';
    
    AI 代码解读
  2. 授予 readonly_user 对数据库 mydatabase 中所有表的只读权限 (select)。
    答案:

    grant select on mydatabase.* to 'readonly_user'@'localhost';
    
    AI 代码解读
  3. 查看 readonly_user 现在拥有的权限。
    答案:

    show grants for 'readonly_user'@'localhost';
    
    AI 代码解读
  4. 创建一个新用户 webapp,可以从任何主机 (%) 登录,密码为 WebAppSecurePwd!.
    答案:

    create user 'webapp'@'%' identified by 'WebAppSecurePwd!';
    
    AI 代码解读
  5. 授予 webapp 用户对 mydatabase 数据库中的 users 表和 orders 表执行 select, insert, update 操作的权限。
    答案:

    grant select, insert, update on mydatabase.users to 'webapp'@'%';
    grant select, insert, update on mydatabase.orders to 'webapp'@'%';
    
    AI 代码解读
  6. 修改 readonly_user 的密码为 NewPass456
    答案:

    alter user 'readonly_user'@'localhost' identified by 'NewPass456';
    
    AI 代码解读
  7. 撤销 webapp 用户对 mydatabase.users 表的 update 权限。
    答案:

    revoke update on mydatabase.users from 'webapp'@'%';
    
    AI 代码解读
  8. 查看 webapp 用户现在的权限,确认 update on users 已被撤销。
    答案:

    show grants for 'webapp'@'%';
    
    AI 代码解读
  9. 删除用户 readonly_user
    答案:

    drop user 'readonly_user'@'localhost';
    
    AI 代码解读
目录
打赏
0
2
2
0
1
分享
相关文章
MySQL 常用函数
我们这次全面梳理 MySQL 中的常用函数,涵盖 聚合函数、字符串函数、日期时间函数、数学函数 和 控制流函数 等五大类。每类函数均配有语法说明与实用示例,帮助读者提升数据处理能力,如统计分析、文本处理、日期计算、条件判断等。文章结尾提供了丰富的实战练习,帮助读者巩固和应用函数技巧,是进阶 SQL 编程与数据分析的实用工具手册。
155 2
MySQL 5.6/5.7 DDL 失败残留文件清理指南
通过本文的指南,您可以更安全地处理 MySQL 5.6 和 5.7 版本中 DDL 失败后的残留文件,有效避免数据丢失和数据库不一致的问题。
/var/log/syslog日志说明
`/var/log/syslog`是Unix和Linux的日志文件,记录系统事件和消息,由`syslogd`或`rsyslogd`生成。日志条目含时间戳、主机名、PID、日志级别(如DEBUG、ERROR)和事件描述。内容涵盖系统启动/关闭、硬件错误、网络、用户登录、安全事件等。查看日志可使用`cat`、`tail`、`less`或`grep`命令。不过,不同Linux发行版可能有变,如Ubuntu使用`journald`和`journalctl`。
1087 3
AI 搜索 MCP 最佳实践
本文介绍了如何通过 MCP 协议,快速调用阿里云 OpenSearch 、ElasticSearch 等工具,帮助企业快速集成工具链、降低开发复杂度、提升业务效率。
188 29
AI 搜索 MCP 最佳实践
阿里云MongoDB 8.0最新发布
MongoDB 8.0 在性能优化、工作负载管理、数据库扩展、安全性增强及向量搜索能力等方面实现了多项突破。新版本大幅提升主从复制效率,降低延迟,并支持灵活的分片迁移与在线重分片。同时,新增 query shape 和持久化索引过滤器功能,帮助用户精细化管理高并发场景。此外,社区版引入全文与向量搜索,助力 AI 应用开发。阿里云作为国内首家支持 MongoDB 8.0 的厂商,提供高可用、弹性扩展和智能运维等云原生特性,满足多样化业务需求。
282 26
【赵渝强老师】使用obd快速体验OceanBase
OceanBase Deployer (obd) 是 OceanBase 数据库的安装部署工具,支持命令行与白屏界面两种方式。通过标准化复杂配置流程,降低集群部署难度。命令行适合深度用户,白屏界面便于快速体验。obd 还提供包管理、压测、集群管理等运维功能。文中详细介绍了使用 obd 部署 OceanBase 数据库集群的步骤,包括执行命令、连接数据库、查看信息及监控页面访问等内容,并附有视频讲解和示例输出。
Python时间序列平滑技术完全指南:6种主流方法原理与实战应用
时间序列数据分析中,噪声干扰普遍存在,影响趋势提取。本文系统解析六种常用平滑技术——移动平均、EMA、Savitzky-Golay滤波器、LOESS回归、高斯滤波与卡尔曼滤波,从原理、参数配置、适用场景及优缺点多角度对比,并引入RPR指标量化平滑效果,助力方法选择与优化。
133 0
MySQL 深潜 - X-plugin的传输协议
文章详细解析了X protocol的认证方式(如PLAIN、MYSQL41等)、协议格式及连接建立过程,包括服务端初始化、任务调度、请求处理等关键步骤,并结合代码示例说明认证流程。
高性能云盘:一文解析RDS数据库存储架构升级
性能、成本、弹性,是客户实际使用数据库过程中关注的三个重要方面。RDS业界率先推出的高性能云盘(原通用云盘),是PaaS层和IaaS层的深度融合的技术最佳实践,通过使用不同的存储介质,为客户提供同时满足低成本、低延迟、高持久性的体验。
【赵渝强老师】OceanBase中的租户
OceanBase数据库采用多租户架构,支持云数据库部署。租户是资源分配单位,分为系统租户、用户租户和Meta租户。系统租户管理集群生命周期,用户租户提供完整数据库功能(支持MySQL和Oracle模式),Meta租户存储用户租户的私有数据。多租户架构降低运维复杂度,支持多种部署形式,确保数据隔离与安全。
197 0
AI助理

你好,我是AI助理

可以解答问题、推荐解决方案等

登录插画

登录以查看您的控制台资源

管理云资源
状态一览
快捷访问