数据控制语言 DCL

本文涉及的产品
云原生数据库 PolarDB 分布式版,标准版 2核8GB
RDS PostgreSQL Serverless,0.5-4RCU 50GB 3个月
推荐场景:
对影评进行热评分析
云数据库 RDS SQL Server,基础系列 2核4GB
简介: 本篇文章详细介绍了 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';

说明:

  • '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';

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

select user, host from mysql.user;

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

alter user 'username'@'host' identified by 'new_password';

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

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

示例:

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

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

drop user 'username'@'host';

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

示例:

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

-- 删除远程用户 'old_admin'
drop user 'old_admin'@'%';

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];

说明:

  • 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';

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

show grants for 'username'@'host';

示例:

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

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

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

revoke privilege_list on object_type from 'username'@'host';

注意: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';

3. 重要说明与最佳实践

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

练习题 (Practice Exercises - DCL with Answers)

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

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

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

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

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

    create user 'webapp'@'%' identified by 'WebAppSecurePwd!';
    
  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'@'%';
    
  6. 修改 readonly_user 的密码为 NewPass456
    答案:

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

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

    show grants for 'webapp'@'%';
    
  9. 删除用户 readonly_user
    答案:

    drop user 'readonly_user'@'localhost';
    
目录
相关文章
|
4月前
|
SQL 关系型数据库 MySQL
MySQL 5.6/5.7 DDL 失败残留文件清理指南
通过本文的指南,您可以更安全地处理 MySQL 5.6 和 5.7 版本中 DDL 失败后的残留文件,有效避免数据丢失和数据库不一致的问题。
|
4月前
|
SQL 关系型数据库 MySQL
MySQL 常用函数
我们这次全面梳理 MySQL 中的常用函数,涵盖 聚合函数、字符串函数、日期时间函数、数学函数 和 控制流函数 等五大类。每类函数均配有语法说明与实用示例,帮助读者提升数据处理能力,如统计分析、文本处理、日期计算、条件判断等。文章结尾提供了丰富的实战练习,帮助读者巩固和应用函数技巧,是进阶 SQL 编程与数据分析的实用工具手册。
312 2
|
6月前
|
人工智能 数据可视化 数据挖掘
AI竟能独立完成顶会论文!The AI Scientist-v2:开源端到端AI自主科研系统,自动探索科学假设生成论文
The AI Scientist-v2 是由 Sakana AI 等机构开发的端到端自主科研系统,通过树搜索算法与视觉语言模型反馈实现科学假设生成、实验执行及论文撰写全流程自动化,其生成论文已通过国际顶会同行评审。
387 34
AI竟能独立完成顶会论文!The AI Scientist-v2:开源端到端AI自主科研系统,自动探索科学假设生成论文
|
4月前
|
监控 Java 测试技术
2025 年 Java 核心技术从入门到精通实战指南
《2025年Java核心技术实战指南》全面覆盖Java开发的最新趋势与最佳实践。内容包括Java新特性(如模式匹配、文本块、记录类)、微服务架构(Spring Boot 3.0+、Spring Cloud)、响应式编程(Reactor、WebFlux)、容器化与云原生(Docker、Kubernetes)、数据访问技术(JPA、R2DBC)、函数式编程、单元测试与集成测试(JUnit 5、Mockito)、性能优化与监控等。通过实战案例,帮助开发者掌握构建高性能、高可用系统的技能。代码资源可从[链接](https://pan.quark.cn/s/14fcf913bae6)获取。
226 7
|
关系型数据库 数据挖掘 分布式数据库
数据库+MCP,0编码自主完成数据洞察
本文介绍了一种全新的数据分析方案,结合PolarDB MySQL版与阿里云百炼,搭配MCP工具实现智能数据库分析应用。该方案解决传统数据分析工具高门槛、低效率的问题,通过零SQL操作和一站式部署,助力企业快速挖掘数据价值。方案具备高性能查询、快响应直连加速、高安全保障及易迁移上云等优势,并详细说明了部署资源、应用配置及验证步骤,帮助用户轻松完成实践体验。
|
4月前
|
运维 监控 测试技术
【赵渝强老师】使用obd快速体验OceanBase
OceanBase Deployer (obd) 是 OceanBase 数据库的安装部署工具,支持命令行与白屏界面两种方式。通过标准化复杂配置流程,降低集群部署难度。命令行适合深度用户,白屏界面便于快速体验。obd 还提供包管理、压测、集群管理等运维功能。文中详细介绍了使用 obd 部署 OceanBase 数据库集群的步骤,包括执行命令、连接数据库、查看信息及监控页面访问等内容,并附有视频讲解和示例输出。
123 1
|
3月前
|
大数据 数据库 索引
索引创建的原则
本文介绍了创建数据库索引的六大原则,帮助提升查询效率。内容包括:为大数据量表建索引、常用查询字段建索引、高区分度列优先、varchar字段使用前缀索引、合理使用联合索引,以及控制索引数量以平衡查询与维护成本。
81 8
|
4月前
|
运维 关系型数据库 测试技术
【赵渝强老师】OceanBase部署工具
OceanBase是一款开源的国产分布式关系型数据库,支持通过obd和OCP部署数据库集群。obd(OceanBase Deployer)是OceanBase的安装部署工具,提供命令行和白屏界面两种方式,简化复杂配置流程,降低集群部署难度,并集成包管理、压测软件、集群管理等功能。OCP(OceanBase Cloud Platform)则面向中小型用户,提供主机管理、集群和租户运维等能力。文档详细介绍了obd的在线与离线安装方法、快速体验OceanBase的步骤,以及OCP的基本功能和主页面展示。
362 7
【赵渝强老师】OceanBase部署工具
|
4月前
|
存储 关系型数据库 数据库
高性能云盘:一文解析RDS数据库存储架构升级
性能、成本、弹性,是客户实际使用数据库过程中关注的三个重要方面。RDS业界率先推出的高性能云盘(原通用云盘),是PaaS层和IaaS层的深度融合的技术最佳实践,通过使用不同的存储介质,为客户提供同时满足低成本、低延迟、高持久性的体验。
|
4月前
|
Cloud Native Java 程序员
【2025 最新版互联网一线大厂 Java 程序员面试 + 学习指南】覆盖全面面试知识点、实用面试技巧及前沿技术实操内容
本内容涵盖互联网大厂主流技术栈的最新实操指南,包括微服务架构(Spring Cloud Alibaba Nacos、OpenFeign、Spring Cloud Gateway)、容器化与Kubernetes、云原生技术(Istio、Prometheus+Grafana)、高性能开发(Reactor响应式编程、CompletableFuture异步编程)及数据持久化(Redis分布式锁、ShardingSphere分库分表)。通过详细代码示例和操作步骤,帮助开发者掌握核心技术,适用于本地环境搭建与模块功能实践。适合Java程序员学习和面试准备,附带资源链接供深入研究。
112 5