MySQL数据库学习-基础DCL

2025-08-02

DCL,Data Control Language(数据控制语言),用于管理数据库用户、控制数据库的访问权限。

基础

任务

任务零:场景准备 (DML/DQL)

为了让权限分配更有意义,我们先增加一个“数据分析师”的角色,并让他初步尝点甜头。


任务一:创建新用户

公司来了新人,一个初级开发和一个实习测试。你需要为他们在数据库中创建专门的账号。


任务二:精细化的权限授予 (GRANT)

这是本次任务的核心。你要为上面创建的两个新用户以及一个设想中的“只读分析”角色分配精确的权限。


任务三:权限的检查与回收 (SHOW GRANTS & REVOKE)

管理权限是一个持续的过程,需要随时能检查和调整。


任务四:清理用户 (DROP)

intern_tester 已离职,他的账号也就不需要了。

代码

/*

*/
use industrial_project_management;
-- USE仅仅针对DML AND DDL,DCL使用时必须写全名称。
alter table users modify role 
	enum('Developer','Tester','Product Manager','Product/Data Analyst') 
	not null default 'Developer';

update users set role='Product/Data Analyst' where username='hongcha';

CREATE USER 'junior_dev'@'localhost' IDENTIFIED BY 'dev_password_123';
CREATE USER 'intern_tester'@'localhost' IDENTIFIED BY 'test_password_456';

-- 测试权限
GRANT SELECT ON industrial_project_management.* TO 'intern_tester'@'localhost';
GRANT UPDATE(status,completion_date) ON industrial_project_management.tasks TO 'intern_tester'@'localhost';

-- 开发权限
GRANT SELECT ON industrial_project_management.* TO 'junior_dev'@'localhost';
GRANT INSERT ON industrial_project_management.tasks TO 'junior_dev'@'localhost';
GRANT UPDATE(task_id,task_name,task_details,assigned_to_user_id,status,due_date,completion_date)
ON industrial_project_management.tasks TO 'junior_dev'@'localhost';

-- 数据分析平台
CREATE USER 'readonly_analyst'@'%' IDENTIFIED BY 'analysis_pwd_789';
GRANT SELECT ON industrial_project_management.* TO 'readonly_analyst'@'%';

SHOW GRANTS FOR 'junior_dev'@'localhost';
SHOW GRANTS FOR 'intern_tester'@'localhost';
SHOW GRANTS FOR 'readonly_analyst'@'%';

GRANT delete ON industrial_project_management.tasks TO 'junior_dev'@'localhost';
revoke update on industrial_project_management.tasks from 'junior_dev'@'localhost';
GRANT update(task_id,task_name,task_details,assigned_to_user_id,status,completion_date) ON industrial_project_management.tasks TO 'junior_dev'@'localhost';

revoke all ON industrial_project_management.* FROM 'intern_tester'@'localhost';
DROP USER 'intern_tester'@'localhost';

← 返回