MySQL(三)——DCL

文章目录

DCL

DCL (Data Control Language,数据控制语言)是SQL的一个子集,专门用于定义数据库、表、视图等的访问权限和安全级别。 它允许数据库管理员或拥有相应权限的用户控制谁可以访问数据库中的哪些数据,以及他们可以对这些数据执行哪些操作。

对于DCL,开发人员使用较少,主要是DBA(Database Administrator 数据库管理员)使用。


用户管理

查询用户

MySQL的用户信息存储在自带的 mysql 库中的 user 内置表中:

  • Host :主机名或IP地址,表示用户可以从哪个主机连接到MySQL服务器。如果设置为localhost,表示用户只能从本地机器连接。如果设置为%,表示用户可以从任何主机连接。
  • User:用户名,用于登录MySQL服务器的唯一标识符。
  • 其他的列就是权限列、安全列以及资源控制列。

SQL语法:

sql 复制代码
USE mysql;
SELECT * FROM user;

创建用户

语法:

sql 复制代码
CREATE USER 'username'@'hostname' IDENTIFIED BY 'password';

例如,创建两个新用户,一个只能从本地连接,一个可以从任何主机连接:


修改用户密码

语法:

sql 复制代码
ALTER USER 'username'@'hostname' IDENTIFIED WITH mysql_native_password BY 'new_password';
  • mysql_native_password 是一种密码认证插件(authentication plugin),它是MySQL传统上使用的密码存储和验证方式。当你修改用户密码并提到 mysql_native_password 时,你实际上是在指定或确认该用户密码应该使用这种传统的、广泛支持的密码认证机制来存储和验证。

例如,将demouser1的密码改为123,将demouser2的密码改为321:


删除用户

语法:

sql 复制代码
DROP USER 'username'@'hostname';

例如,删除demouser2用户:


权限控制

MySQL中定义了多种权限,常见权限如下:

权限 说明
ALL,ALL PRIVILEGES 所有权限
SELECT 查询数据权限
INSERT 插入数据权限
UPDATE 修改数据权限
DELETE 删除数据权限
ALTER 修改表权限
DROP 删除数据库权限
CREATE 创建数据库/表权限

查询权限

语法:

sql 复制代码
SHOW GRANTS FOR 'username'@'hostname';

例如,查询demouser1的权限:

  • USAGE是仅允许用户连接到数据库服务器的权限,是最基础的权限

授予权限

语法:

sql 复制代码
GRANT permission ON db_name.tbl_name TO 'username'@'hostname'; 
  • permission :权限列表,可以有多个授权,多个权限之间,使用逗号分隔
  • db_name.tbl_name :指明授予的是哪个数据库的哪个表的权限,可以使用*进行通配,代表所有
  • 在MySQL中,授权之后再次授权并不会直接达到"覆盖"原有权限的作用,而是会进行权限的叠加。MySQL的权限管理机制允许用户拥有多个权限,并且这些权限是累积的,即用户最终拥有的权限是之前所有授权操作的总和。

例如,给demouser1用户授予所有数据库所有表的所有权限:


例如,创建一个新的demouser2,授予blog数据库的exam表 查询和修改数据的权限:


撤销权限

语法:

sql 复制代码
REVOKE permission ON db_name.tbl_name FROM 'username'@'hostname'; 
  • permission:权限列表,多个权限之间,使用逗号分隔
  • db_name.tbl_name :指明撤销的是哪个数据库的哪个表的权限,可以使用*进行通配,代表所有
  • MySQL的权限系统在设计时会检查用户是否确实拥有被撤销的权限,如果用户没有该权限,那么撤销操作实际上不会执行任何更改,但也不会返回错误。

例如,撤销demouser1在所有数据库上的所有权限:

  • 撤销所有权限后,权限变为基本权限USAGE

例如,撤销demouser2用户在blog数据库的exam表 的修改数据的权限:


相关推荐
笨笨饿几秒前
74_SysTick滴答定时器中断
c语言·开发语言·人工智能·单片机·嵌入式硬件·算法·学习方法
六月雨滴7 分钟前
存储性能监控与优化及最佳实践总结
数据库·oracle·dba
我先去打把游戏先9 分钟前
【保姆级图文教程】:VMware虚拟机安装Ubuntu Server 22.04
linux·数据库·ubuntu
IpdataCloud14 分钟前
企业级IP定位服务准确率怎么保证?从数据源到离线库的精度提升指南
运维·服务器·网络·数据库·tcp/ip
科芯创展16 分钟前
XZ4058B/C,20V,外置MOS,8.4V/8.7V开关充电芯片 宽范围电源电压:8.9V~20V-(电池充电电压:8.4V/8.7V)
c语言·开发语言
学习论之费曼学习法17 分钟前
Agent记忆系统:让AI拥有长期记忆能力
数据库·人工智能·oracle
AI玫瑰助手24 分钟前
Python流程控制:break与continue语句的区别与应用
开发语言·python·信息可视化
2301_781571421 小时前
NumPy张量缩并怎么用_np.einsum()爱因斯坦求和约定高级索引魔法
jvm·数据库·python
largecode1 小时前
如何让电话显示店名?来电显示店铺名称,提升有效接通率
java·开发语言·spring·百度·学习方法·业界资讯·twitter