数据控制语言 DCL

本文涉及的产品
RDS MySQL DuckDB 分析主实例,集群系列 4核8GB
RDS AI 助手,专业版
RDS MySQL DuckDB 分析主实例,基础系列 4核8GB
简介: 本篇文章详细介绍了 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';
    
目录
相关文章
|
9月前
|
SQL 关系型数据库 MySQL
MySQL 5.6/5.7 DDL 失败残留文件清理指南
通过本文的指南,您可以更安全地处理 MySQL 5.6 和 5.7 版本中 DDL 失败后的残留文件,有效避免数据丢失和数据库不一致的问题。
|
9月前
|
SQL 关系型数据库 MySQL
MySQL 常用函数
我们这次全面梳理 MySQL 中的常用函数,涵盖 聚合函数、字符串函数、日期时间函数、数学函数 和 控制流函数 等五大类。每类函数均配有语法说明与实用示例,帮助读者提升数据处理能力,如统计分析、文本处理、日期计算、条件判断等。文章结尾提供了丰富的实战练习,帮助读者巩固和应用函数技巧,是进阶 SQL 编程与数据分析的实用工具手册。
613 2
|
9月前
|
运维 监控 测试技术
【赵渝强老师】使用obd快速体验OceanBase
OceanBase Deployer (obd) 是 OceanBase 数据库的安装部署工具,支持命令行与白屏界面两种方式。通过标准化复杂配置流程,降低集群部署难度。命令行适合深度用户,白屏界面便于快速体验。obd 还提供包管理、压测、集群管理等运维功能。文中详细介绍了使用 obd 部署 OceanBase 数据库集群的步骤,包括执行命令、连接数据库、查看信息及监控页面访问等内容,并附有视频讲解和示例输出。
267 1
|
9月前
|
运维 关系型数据库 测试技术
【赵渝强老师】OceanBase部署工具
OceanBase是一款开源的国产分布式关系型数据库,支持通过obd和OCP部署数据库集群。obd(OceanBase Deployer)是OceanBase的安装部署工具,提供命令行和白屏界面两种方式,简化复杂配置流程,降低集群部署难度,并集成包管理、压测软件、集群管理等功能。OCP(OceanBase Cloud Platform)则面向中小型用户,提供主机管理、集群和租户运维等能力。文档详细介绍了obd的在线与离线安装方法、快速体验OceanBase的步骤,以及OCP的基本功能和主页面展示。
554 7
【赵渝强老师】OceanBase部署工具
|
9月前
|
存储 关系型数据库 数据库
高性能云盘:一文解析RDS数据库存储架构升级
性能、成本、弹性,是客户实际使用数据库过程中关注的三个重要方面。RDS业界率先推出的高性能云盘(原通用云盘),是PaaS层和IaaS层的深度融合的技术最佳实践,通过使用不同的存储介质,为客户提供同时满足低成本、低延迟、高持久性的体验。
|
9月前
|
Oracle 关系型数据库 MySQL
【赵渝强老师】OceanBase中的租户
OceanBase数据库采用多租户架构,支持云数据库部署。租户是资源分配单位,分为系统租户、用户租户和Meta租户。系统租户管理集群生命周期,用户租户提供完整数据库功能(支持MySQL和Oracle模式),Meta租户存储用户租户的私有数据。多租户架构降低运维复杂度,支持多种部署形式,确保数据隔离与安全。
560 0
|
9月前
|
关系型数据库 MySQL 网络安全
MySQL 深潜 - X-plugin的传输协议
文章详细解析了X protocol的认证方式(如PLAIN、MYSQL41等)、协议格式及连接建立过程,包括服务端初始化、任务调度、请求处理等关键步骤,并结合代码示例说明认证流程。
|
XML 数据格式 索引
xpath模块使用教程
XPath 是一种在 XML 文档中查找信息的语言,广泛用于 HTML 解析。本文介绍了 XPath 的安装与使用,包括 lxml 库的安装、解析流程、基本语法、路径表达式、谓语、通配符、多路径选择、逻辑运算、属性查询、索引查询、模糊查询、内容查询、属性值获取及节点内容转换等。通过实例详细说明了各种用法,帮助读者快速掌握 XPath 的应用技巧。
902 39
|
存储 Oracle 关系型数据库
【数据库-DB2】深入了解DB2 reorg
本文介绍了DB2数据库中reorg操作的重要性,旨在通过重组表数据来消除数据碎片、压缩信息并提高数据访问速度。reorg操作能够根据索引关键字重新排序数据,减少查询I/O次数,提升查询性能。文章详细讲解了reorg的操作步骤、适用场景及注意事项,强调了在执行reorg前后更新统计信息的必要性。
1008 2
|
Java Spring
SpringMVC中转发与重定向(redirect与forward)实践实例
SpringMVC中转发与重定向(redirect与forward)实践实例
648 0