当前位置: 首页 > article >正文

详解SQL权限与授予与收回对数据操作权限的操作

授予与收回对数据操作权限

  • 一、`GRANT` 操作
    • 用法
    • 示例
  • 二、`REVOKE` 操作
    • 用法
    • 示例
  • 三、权限
    • 1. 数据库级别权限
      • 常见权限:
    • 2. 对象级别权限
      • 作用对象:
      • 常见权限:
        • 对表或视图:
        • 对序列(Sequence):
        • 对存储过程和函数:
    • 3. 列级别权限
      • 常见权限:
    • 4. 角色与权限
    • 5. 特定数据库系统的权限扩展
      • MySQL 特定权限
      • PostgreSQL 特定权限
      • SQL Server 特定权限
      • Oracle 特定权限
    • 6. 查看权限
      • MySQL
      • PostgreSQL
      • SQL Server
      • Oracle
    • 7. 总结
  • 四、综合分析
  • 五、示例场景
    • 1. 授予权限
    • 2. 撤销权限
  • 六、总结

在 SQL 中, GRANTREVOKE 是用于管理数据库权限的命令。这些操作允许数据库管理员或有特权的用户授予或撤销其他用户或角色的权限,以访问数据库中的资源(如表、视图、序列等)。


一、GRANT 操作

用法

GRANT 用于授予用户或角色特定的权限。

基本语法:

GRANT privilege [, privilege...] 
ON object_name 
TO user_or_role [, user_or_role...]
[WITH GRANT OPTION];
  • privilege:授予的权限(如 SELECTINSERTUPDATEDELETE 等)。
  • object_name:要授予权限的数据库对象(如表、视图、序列等)。
  • user_or_role:接收权限的用户或角色。
  • WITH GRANT OPTION:允许接收权限的用户将权限授予其他用户。

示例

  1. 授予 SELECT 权限:

    GRANT SELECT 
    ON employees 
    TO user1;
    

    分析:这表示允许用户 user1 查询 employees 表的数据。

  2. 授予多个权限:

    GRANT SELECT, INSERT, UPDATE 
    ON employees 
    TO user1;
    

    分析:这表示允许 user1 查询、插入和更新 employees 表的数据。

  3. 使用 WITH GRANT OPTION:

    GRANT SELECT 
    ON employees 
    TO user1 
    WITH GRANT OPTION;
    

    分析user1 可以将自己获得的 SELECT 权限转授给其他用户。


二、REVOKE 操作

用法

REVOKE 用于撤销用户或角色已经获得的权限。

基本语法:

REVOKE privilege [, privilege...] 
ON object_name 
FROM user_or_role [, user_or_role...];
  • privilege:要撤销的权限。
  • object_name:权限作用的数据库对象。
  • user_or_role:被撤销权限的用户或角色。

示例

  1. 撤销单个权限:

    REVOKE SELECT 
    ON employees 
    FROM user1;
    

    分析:撤销 user1employees 表的 SELECT 权限。

  2. 撤销多个权限:

    REVOKE SELECT, INSERT 
    ON employees 
    FROM user1;
    

    分析:撤销 user1employees 表的 SELECTINSERT 权限。

  3. 撤销 WITH GRANT OPTION 授予的权限:
    如果用户 A 使用 WITH GRANT OPTION 将权限授予了用户 B,撤销 A 的权限也会自动撤销 B 的权限。


三、权限

SQL 中的权限(Privileges)是数据库管理员用来控制用户或角色对数据库对象(如表、视图、函数、序列等)访问和操作的机制。权限可以分为 数据库级别对象级别列级别,具体权限种类因数据库系统(如 MySQL、PostgreSQL、SQL Server、Oracle 等)而异。

1. 数据库级别权限

这些权限影响整个数据库,通常授予数据库管理员或具有全局权限的用户。

常见权限:

  • CREATE:允许用户创建新对象(如表、视图、索引等)。
    • 示例:GRANT CREATE ON DATABASE mydb TO user1;
  • DROP:允许用户删除数据库中的对象。
    • 示例:GRANT DROP ON DATABASE mydb TO user1;
  • ALTER:允许用户修改数据库对象(如添加列、更改表结构)。
    • 示例:GRANT ALTER ON DATABASE mydb TO user1;
  • CONNECT:允许用户连接到数据库。
    • 示例:GRANT CONNECT ON DATABASE mydb TO user1;
  • TEMPORARY:允许用户创建临时表。
    • 示例:GRANT TEMPORARY ON DATABASE mydb TO user1;
  • ALL PRIVILEGES:授予用户数据库级别的所有权限。
    • 示例:GRANT ALL PRIVILEGES ON DATABASE mydb TO user1;

2. 对象级别权限

这些权限作用于特定的数据库对象(如表、视图、序列等)。

作用对象:

  • 表(Table)
  • 视图(View)
  • 序列(Sequence)
  • 存储过程和函数(Procedures/Functions)
  • 触发器(Trigger)

常见权限:

对表或视图:
  • SELECT:允许用户查询表或视图的数据。
    • 示例:GRANT SELECT ON employees TO user1;
  • INSERT:允许用户向表中插入数据。
    • 示例:GRANT INSERT ON employees TO user1;
  • UPDATE:允许用户更新表中的数据。
    • 示例:GRANT UPDATE ON employees TO user1;
  • DELETE:允许用户删除表中的数据。
    • 示例:GRANT DELETE ON employees TO user1;
  • REFERENCES:允许用户在外键约束中引用该表。
    • 示例:GRANT REFERENCES ON employees TO user1;
  • TRIGGER:允许用户在该表上创建触发器。
    • 示例:GRANT TRIGGER ON employees TO user1;
对序列(Sequence):
  • USAGE:允许用户使用序列,但不能更改当前值。
    • 示例:GRANT USAGE ON SEQUENCE emp_seq TO user1;
  • SELECT:允许用户获取序列的当前值。
    • 示例:GRANT SELECT ON SEQUENCE emp_seq TO user1;
  • UPDATE:允许用户更改序列的值(例如,使用 NEXTVAL)。
    • 示例:GRANT UPDATE ON SEQUENCE emp_seq TO user1;
对存储过程和函数:
  • EXECUTE:允许用户执行存储过程或函数。
    • 示例:GRANT EXECUTE ON FUNCTION calculate_bonus TO user1;

3. 列级别权限

对于某些数据库(如 PostgreSQL),权限可以细化到列级别,允许用户仅访问特定的列。

常见权限:

  • SELECT (column):允许用户查询表中的特定列。
    • 示例:
      GRANT SELECT (name, department) 
      ON employees 
      TO user1;
      
  • UPDATE (column):允许用户更新表中的特定列。
    • 示例:
      GRANT UPDATE (salary) 
      ON employees 
      TO user1;
      

4. 角色与权限

角色是权限的集合,便于权限的分配与管理。

  • 创建角色:使用 CREATE ROLE 命令。
    • 示例:
      CREATE ROLE hr_manager;
      
  • 分配权限给角色
    • 示例:
      GRANT SELECT, INSERT, UPDATE 
      ON employees 
      TO hr_manager;
      
  • 将角色分配给用户
    • 示例:
      GRANT hr_manager TO user1;
      

5. 特定数据库系统的权限扩展

不同数据库系统对权限的实现略有不同,以下是一些扩展说明:

MySQL 特定权限

  • FILE:允许用户读取和写入服务器上的文件。
    • 示例:GRANT FILE ON *.* TO user1;
  • SUPER:允许用户执行管理操作(如终止线程、修改全局变量等)。
    • 示例:GRANT SUPER ON *.* TO admin;

PostgreSQL 特定权限

  • USAGE:常用于模式(Schema)和序列,表示可以访问对象但不能修改。
    • 示例:GRANT USAGE ON SCHEMA public TO user1;
  • CREATE ON SCHEMA:允许用户在模式下创建新对象。
    • 示例:GRANT CREATE ON SCHEMA public TO user1;

SQL Server 特定权限

  • CONTROL:授予对数据库对象的完全控制。
    • 示例:GRANT CONTROL ON DATABASE::mydb TO user1;
  • IMPERSONATE:允许用户模拟另一个用户的权限。
    • 示例:GRANT IMPERSONATE ON LOGIN::user1 TO admin;

Oracle 特定权限

  • RESOURCE:允许用户创建自己的数据库对象。
  • CONNECT:允许用户连接到数据库。

6. 查看权限

不同数据库有不同的命令来查看权限,以下是常用的查询方式:

MySQL

SHOW GRANTS FOR 'user1'@'localhost';

PostgreSQL

\z employees
-- 或查询权限表:
SELECT grantee, privilege_type 
FROM information_schema.role_table_grants 
WHERE table_name = 'employees';

SQL Server

SELECT * FROM sys.database_permissions 
WHERE class_desc = 'OBJECT_OR_COLUMN';

Oracle

SELECT * FROM USER_TAB_PRIVS WHERE TABLE_NAME = 'EMPLOYEES';

7. 总结

  • 权限可以控制用户对数据库及其对象的访问行为,主要分为 数据库级别对象级别列级别
  • 管理权限时,可以通过角色集中管理权限,减少直接操作用户权限的复杂性。
  • 授权和撤销权限应遵循最小权限原则,即仅授予用户完成任务所需的最低权限,以保证系统的安全性。

四、综合分析

  1. 权限管理的关键性:
    GRANTREVOKE 是数据库权限管理的重要工具,用于确保数据的安全性和最小权限原则。只有需要访问的用户才应被授予必要的权限。

  2. WITH GRANT OPTION 的风险:
    使用 WITH GRANT OPTION 时需要小心,授予该权限的用户可能会将权限传播给不受控的用户,从而可能导致安全风险。

  3. 权限层级:

    • 数据库级别权限:如 CREATE DATABASEDROP DATABASE
    • 表级别权限:如 SELECTINSERTUPDATEDELETE 等。
    • 列级别权限:可以限制用户仅能访问某些列。
    • 细粒度控制:结合视图和触发器可实现更精细的权限管理。
  4. 查看权限:
    通过查询数据字典可以查看已授予的权限。例如:

    -- MySQL
    SHOW GRANTS FOR 'user1'@'localhost';-- PostgreSQL
    \z employees
    

五、示例场景

假设有一个员工管理系统,employees 表中存储员工信息:

CREATE TABLE employees (emp_id INT PRIMARY KEY,name VARCHAR(50),department VARCHAR(50),salary DECIMAL(10, 2)
);

1. 授予权限

  • DBA(管理员)希望 user1 可以查询和插入员工数据,但不能更新或删除:

    GRANT SELECT, INSERT 
    ON employees 
    TO user1;
    
  • 如果还希望 user1 将查询权限分发给其他用户:

    GRANT SELECT 
    ON employees 
    TO user1 
    WITH GRANT OPTION;
    

2. 撤销权限

  • 撤销 user1 的插入权限:

    REVOKE INSERT 
    ON employees 
    FROM user1;
    
  • 如果需要撤销所有权限:

    REVOKE ALL PRIVILEGES 
    ON employees 
    FROM user1;
    

六、总结

  • GRANT 是授予权限的命令,REVOKE 是撤销权限的命令。
  • 合理使用权限控制,可以提升数据库的安全性,减少错误操作的可能性。
  • 使用 WITH GRANT OPTION 时要谨慎,以免造成权限的无控制扩散。
  • 配合数据字典或查询工具,可以监控当前系统中的权限分配情况。

相关文章:

详解SQL权限与授予与收回对数据操作权限的操作

授予与收回对数据操作权限 一、GRANT 操作用法示例 二、REVOKE 操作用法示例 三、权限1. 数据库级别权限常见权限: 2. 对象级别权限作用对象:常见权限:对表或视图:对序列(Sequence):对存储过程和…...

网络安全之文件上传漏洞

一,文件上传漏洞的原因: 文件上传漏洞的存在主要是因为开发者未对用户上传的文件进行充分的安全验证,导致攻击者可以上传恶意文件(如 WebShell、恶意脚本等)到服务器,进而控制服务器或实施进一步攻击。 常…...

Fast DDS Security--仿问控制

Fast DDS中提供了两种级别的仿问控制: 1 Domain Governance: 定义域级别的安全策略(全局规则). 2 DomainParticipant Permissions : 定义参与者的具体权限(个体规则) 先说一下Domain Governance&#xf…...

【13】单片机编程核心技巧:乘法运算

【13】单片机编程核心技巧:乘法运算 七律 乘法 乘法运算寄存间,溢出玄机隐字边。 连乘自增简写妙,移位替代速如仙。 中间变量扩疆土,长整型存避险关。 单片机中精算术,毫厘不爽展奇观。 摘要 乘法运算是单片机编程…...

为什么大模型网站使用 SSE 而不是 WebSocket?

在大模型网站(如 ChatGPT、Claude、Gemini 等)中,前端通常使用 EventSource(Server-Sent Events, SSE) 来与后端对接,而不是 WebSocket。这是因为 SSE 更适合类似流式文本生成的场景。下面我们详细对比 SSE…...

PostgreSQL的备份方式

PostgreSQL 提供多种方式进行备份,适用于不同需求的场景。常用的备份方法如下: 1. 逻辑备份(pg_dump 和 pg_dumpall) 1.1 使用 pg_dump 备份单个数据库 pg_dump 是 PostgreSQL 内置的逻辑备份工具,可以将数据库导出为…...

iTextSharp-PDF批量导出

HTML转PDF批量导出速度太慢且使用Spire.pdf.dll限制页签10后需要开通会员才能使用-做出优化 环境:U9 - UI插件 需求:选择需要导出的客户查询对应对账数据批量导出PDF并弹出下载框保存到默认位置 using System; using System.Collections.Generic; us…...

基于Matlab设计GUI图像处理交互界面

Image-Processing-GUI 项目说明 本博文提供了完整的代码和使用教程,适合新入门的朋友参考,完整代码资源文件请转至文末的下载链接。 本项目是《Matlab实践》中图像处理软件题目,本项目实现的具体内容如下 基于Matlab设计GUI交互界面图像的…...

osg安装编译第三方,完整详细过程。 libtiff/tif config.vc.hdoes not exist

第三方安装包下载地址 GitHub - bjornblissing/osg-3rdparty-cmake: CMake scripts for building OpenSceneGraph third party libraries. 在计算机中的布局 D:\CPlus\osg\src\osg-3rdparty\osg-3rdparty-cmake三层布局,src 放置源码 执行里面的批处理文件&#…...

红队OPSEC(安全运营)个人总结

OPSEC又称:运营安全,是指在红队的视角下,蓝队对我方的威胁。 OPSEC漏洞的五个流程: 关键信息识别:指红队的关键信息不泄露,包括但不限于红队的攻击意图,能力,人员,活动及…...

RSA算法:开启现代密码学的数学之钥

一、RSA算法简介 RSA(Rivest-Shamir-Adleman)是当今应用最广泛的非对称加密算法,由三位科学家Ron Rivest、Adi Shamir和Leonard Adleman于1977年提出。它的核心思想是利用数论中的难题,构建一对数学上关联的密钥——公钥用于加密…...

【从0到1构建实时聊天系统:Spring Boot + Vue3 + WebSocket全栈实战】

一、项目架构 技术栈清单: 后端:Spring Boot 3.0 WebSocket STOMP前端:Vue3 Pinia WebSocket Client部署:Nginx Docker Compose 二、核心功能实现 1. WebSocket双向通信 // 后端配置类 Configuration EnableWebSocketMes…...

HTML 超链接(简单易懂较详细)

在 HTML 中&#xff0c;超链接是通过 <a> 标签&#xff08;anchor tag&#xff09;创建的。超链接允许用户通过点击文本、图像或其他元素跳转到另一个网页、文件或页面的特定部分。本文将详细介绍 HTML 超链接的语法、属性和应用场景。 一、基本语法 <a href"U…...

《Android应用性能优化全解析:常见问题与解决方案》

目录 一、UI卡顿/掉帧 二、内存泄漏&#xff08;Memory Leak&#xff09; 三、ANR&#xff08;Application Not Responding&#xff09; 四、列表滑动卡顿&#xff08;RecyclerView/ListView&#xff09; 五、冷启动耗时过长 六、内存抖动&#xff08;Memory Churn&#x…...

常见HTTP 状态码及意义

HTTP状态码是服务器响应客户端请求时返回的三位数字代码&#xff0c;它们分为五个类别&#xff0c;每个类别代表不同类型的响应。 1xx - 信息性状态码 这些状态码表示请求已被接收&#xff0c;继续处理。 100 Continue: 客户端应继续其请求。这个临时响应用于通知客户端&…...

Android Compose Surface 完全指南:从入门到花式操作

今天咱们来聊聊 Compose 世界里那个既基础又强大的组件——Surface。这个看似简单的矩形区域&#xff0c;实际藏着不少宝藏玩法&#xff0c;准备好你的 IDE&#xff0c;咱们发车&#xff01; 一、Surface 是什么&#xff1f; 简单说&#xff0c;Surface 就是个自带背景和样式…...

Deepin通过二进制方式升级部署高版本 Docker

一、背景&#xff1a; 在Deepin系统中通过二进制方式升级部署高版本 Docker&#xff0c;下面将详细介绍二进制方式升级部署高版本 Docker 的具体步骤。 二、操作步骤 1.根据需求下载二进制文件&#xff0c;下载地址如下&#xff1a; https://mirrors.tuna.tsinghua.e…...

python中time模块的常用方法及应用

Python 的 time 模块是自带的标准模块&#xff0c;不需要额外安装&#xff0c;可以直接通过import time的方式导入并使用其中的函数和类。该模块提供了与时间相关的各种功能&#xff0c;以下是一些常用方法及其应用场景和示例&#xff1a; ### 1. time.time() - **功能**&…...

【RTSP】客户端(一):RTSP协议实现

概述 RTSP主要功能总结 RTSP本质是一个应用层协议&#xff0c;主要用于控制实时数据的传递&#xff0c;例如音视频流。RTSP的传输方式与HTTP类似&#xff0c;与HTTP不同在于RTSP主要用于控制传输媒体服务器上的流媒体会话。所以其是一个 客户端-服务器模型&#xff0c;客户端需…...

SpringBoot(一)--搭建架构5种方法

目录 一、⭐Idea从spring官网下载打开 2021版本idea 1.打开创建项目 2.修改pom.xml文件里的版本号 2017版本idea 二、从spring官网下载再用idea打开 三、Idea从阿里云的官网下载打开 ​编辑 四、Maven项目改造成springboot项目 五、从阿里云官网下载再用idea打开 Spri…...

面试之《commonjs,requirejs和es6 Module的区别》

设计理念 CommonJS&#xff1a;是为服务器端环境设计的模块化规范&#xff0c;以同步加载模块为核心思想。服务器端读取文件速度快&#xff0c;同步加载不会造成明显性能问题&#xff0c;方便开发者在代码执行前就确定模块间的依赖关系&#xff0c;便于管理和维护。RequireJS&…...

【工控】线扫相机小结 第五篇

背景介绍 线扫相机通过光栅尺的脉冲触发&#xff0c; 我在调试线扫过程中&#xff0c;发现图像被拉伸&#xff0c;预设调节分配器。图像正常后&#xff0c;我提高的相机的扫描速度&#xff08;Y轴动的更快了&#xff09;。 动的更快的发现&#xff0c;图像变短了&#xff08;以…...

【STM32F103C8T6】DMA数据转运ADC多通道

前言 本节为代码部分&#xff0c;知识点在这【江协科技STM32】DMA直接存储器存储-学习笔记-CSDN博客 查看数据地址&#xff1a; uint8_t aa 0x88;int main(void) {OLED_Init();OLED_ShowHexNum(1,1,aa,4); //显示十六进制数 OLED_ShowHexNum(2,1,(uint32_t)&aa,8);wh…...

[Web]ServletContext域(Application)

简介 Web应用的Application域的实现是通过ServletContext对象实现的。整个Web应用程序的所有资源共享这个域。生命周期与Web应用程序相同&#xff0c;即当前Web应用程序启动时&#xff08;以服务器视角而非访客视角&#xff09;出生&#xff0c;Web应用服务程序关闭时停止。 通…...

计算机网络--访问一个网页的全过程

文章目录 访问一个网页的全过程应用层在浏览器输入URL网址http://www.aspxfans.com:8080/news/index.aspboardID5&ID24618&page1#r_70732423通过DNS获取IP地址生成HTTP请求报文应用层最后 传输层传输层处理应用层报文建立TCP连接传输层最后 网络层网络层对TCP报文进行处…...

JVM G1垃圾回收器详细解析

G1内存布局 Garbage First(简称G1)收集器摒弃了传统垃圾收集器的严格的内存划分&#xff0c;而是采用了基于Region的内存布局形式和局部回收的设计思路。 G1垃圾收集器把Java堆划分为2048个大小相等的独立的Region&#xff0c;每个Region大小取值范围为1-32MB&#xff0c;且必…...

OpenGL中绘制图形元素的实现(使用visual studio(C++)绘制一个矩形)

目标&#xff1a;使用OpenGL提供的函数绘制矩形、线段、三角形等基本图形元素 所需效果 实验步骤 1、配置OpenGL&#xff08;详情参见OpenGL的配置&#xff09; 2、头文件引入 #include <gl/glut.h> 3、编写方法体 1>矩形实现 //绘制矩形 void DisplayRectangl…...

datax-coud部署

centos7系统环境安装 jdk1.8安装 cd /usr/local 上传jdk文件到/usr/local目录下解压缩 tar -zxvf jdk-8u261-linux-x64.tar.gz# 配置环境变量 vim /etc/profileexport JAVA_HOME=/usr/local/jdk1.8.0_261 export CLASSPATH=$JAVA_HOME/lib:$JAVA_HOME/lib export PATH=$JAVA_…...

数据库---sqlite3

数据库&#xff1a; 数据库文件与普通文件区别: 1.普通文件对数据管理(增删改查)效率低 2.数据库对数据管理效率高,使用方便 常用数据库: 1.关系型数据库: 将复杂的数据结构简化为二维表格形式 大型:Oracle、DB2 中型:MySql、SQLServer …...

Android StrictMode 使用与原理深度解析

Android StrictMode 是 Android 系统提供的一种开发者工具&#xff0c;用于检测应用主线程中不合理的耗时操作&#xff08;如磁盘 I/O、网络请求等&#xff09;和内存泄漏问题。通过配置策略和惩罚机制&#xff0c;它帮助开发者在早期发现潜在性能问题&#xff0c;提升应用流畅…...