数据库中的DCL

一、什么是 DCL?

DCL 全称 Data Control Language ,用于管理数据库用户的权限:给谁授予什么权限,或者收回谁的权限。

简单说就是:谁能做什么,谁不能做什么

二、DCL 的两个核心命令

| 命令 | 作用 |
| GRANT | 授予权限 |

REVOKE 收回权限

三、基础概念:用户和权限

  • 用户 :连接数据库的账号(如 'zhangsan'@'localhost')。

  • 权限 :允许执行的操作,比如 SELECT(查)、INSERT(增)、UPDATE(改)、DELETE(删)、CREATE(建表)、DROP(删表)等。

四、GRANT 语法(授予权限)

sql

复制代码
GRANT 权限列表 ON 数据库名.表名 TO '用户名'@'主机名';
  • 权限列表 :多个权限用逗号分隔,如 SELECT, INSERT, UPDATE。也可以用 ALL PRIVILEGES 表示所有权限。

  • 数据库名.表名*.* 表示所有数据库的所有表;testdb.* 表示 testdb 数据库下的所有表。

  • '用户名'@'主机名''zhangsan'@'localhost' 表示只允许从本机连接;'lisi'@'%' 表示允许从任何主机连接

例子 1:创建一个用户并授予只读权限

sql

复制代码
-- 先创建用户(如果不存在)
CREATE USER 'reader'@'localhost' IDENTIFIED BY 'password123';

-- 授予对 testdb 数据库所有表的 SELECT 权限
GRANT SELECT ON testdb.* TO 'reader'@'localhost';

例子 2:授予某用户对某张表的所有权限

sql

复制代码
GRANT ALL PRIVILEGES ON testdb.orders TO 'admin'@'%';

例子 3:授予多个权限

sql

复制代码
GRANT SELECT, INSERT, UPDATE ON testdb.users TO 'editor'@'192.168.1.%';

五、REVOKE 语法(收回权限)

sql

复制代码
REVOKE 权限列表 ON 数据库名.表名 FROM '用户名'@'主机名';

例子:收回之前授予的 INSERT 权限

sql

复制代码
REVOKE INSERT ON testdb.users FROM 'editor'@'192.168.1.%';

六、查看和刷新权限

  • 查看某用户的权限

    sql

    复制代码
    SHOW GRANTS FOR 'reader'@'localhost';
  • 刷新权限(修改权限后建议执行,但 GRANT/REVOKE 通常会自动生效):

    sql

    复制代码
    FLUSH PRIVILEGES;

七、一个完整的小案例

场景 :有一个数据库 company,需要创建一个新用户 hr,只能从本机连接,只能查询 employees 表,不能修改数据。

sql

复制代码
-- 1. 创建用户(密码设为 'hr123')
CREATE USER 'hr'@'localhost' IDENTIFIED BY 'hr123';

-- 2. 授予 SELECT 权限
GRANT SELECT ON company.employees TO 'hr'@'localhost';

-- 3. 验证权限(用 hr 用户登录后尝试)
-- SELECT * FROM company.employees;   ✅ 成功
-- INSERT INTO company.employees ...  ❌ 失败,没有权限

-- 4. 后来老板说 hr 也需要能插入新员工,则追加权限
GRANT INSERT ON company.employees TO 'hr'@'localhost';

-- 5. 再后来 hr 离职了,收回所有权限
REVOKE ALL PRIVILEGES ON company.employees FROM 'hr'@'localhost';

-- 6. 甚至可以删除用户
DROP USER 'hr'@'localhost';

八、常见权限列表(部分)

权限 说明
SELECT 查询数据
INSERT 插入数据
UPDATE 修改数据
DELETE 删除数据
CREATE 创建表/数据库
DROP 删除表/数据库
INDEX 创建/删除索引
ALTER 修改表结构
ALL PRIVILEGES 除 GRANT OPTION 外的所有权限

九、注意事项

  1. 权限控制越细越好 :通常不给普通用户 DROPDELETE 等危险权限。

  2. 主机名限制'user'@'localhost' 只能本机访问,更安全;'user'@'%' 允许任何 IP 访问,需谨慎。

  3. 权限生效时机GRANT/REVOKE 执行后立即生效,但如果是修改了全局权限(*.*),可能需要 FLUSH PRIVILEGES 或新连接才生效。

  4. WITH GRANT OPTION:允许用户把自己拥有的权限再授予别人(一般不轻易给)。

mysql中

你可以把这个 mysql 数据库看作是整个数据库系统的"管家"。

1. 用户信息存在哪张表?

mysql 数据库中,最核心的一张表叫做 user。 如果你执行以下命令,就能看到当前系统中所有的用户信息:

SQL

复制代码
-- 切换到系统数据库
USE mysql;

-- 查看用户、主机和加密后的密码
SELECT user, host, authentication_string FROM user;

2. user 表里都有什么?

这张表不仅仅存了名字,它还决定了谁能进来,以及进来后能干什么:

  • user: 用户名。

  • host : 允许连接的主机地址。在 MySQL 中,'root'@'localhost''root'@'192.168.1.10' 是两个完全不同的账号。

  • authentication_string: 经过加密后的密码。

  • 权限列 : 表中还有大量的字段(如 Select_priv, Insert_priv 等),用来记录该用户是否拥有全局性质的操作权限。

3. 为什么要注意这个数据库?

  • 安全性 :绝不要轻易修改 mysql.user 表里的数据。如果你手动用 UPDATE 语句改了密码或权限,MySQL 往往不会立即生效,除非你执行 FLUSH PRIVILEGES;

  • 推荐做法:虽然我们可以直接操作这张表,但为了安全和规范,建议使用标准的 SQL 命令来管理:

    • 创建用户:CREATE USER ...

    • 修改密码:ALTER USER ...

    • 分配权限:GRANT ...

相关推荐
笃行3504 小时前
别拿MySQL数据库管理工具硬导:MySQL 迁 KingbaseES 的完整工具链
数据库
风哥2号4 小时前
数据库教程FGMT51‑PostgreSQL实例管理与参数文件
数据库·postgresql
蓝速科技5 小时前
桌面双屏翻译机量产调试:三类场景兼容性破局方案丨蓝速科技
运维·数据库·人工智能·科技·技术分享
达梦数据5 小时前
DMDRS空间数据类型说明:Oracle、DM8、MySQL空间数据类型映射
数据库·mysql·oracle
白远山5 小时前
24小时自助健身房系统开发实战:从需求分析到完整指南
java·开发语言·数据库·数据挖掘·需求分析
达梦数据5 小时前
DMDRS服务与模块的运行步骤
数据库
让学习成为一种生活方式6 小时前
PMGD:植物线粒体基因组数据库--Journal of Integrative Plant Biology
数据库
达梦数据7 小时前
达梦数据复制软件DMDRS搭建部署示例:源数据库DM8到目标数据库DM8一对一数据同步
数据库
IT_Octopus7 小时前
从一个应用开发者的角度,搞懂大数据查询的完整链路
java·大数据·数据库
Htr_7 小时前
Creem 2.0 使用指南:面向 AI 构建时代的资金平台
android·数据库·人工智能·ui·photoshop