首页 > 数据库 >5.24实验三 数据库完整性、安全性实现

5.24实验三 数据库完整性、安全性实现

时间:2024-06-20 15:36:40浏览次数:25  
标签:触发器 数据库 Server char 5.24 完整性 SQL Cno

实验三 数据库完整性、安全性实现

一、实验目的:

使学生加深对数据库安全性和完整性的理解,并掌握 SQL Server 中有关用户、角

色及操作权限的管理方法,学会创建和使用规则、缺省和触发器以及存储过程。

二、实验要求:

通过实验对数据进行完整性控制、安全性维护。

三、实验步骤:

1、 开始→程序→Microsoft SQL Server→SQL Server Management Stdio。

2、 在“连接到服务器”对话框中,选择“Windows 身份验证”,点击“连接”,进入

SQL Server Management Stdio 操作界面。

3、数据库的安全性实验:设置 SQL Server 的安全认证模式,实现对 SQL Server 的用户

和角色管理,设置和管理数据操作权限。

4、数据库的完整性实验:使用 Transact-SQL 设计规则、缺省、约束和触发器,通过 SQL

Server 管理器定义它们。

创建 students 数据库。利用如下 sql 语句在 students 数据库中创建表(具体含义见课

本 P33 页)

CREATE TABLE Student (

Sno char ( 7 ) PRIMARY KEY,

Sname char ( 10 ) NOT NULL,

Ssex char (2),

Sage tinyint ,

Sdept char (20)

)

CREATE TABLE Course (

Cno char(10) NOT NULL,

Cname char(20) NOT NULL,

Ccredit tinyint ,

Semester tinyint, PRIMARY KEY(Cno)

)

CREATE TABLE SC

(

Sno char(7) NOT NULL,

Cno char(10) NOT NULL,

Grade tinyint,

XKLB char(4) ,

PRIMARY KEY ( Sno, Cno )

)

完成如下操作:

(1)在 SQL Server 管理器中,创建一个新的 windows 登录名。

(2)在 SQL Server 管理器中为自己建立一个 SQL SERVER 服务器登录名(自己学号)。

(3)为所属的 SQL 服务器设置混合认证安全认证模式。

(4)用自己创建的登录名登录服务器。

(5)在 SQL Server 管理器中为自己建立一个 students 数据库用户(自己学号-user)和

角色(自己学号-role)。

(6)用管理器实现如下权限的分配:

① 将 student 表中“sname”、“ssex”、“sage”的修改权限赋予自己创建的数据库用

户。

② 将 student 表、course 表、sc 表的查询权限授予自己创建的角色。

③ 拒绝自己创建的角色拥有 sc 表中 grade 的修改权限。

④ 将自己创建的数据库用户添加为自己创建的角色成员。

(7)用管理器创建触发器实现如下安全性和完整性:

①定义 course 表中 credit 属性为“3”的缺省。

②建立 course 与 sc 表间来维护参照完整性而使用的一个级联删除触发器、一个级

联修改触发器和一个受限插入触发器。

 

1定义credit属性为"3"的默认值:

     

     ALTER TABLE Course

     ADD CONSTRAINT DF_Course_Credit DEFAULT 3 FOR Ccredit;

     

 

 

2. 建立course与sc表之间的触发器来维护参照完整性:

   - 级联删除触发器:

     ```sql

     CREATE TRIGGER trg_CascadeDelete

     ON Course

     FOR DELETE

     AS

     BEGIN

       DELETE FROM SC WHERE Cno IN (SELECT Cno FROM deleted);

     END;

    

   - 级联修改触发器:

   

     CREATE TRIGGER trg_CascadeUpdate

     ON Course

     FOR UPDATE

     AS

     BEGIN

       UPDATE SC SET Cno = inserted.Cno WHERE Cno IN (SELECT Cno FROM deleted);

     END;

    

   - 受限插入触发器:

 

     CREATE TRIGGER trg_RestrictedInsert

     ON SC

     INSTEAD OF INSERT

     AS

     BEGIN

       -- Add your logic here to restrict inserts based on your requirements

     END;

 

(8)对“students 数据库”编写存储过程,完成下面功能:

① 统计成绩 60 分以下的人数;

CREATE PROCEDURE CountLowScores

AS

BEGIN

    SELECT COUNT(*) AS LowScoreCount

    FROM SC

    WHERE Grade <= 60;

END;

 

② 统计给定 cno 的课程的平均成绩,并返回平均成绩;③将 sc 表中 grade 从百分制改为等级制(5、4、3、2、1)。即 0-20 分为 1,21-40

为 2,4 1-60 为 3,61-80 为 4,81-100 为 5。

CREATE PROCEDURE CalculateAverageGrade

@CourseNo CHAR(10)

AS

BEGIN

    SELECT AVG(Grade) AS AverageGrade

    FROM SC

    WHERE Cno = @CourseNo;

END;

 

3. 将sc表中grade从百分制改为等级制(5、4、3、2、1):

CREATE PROCEDURE ConvertToGradeScale

AS

BEGIN

    UPDATE SC

    SET Grade =

        CASE

            WHEN Grade <= 20 THEN 1

            WHEN Grade <= 40 THEN 2

            WHEN Grade <= 60 THEN 3

            WHEN Grade <= 80 THEN 4

            ELSE 5

        END;

END;

 

 

(9) 完成课本 P172 页的上机练习。

 

1.在"students"数据库中,创建三张表格

**Teacher表格**:

   列名:Tno(长度为7,主键)、Tname(长度为10,非空)、Tsex(长度为2,取值为男或女)、Birthday(小日期时间整型,允许空)、Dept(长度为20,允许空)、Sid(长度为18,取值不重)。

 

**Course表格**:

   - 列名:Con(长度为10,主键)、Cname(长度为20,非空)、Credit(小整型,大于0)、Property(长度为10,默认值为必修)。

 

**Teaching表格**:

   - 列名:Ton(长度为7,主键列,引用教师表的外键)、Con(长度为10,主键列,引用课程表的外键)、Hours(整数,大于0)。

  1. 在授课表中添加一个授课类别列,列名为Type,类型为char(4)。

ALTER TABLE Teaching

ADD Type CHAR(4);

  1. 将授课表Type列的数据类型改为char(8)

ALTER TABLE Teaching

ALTER COLUMN Type CHAR(8);

  1. 删除课程表的Property列

ALTER TABLE Course

DROP COLUMN Property;

四、体会

这些实验让我更加熟悉了数据库管理的基本概念和操作步骤,同时也加深了我对SQL语言和数据库设计的理解。通过实践,我进一步掌握了如何利用SQL语句和存储过程来管理和操作数据库,提高了我的数据库管理技能和实际应用能力。

 

标签:触发器,数据库,Server,char,5.24,完整性,SQL,Cno
From: https://www.cnblogs.com/yindantong/p/18258717

相关文章

  • 5.27实验四 数据库的备份和恢复
    实验四 数据库的备份和恢复一、实验目的:熟悉并掌握数据库备份和恢复的原理和操作。二、实验要求:掌握存储设备的创建、使用。掌握数据库中数据的导入导出操作。掌握数据上的备份和恢复操作。掌握数据库备份策略的制定原理和具体操作。三、实验步骤:1、开始→程序→Micros......
  • 6.3实验五 数据库编程
    实验五 数据库编程一、实验目的熟悉并掌握嵌入式SQL编程、使用数据库访问接口技术实现对数据库的访问。二、实验要求熟悉使用嵌入式SQL编程访问数据库,熟悉VB中开发数据库应用程序的过程。三、实验步骤设计一个小型的数据库应用程序 1. 基本表建立(1)教师表建立Xum......
  • 5.21实验三 Web数据库程序设计
    一、实验目的通过使用JSP技术设计一个简单的数据库管理系统,了解展示页面和编辑页面的区别,掌握Web服务器与MySQL数据库的连接和数据库操作的方法,掌握使用Java语言编写JSP文件的方法。二、实验内容和基本要求从以下列举的四个数据库中,任选其一,或者自行定义其他数据库,每个数据库中......
  • 5.22 实验一 数据库和表的建立、数据操作
    实验一 数据库和表的建立、数据操作一、实验目的:掌握使用SQL语言进行数据定义和数据操纵的方法。二、实验要求:建立一个数据库stumanage,建立三个关系表student,course,sc。向表中插入数据,然后对数据进行删除、修改等操作,对关系、数据库进行删除操作。三、实验步骤:1、......
  • 关于数据库的一些常用操作
    数据定义语言(DDL)DDL主要用于创建、修改和删除数据库中的对象,如数据库、表、视图等。创建数据库sql复制代码CREATEDATABASE数据库名;选择数据库sql复制代码USE数据库名;创建表sql复制代码CREATETABLE表名(列名1数据类型1,列名2数据类型2,......
  • 服务器数据库
    数据库往往是服务器中最核心的部分,所以一旦数据库发生损坏,将会带来巨大的损失,因此数据库的数据恢复功能变得越来越重要了。在服务器运行过程中,由于断电、操作不当原因损坏到服务器的硬盘的时候,怎样才能恢复网站服务器的数据呢?一、服务器存储系统非常重要,硬盘作为服务器数据存储......
  • 数据库数据恢复-oracle数据库常见故障及数据恢复分析
    作为存储和处理数据的系统,oracle数据库在使用过程中不可避免会出现各种导致数据丢失和数据损坏的故障。总结出oracle数据库常见故障以及恢复可能性。1、Oracle数据库无法启动或者启动后无法正常工作。如果故障是突发性的,通常情况下恢复的可能性极高。出现这类故障后,首先要检查s......
  • SQL、Mysql、数据库到底什么关系
    sql很多都搞不清Sql和Mysql,数据库之间的关系,其实这些概念之间的关系用下面这张图就能搞懂:也就是说,数据库是草图,Mysql是交稿,数据可以理解成砖块,sql是处理砖块(数据)的工具。下面这张图是SQL的常见分类,以及常用操作指令:数据库中表的结构包括了代表列名的列,和具体数据的行表中的......
  • 数据库管理系统的数据隔离级别
    数据库中的幻读和不可重复读是并发事务处理中的两个重要概念,它们与事务的隔离级别紧密相关。以下是对这些概念的进一步解释以及它们在不同隔离级别下的表现:不可重复读(Non-repeatableRead):不可重复读发生在一个事务读取了某个数据项,然后在同一事务中再次尝试读取同一数据项时,发......
  • 单细胞测序最好的教程(十四)测序原始数据公开至NCBI数据库
    作者按国内对于单细胞测序相关的中文教程确实不够全面,当然NCBI官网给的上传教程也比较详细了,所以变成了会者不难。本教程你现在可能用不上,但是你如果做单细胞测序,那么未来你一定会用上,建议收藏。在这里,我们将演示如何将测序文件完整上传到NCBI上。本教程首发于单细胞最好的中文......