• 数据库实验:SQL的数据控制


    数据控制

    数据控制SQL语句(DCL)是一类可对用户数据访问权进行控制的操作语句,可以控制特定用户或角色对数据表、视图、存储过程、触发器等数据对象的访问权限。主要有GRANT、REVOKE、DENY语句操作来实现。

    这个文档中有SQL Server的一些相关操作:
    https://docs.microsoft.com/zh-cn/sql/t-sql/tutorial-writing-transact-sql-statements?view=sql-server-ver15

    实验目的

    (1)理解MySql数据库的安全性相关的概念
    (2)掌握MySql的验证模式、登录管理、用户管理、角色管理、权限管理等操作

    实验内容

    (1)MySql的安全认证模式
    (2)管理数据库用户
    (3)管理数据库角色
    (4)权限管理

    实验要求

    (1)掌握MySql的安全认证模式的概念及设置方法
    (2)掌握MySql登录账号、数据库用户、数据库角色的添加、修改、删除等操作,以及对数据库用户、角色进行权限授予和回收等操作
    (3)理解架构(Schema)、用户(User)、角色(Role)和登录(Login)等基本概念及其关系

    实验过程

    实验内容提纲

    利用S_T.sql建立示例数据库S_T

    添加SQL Server登录帐号:4个
    tempuser, temp1, temp2, temp3;
    密码分别为:tempqq, qq1, qq2, qq3
    为S_T数据库添加(数据库)用户:4个
    tempuser, temp1, temp2, temp3
    (与SQL Server登录帐号一一对应(映射))
    为S_T数据库添加自定义(数据库)角色: 1个,即db_operator
    将数据库用户temp2和temp3添加到db_operator角色中,成为其角色成员
    将在S_T数据库中创建表、创建视图的权限授予数据库用户tempuser
    将SELECT,UPDATE(Sname,Sage,Ssex,Sdept) ON Student的权限授予数据库用户temp1
    将SELECT ON Student,Course,SC的权限授予数据库角色db_operator
    检验结果:用创建的登录账号替换sa系统账号,来尝试与数据库服务器建立连接,对数据表中的数据进行存取操作,并记录与分析可能会遇到的问题。尝试通过授予更高的权限来解决问题
    从数据库用户temp1回收UPDATE(Sname,Ssex,Sdept) ON Student的权限,从数据库角色db_operator回收SELECT ON SC的权限,然后检验结果的正确性

    实验过程

    创建一个MySQL用户testuser,密码为qq,数据库为S_T,默认语言为英语:

    CREATE USER ‘testuser’@‘localhost’ IDENTIFIED BY ‘qq’;
    GRANT ALL PRIVILEGES ON S_T.* TO ‘testuser’@‘localhost’;
    SET GLOBAL init_connect=SET NAMES utf8’;
    
    • 1
    • 2
    • 3

    创建一个MySQL用户test1,密码为qq1,数据库为S_T,默认语言为英语:

    CREATE USER ‘test1’@‘localhost’ IDENTIFIED BY ‘qq1’;
    GRANT ALL PRIVILEGES ON S_T.* TO ‘test1’@‘localhost’;
    SET GLOBAL init_connect=SET NAMES utf8’;
    
    • 1
    • 2
    • 3

    创建一个MySQL用户test2,密码为qq2,数据库为S_T_1,默认语言为英语:

    CREATE USER ‘test2’@‘localhost’ IDENTIFIED BY ‘qq2’;
    GRANT ALL PRIVILEGES ON S_T_1.* TO ‘test2’@‘localhost’;
    SET GLOBAL init_connect=SET NAMES utf8’;
    
    • 1
    • 2
    • 3

    创建一个MySQL用户test3,密码为qq3,数据库为S_T_1,默认语言为英语:

    CREATE USER ‘test3’@‘localhost’ IDENTIFIED BY ‘qq3’;
    GRANT ALL PRIVILEGES ON S_T_1.* TO ‘test3’@‘localhost’;
    SET GLOBAL init_connect=SET NAMES utf8’;
    
    • 1
    • 2
    • 3

    修改用户testuser的密码为testqq:

    ALTER USER ‘testuser’@‘localhost’ IDENTIFIED BY ‘testqq’;
    
    • 1

    删除用户testuser:

    DROP USER ‘testuser’@‘localhost’;
    
    • 1

    使用数据库S_T:

    USE S_T;
    
    • 1

    授予用户testuser、test1、test2、test3数据库访问:

    GRANT ALL PRIVILEGES ON S_T.* TO ‘testuser’@‘localhost’;
    GRANT ALL PRIVILEGES ON S_T.* TO ‘test1’@‘localhost’;
    GRANT ALL PRIVILEGES ON S_T.* TO ‘test2’@‘localhost’;
    GRANT ALL PRIVILEGES ON S_T.* TO ‘test3’@‘localhost’;
    
    • 1
    • 2
    • 3
    • 4

    收回用户test3的数据库访问:

    REVOKE ALL PRIVILEGES ON S_T.* FROM ‘test3’@‘localhost’;
    
    • 1

    使用数据库S_T:

    USE S_T;
    
    • 1

    创建一个角色db_operator:

    CREATE ROLE ‘db_operator’;
    
    • 1

    添加用户test2、test3为角色db_operator的成员:

    GRANT ‘db_operator’ TO ‘test2’@‘localhost’, ‘test3’@‘localhost’;
    
    • 1

    删除角色db_operator:

    DROP ROLE ‘db_operator’;
    
    • 1

    系统管理员授予用户testuser如下权限:CREATE TABLE、CREATE VIEW:

    GRANT CREATE TABLE, CREATE VIEW TO ‘testuser’@‘localhost’;
    
    • 1

    授予用户test1对Student表的SELECT、UPDATE(Sname,Sage,Ssex,Sdept)权限:

    GRANT SELECT, UPDATE(Sname,Sage,Ssex,Sdept) ON Student TO ‘test1’@‘localhost’;
    
    • 1

    授予角色db_operator对Student、Course、SC表的SELECT权限:

    GRANT SELECT ON Student, Course, SC TO ‘db_operator’;
    
    • 1

    收回用户testuser的CREATE TABLE、CREATE VIEW权限:

    REVOKE CREATE TABLE, CREATE VIEW FROM ‘testuser’@‘localhost’;
    
    • 1

    收回用户test1对Student表的SELECT、UPDATE(Sname,Ssex,Sdept)权限:

    REVOKE SELECT, UPDATE(Sname,Ssex,Sdept) ON Student FROM ‘test1’@‘localhost’;
    
    • 1

    收回角色db_operator对Student表的SELECT权限:

    REVOKE SELECT ON Student FROM ‘db_operator’;
    
    • 1
  • 相关阅读:
    c# 反射
    挑战Typescript项目中的strict编译模式
    THREEJS基础入门
    PyTorch深度学习实战(21)——从零开始实现Faster R-CNN目标检测
    Spring OAuth2 Resource Server 配置
    VScode(Python)使用ssh远程开发(Linux系统树莓派)时,配置falke8和yapf总结避坑!最详细,一步到位!
    Pytorch面试题面经
    c++ 二元运算符重载, 以加法为例
    力扣labuladong——一刷day02
    HTTP超文本传输协议详解
  • 原文地址:https://blog.csdn.net/m0_72471315/article/details/134243399