SQL语言的四大组成部分——DCL(数据控制语言)-程序员宅基地

技术标签: mysql  数据库  sql  

1️⃣前言

SQL语言中的DCL(Data Control Language)是一组用于控制数据库用户访问权限的语言,主要包括GRANT、REVOKE、DENY等关键字。

在这里插入图片描述

2️⃣DCL语言

在SQL语言中,DCL(数据控制语言)DML(数据操作语言)DQL(数据查询语言)DDL(数据定义语言) 一样,是SQL语言的四大基本组成部分。
在这里插入图片描述

DCL语言可以通过GRANTREVOKE两个关键字控制用户对数据库对象的访问权限,例如授予用户SELECT、INSERT、UPDATE、DELETE等权限,或者撤销用户对数据库对象的权限。

在MySQL中 用户的信息和具有的权限的信息 都是存放在系统数据库mysql中的user表中。
在这里插入图片描述

3️⃣GRANT关键字

GRANT用于授权给用户或用户组访问数据库对象的权限。 GRANT语句的语法如下:

GRANT permission ON object TO user;

其中,permission表示授权的权限,可以是SELECT、INSERT、UPDATE、DELETE等;object表示授权的数据库对象,可以是表、视图、存储过程等;user表示被授权的用户或用户组。

以下是GRANT关键字的详细使用示例:

  1. 授权用户SELECT权限:
GRANT SELECT ON table_name TO user_name;

说明:授权用户user_name对表table_name进行SELECT操作。

  1. 授权用户INSERT、UPDATE、DELETE权限:
GRANT INSERT, UPDATE, DELETE ON table_name TO user_name;

说明:授权用户user_name对表table_name进行INSERT、UPDATE、DELETE操作。

  1. 授权用户所有权限:
GRANT ALL PRIVILEGES ON table_name TO user_name;

说明:授权用户user_name对表table_name进行所有操作。

  1. 授权角色所有权限:
GRANT ALL PRIVILEGES ON table_name TO role_name;
GRANT role_name TO user_name;

说明:授权角色role_name对表table_name进行所有操作,并将该角色授权给用户user_name。

4️⃣REVOKE关键字

REVOKE用于撤销用户或用户组访问数据库对象的权限。 REVOKE语句的语法如下:

REVOKE permission ON object FROM user;

其中,permission表示要撤销的权限,可以是SELECT、INSERT、UPDATE、DELETE等;object表示要撤销权限的数据库对象,可以是表、视图、存储过程等;user表示被撤销权限的用户或用户组。

以下是REVOKE关键字的详细使用示例:

  1. 撤销用户SELECT权限:
REVOKE SELECT ON table_name FROM user_name;

说明:撤销用户user_name对表table_name的SELECT操作。

  1. 撤销用户INSERT、UPDATE、DELETE权限:
REVOKE INSERT, UPDATE, DELETE ON table_name FROM user_name;

说明:撤销用户user_name对表table_name的INSERT、UPDATE、DELETE操作。

  1. 撤销用户所有权限:
REVOKE ALL PRIVILEGES ON table_name FROM user_name;

说明:撤销用户user_name对表table_name的所有操作。

  1. 撤销角色所有权限:
REVOKE ALL PRIVILEGES ON table_name FROM role_name;
REVOKE role_name FROM user_name;

说明:撤销角色role_name对表table_name的所有操作,并将该角色从用户user_name中撤销。

5️⃣DENY关键字

DENY关键字用于限制用户或角色对某些数据库对象的访问权限,语法如下:

DENY permission [, permission] ON object TO {
   user | role | PUBLIC} [, {
   user | role | PUBLIC}] [WITH GRANT OPTION]

具体来说,它可以阻止用户或角色对某个表、视图、存储过程等对象的SELECT、INSERT、UPDATE、DELETE等操作。

其中,permission表示要限制的权限,可以是SELECT、INSERT、UPDATE、DELETE等;object表示要限制访问的对象,可以是表、视图、存储过程等;user或role表示要限制的用户或角色,PUBLIC表示所有用户或角色;WITH GRANT OPTION表示允许被授权的用户或角色再次授权。

下面是一个具体的代码示例,用于禁止用户Alice对表employee的SELECT和UPDATE操作:

DENY SELECT, UPDATE ON employee TO Alice

这样,当Alice尝试对employee表进行SELECT或UPDATE操作时,将会被拒绝访问。如果需要允许其他用户或角色对该表进行操作,可以使用GRANT语句进行授权。

在这里插入图片描述

6️⃣总结

DCL语言是SQL语言中非常重要的一个部分,它可以帮助数据库管理员控制用户对数据库的访问权限,保证数据库中数据的安全性和完整性。


附:好书推荐

在这里插入图片描述
《Python大学教程:面向计算机科学和数据科学》
通过本书,你将学习:

· 538个案例研究,471个习题和项目,557道自检习题。
· 基于IPython和Jupyter Notebook的即时反馈。
· 问题求解、算法开发、控制语句、函数等基础知识。
· 列表、元组、字典、集合、Numpy数组、pandas Series和DataFrame。
· 2D/3D的静态、动态和交互式可视化。
· 字符串、文本文件、JSON序列化、CSV、异常。
· 过程式、函数式和面向对象的程序设计方法。
· “数据科学入门”:基础统计、模拟、动画、随机变量、数据整理、回归。
· 隐私、安全、伦理、可重现、透明。
· AI、大数据和云数据科学案例研究:NLP、Twitter数据挖掘、IBM Watson、机器学习、深度学习、计算机视觉、Hadoop、Spark、NoSQL、IoT。
· 开源库:NumPy、pandas、Matplotlib、Seaborn、Folium、SciPy、NLTK、TextBlob、 spaCy、Textatistic、Tweepy、Scikit-learn、Keras、PubNub等。

了解更多秒杀神书 点击此处 了解!


在这里插入图片描述

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/m0_63947499/article/details/131086846

智能推荐

ubuntu compiz的问题 两种解决方法 (第一种貌似重启了无效)_sudo compiz 错误-程序员宅基地

文章浏览阅读8.4k次,点赞4次,收藏6次。compiz的问题 两种解决方法 (第一种貌似重启了无效)(1)sudo apt-get purge compizsudo apt-get install unity ubuntu-desktop(2)sudo apt-get remove unitysudo apt-get update && sudo apt-get upgradesudo apt-get_sudo compiz 错误

Python下Flask-ApScheduler快速指南_flask flask_apscheduler 网页地址-程序员宅基地

文章浏览阅读2.1w次。引言:Flask是Python社区非常流行的一个Web开发框架,本文将尝试将介绍APScheduler应用于Flask之中。_flask flask_apscheduler 网页地址

XS9950 :一路工规AHD模拟RX-程序员宅基地

文章浏览阅读700次。一路AHD转mipi/BT656_xs9950

Maven 项目 JDK 8、JDK 17 多版本 Java 编译依赖最佳实践_让maven环境 主动编译jdk17-程序员宅基地

文章浏览阅读782次,点赞13次,收藏19次。最近几年,整个 Java 生态圈正在经历并将长期出于从 JDK 8 到 JDK 17 或更高版本的升级换代中,较为典型是:以 Spring 为代表的 Web 应用开发框架大多已经升级到了 JDK 17,而在大数据生态圈,Flink、Spark 还在使用 JDK 8,对于那些多模块的 Maven 项目,会出现不同的 Module 使用不同版本的 JDK 问题,这给构建这类项目造成了一些困难,本文简单梳理一下这一问题的解决方法,给出最佳实践。_让maven环境 主动编译jdk17

NeurIPS 2023 | FedFed:特征蒸馏应对联邦学习中的数据异构-程序员宅基地

文章浏览阅读75次。作者 |杨智钦单位 |北京航空航天大学来源|将门创投在本文中,我们提出了一种新的即插即用的联邦学习模块,FedFed,其能够以特征蒸馏的方式来解决联邦场景下的数据异构问题。FedFed首次探索了对数据中部分特征的提取与分享,大量的实验显示,FedFed能够显著地提升联邦学习在异构数据场景下的性能和收敛速度。论文标题:FedFed: Feature Distillation against..._about [neurips 2023] "fedfed: feature distillation against data heterogeneit

《Ray Tracing in One Weekend》——Chapter 1: Output an image_c++如何输出图片-程序员宅基地

文章浏览阅读3k次,点赞2次,收藏3次。《Ray Tracing in One Weekend》目录 第一部分:学习总结问题二:用C++输出第一张图片 第二部分:原文截图《Ray Tracing in One Weekend》目录_c++如何输出图片

随便推点

Angular cdk 学习之 drag-drop_angular drag-drop-程序员宅基地

文章浏览阅读1w次,点赞5次,收藏10次。       Angualr drag-drop里面的功能能让我们非常方便的处理页面上视图的拖拽(自由拖拽、列表排序拖拽、列表之间拖拽)问题。推荐大伙儿直接看官网,因为下面的内容绝大部分内容包括例子都来源于官网 https://material.angular.io/cdk/drag-drop/overview。一直认为官网才是最好的文档。  &..._angular drag-drop

Android boot.img 结构_mkbootimg --base 0x00200000-程序员宅基地

文章浏览阅读678次。转自:http://www.linuxidc.com/Linux/2011-03/33303.htmAndroid 的boot.img 包括 boot header,kernel, ramdisk首先来看看Makefile是如何产生我们的boot.img的:boot镜像不是普通意义上的文件系统,而是一种特殊的Android定制格式,由boot header,压缩的内核,ramdisk以_mkbootimg --base 0x00200000

gitlab-runner安装注册_linux gitlab-runner shared specifc-程序员宅基地

文章浏览阅读1.3k次。# gitlab-runner registerRuntime platform arch=amd64 os=linux pid=28542 revision=8fa89735 version=13.6.0Running in system-mode. Enter the..._linux gitlab-runner shared specifc

Postgres-XL安装测试简单记录_error: `flex' is missing on your system-程序员宅基地

文章浏览阅读1.3k次。./configure --prefix=/vg/wonders/wonders/db/postgresql/pgxlmake make install cd contrib/ make make install编译好之后拖到一体机报错:ERROR: `flex' is missing on your system. It is needed to create thefile..._error: `flex' is missing on your system

vs2019安装和使用教程(详细)-程序员宅基地

文章浏览阅读10w+次,点赞565次,收藏2.9k次。vs2019安装和使用教程(详细)_vs2019

【渝粤题库】陕西师范大学201941 Java程序设计 作业(专升本)_which of the following are correct? _____ a. strin-程序员宅基地

文章浏览阅读2.5k次,点赞2次,收藏2次。《JAVA程序设计》作业一、选择题编译HelloWorld.java的正确命令是:java HelloWorld.class B)java HelloWorld.java C)javac HelloWorld.java正确运行HelloWorld.java的正确命令是:java HelloWorld B)javac HelloWorld.java C)javac HelloWorld.class下面程序代码,使用多行注释正确的是:A) // int k=9;// int j=8_which of the following are correct? _____ a. string[] list = new string{

推荐文章

热门文章

相关标签