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

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

时间:2023-05-23 11:24:34浏览次数:69  
标签:students 数据库 char SC 完整性 GO Cno 安全性 CREATE

以下是可能的代码示例:

  1. 创建数据库students、创建表Student、Course和SC
Copy Code
CREATE DATABASE students
GO

USE students
GO

CREATE TABLE Student (
 Sno char ( 7 ) PRIMARY KEY,
 Sname char ( 10 ) NOT NULL,
 Ssex char (2), 
 Sage tinyint ,
 Sdept char (20)
)
GO

CREATE TABLE Course (
 Cno char(10) NOT NULL,
 Cname char(20) NOT NULL,
 Ccredit tinyint ,
 Semester tinyint,
 PRIMARY KEY(Cno) 
) 
GO

CREATE TABLE SC 
(
 Sno char(7) NOT NULL,
 Cno char(10) NOT NULL,
 Grade tinyint,
 XKLB char(4) , 
 PRIMARY KEY ( Sno, Cno )
)
GO
  1. 创建新的Windows登录名,并配置它的权限
Copy Code
USE master
GO

CREATE LOGIN new_login WITH PASSWORD='<enter_new_password_here>', DEFAULT_DATABASE=students
GO

USE students
GO

CREATE USER new_user FOR LOGIN new_login
GO

GRANT SELECT, INSERT, UPDATE ON Student (Sname, Ssex, Sage) TO new_user
GO

EXEC sp_addrolemember '<自己学号-role>', 'new_user'
GO
  1. 设置SQL Server为混合认证安全认证模式

在SSMS中选择“服务器属性” -> “安全性” -> “服务器身份验证”,并选择“SQL Server和Windows身份验证模式”

  1. 用刚才创建的登录名登录服务器

在SSMS中选择“连接到数据库引擎”,输入刚才创建的登录名和密码

  1. 创建一个students数据库用户(自己学号-user)和角色(自己学号-role)
Copy Code
USE students
GO

CREATE USER '<自己学号-user>' FOR LOGIN '<自己学号>'
GO

CREATE ROLE '<自己学号-role>'
GO
  1. 用管理器实现权限的分配
Copy Code
USE students
GO

GRANT SELECT ON STUDENT TO '<自己学号-role>'
GO

GRANT SELECT ON COURSE TO '<自己学号-role>'
GO

GRANT SELECT ON SC TO '<自己学号-role>'
GO

DENY UPDATE ON SC(grade) TO '<自己学号-role>'
GO

EXEC sp_addrolemember '<自己学号-role>', '<自己学号-user>'
GO
  1. 创建触发器
Copy Code
USE students
GO

-- 定义course表中credit属性为“3”的默认值。
ALTER TABLE COURSE ADD CONSTRAINT DefaultCredit DEFAULT 3 FOR Ccredit
GO

-- 建立course与sc表间来维护参照完整性而使用的一个级联删除触发器、一个级联修改触发器和一个受限插入触发器。

CREATE TRIGGER tr_delete_sc ON COURSE
FOR DELETE
AS
BEGIN
    DELETE FROM SC WHERE Cno IN (SELECT Cno FROM deleted)
END
GO

CREATE TRIGGER tr_update_sc ON COURSE
FOR UPDATE
AS
BEGIN
    UPDATE SC SET Cno = inserted.Cno WHERE Cno = deleted.Cno
END
GO

CREATE TRIGGER tr_insert_sc ON SC
FOR INSERT
AS
BEGIN
    IF NOT EXISTS (SELECT * FROM COURSE WHERE Cno = inserted.Cno)
    BEGIN
        RAISERROR ('Invalid course number', 16, 1)
        ROLLBACK TRANSACTION
    END
END
GO
  1. 编写存储过程
Copy Code
USE students
GO

CREATE PROCEDURE CountFailingStudents
AS
BEGIN
    SELECT COUNT(*) FROM SC WHERE Grade<60
END
GO

CREATE PROCEDURE AvgCourseGrade
    @cno char(10),
    @avg_grade float output
AS
BEGIN 
    SELECT @avg_grade = AVG(Grade) 
    FROM SC 
    WHERE Cno = @cno
END
GO

CREATE PROCEDURE ConvertToGrade
AS
BEGIN 
    UPDATE SC SET XKLB = 
    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
GO

标签:students,数据库,char,SC,完整性,GO,Cno,安全性,CREATE
From: https://www.cnblogs.com/yunbianshangdadun/p/17422767.html

相关文章

  • 实验一 数据库和表的建立、数据操作
    实验一数据库和表的建立、数据操作一、实验目的:掌握使用SQL语言进行数据定义和数据操纵的方法。二、实验要求:建立一个数据库stumanage,建立三个关系表student,course,sc。向表中插入数据,然后对数据进行删除、修改等操作,对关系、数据库进行删除操作。三、实验步骤:1、开始......
  • 实验一 数据库和表的建立、数据操作(1)
    建立数据库stumanage:SQLCopyCodeCREATEDATABASEstumanageON(NAME='stumanage_data',FILENAME='D:\stumanage\stumanage_data.mdf',SIZE=5MB,MAXSIZE=50MB,FILEGROWTH=5MB)LOGON(NAME='stumanage_log',FILENAME=&......
  • 实验一 数据库和表的建立、数据操作(实验体会)
    我认为学习数据库和SQL语言对于今后从事计算机相关领域的工作和研究非常重要。通过这个实验,您深入了解了创建数据库和表、插入数据、数据修改和删除的方法,并学会了使用SQL语言进行数据操作。这将有助于您在未来的数据库设计和管理中获得更好的经验和技能。同时,也希望您能够不断......
  • redis专题六:redis 删除策略、淘汰策略、数据库与缓存数据一致性、事物、发布订阅
    文章目录一、删除策略二、淘汰策略三、数据库与缓存数据一致性四、redis事务五、redis发布订阅一、删除策略redis使用:惰性删除+定期删除1、定时删除–>以CPU内存换redis内存定时删除过期的缓存值2、惰性删除–>以redis内存换CPU内存查询到该key时如果过期,删除该过期的缓存值......
  • js 连接数据库 提示:ActiveXObject is not defined
    ActiveXObjectisnotdefined最近比较闲,上班瞎捣鼓一下,没想到报错了,提示ActiveXObjectisnotdefined大概是在js连接数据库时new对象使用的是ActiveXObject完事儿使用的浏览器是edge,但是在ie就没有问题,那么估计就是浏览器的设置问题点开edge的设置然后在默认浏览器的侧栏......
  • .net6中数据库查询报错:'OFFSET' 附近有语法错误。 在 FETCH 语句中选项 NEXT 的用法无
    错误语句:在数据库查询中使用skip()问题原因:数据库版本为SQLServer2008,不支持'Fetch'和'Next'语句SQLServer2012及后续版本才支持相关语句解决方法:1.引用包: System.Data.SqlClient和EntityFrameworkCore.UseRowNumberForPaging2.使用:在Program.cs中调整数据库连接bu......
  • 数据库设计三范式
    概述1NF是对属性的原子性约束,要求属性具有原子性,不可再分解反例: name-age非原子属性,违反1NF,应该拆解 2NF是对记录的惟一性约束,要求记录有惟一标识,即实体的惟一性反例:订单表两个相同ID,不能确保唯一性,违反2NF。可以分开,插入中间表 3NF是对字段冗余性......
  • oracle_将一个数据库的某一张表复制到另一个数据库(表名与表结构结构相同,数据库不同)
    数据库:数据库A表名:student数据库A的库名:school_A数据库B表名:studentinsertintostudent--要把数据插入数据库B中的student表select*fromstudent@school_A--数据库A:school_A中的student表(注意1:school_A需要是登录状态注意2:输入@时,一般会有提示,也可根据......
  • 基于JAVA的springboot+vue“智慧食堂”设计与实现,食堂管理系统,附源码+数据库+lw文档+P
    1、项目介绍本系统的用户可分为用户模块和管理员模块两大界面组成。一个界面用于管理员登录,管理员可以管理系统内所有功能,主要有首页,个人中心,用户管理,菜品分类管理,菜品信息管理,留言板管理,系统管理,订单管理等功能;另一界面用于用户登录,用户进入系统可以实现首页,菜品信息,留言板,个人......
  • Yii2连接多个数据库
    1、使用高级模板yii2-app-advanced2、设置common\config\main-local.php本地文件'components'=>['db'=>['class'=>'yii\db\Connection','dsn'=>'mysql:host=local......