实验四--数据库的安全性、完整性控制
时间:2022-07-22
本文章向大家介绍实验四--数据库的安全性、完整性控制,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
--一、创建新的数据库,并且没有任何的约束
--创建三个表 没有任何的约束
create table Student(Sno varchar(20) , Sname varchar(10), Ssex varchar(2), Sage int, Sdept varchar(5) ) --设置Sno为主键
create table Course(Cno int , Cname varchar(20), Cpno int, Ccredit int );
create table SC(Sno varchar(20), Cno int, Grade int);
--插入相应的数据
insert into Student(Sno,Sname,Ssex,Sage,Sdept) values('201215121','李勇','男',20,'CS');
insert into Student(Sno,Sname,Ssex,Sage,Sdept) values('201215122','刘晨','女',19,'CS');
insert into Student(Sno,Sname,Ssex,Sage,Sdept) values('201215123','王敏','女',18,'MA');
insert into Student(Sno,Sname,Ssex,Sage,Sdept) values('201215125','张立','男',19,'IS');
insert into Course(Cno,Cname,Cpno,Ccredit) values(1,'数据库','5','4');
insert into Course(Cno,Cname,Cpno,Ccredit) values(2,'数学','','2');
insert into Course(Cno,Cname,Cpno,Ccredit) values(3,'信息系统','1','4');
insert into Course(Cno,Cname,Cpno,Ccredit) values(4,'操作系统','6','3');
insert into Course(Cno,Cname,Cpno,Ccredit) values(5,'数据结构','7','4');
insert into Course(Cno,Cname,Cpno,Ccredit) values(6,'数据处理','','2');
insert into Course(Cno,Cname,Cpno,Ccredit) values(7,'PASCAL语言','6','4');
insert into SC(Sno,Cno,Grade) values('201215121','1','92');
insert into SC(Sno,Cno,Grade) values('201215121','2','85');
insert into SC(Sno,Cno,Grade) values('201215121','3','88');
insert into SC(Sno,Cno,Grade) values('201215122','2','90');
insert into SC(Sno,Cno,Grade) values('201215122','3','80');
--二、设置相应的约束
--1. 参照学生数据库中各表给出的主键、外键设置的设置要求,在自己创建的表中进行相应的设置。
--修改学生表不能为空的字段
alter table Student alter column SNo varchar(20) not null
--修改课程表不能为空的字段
alter table Course alter column Cno int not null
alter table Course alter column Cpno int null
--修改成绩表不能为空的字段
alter table SC alter column SNo varchar(20) not null
alter table Sc alter column Sno varchar(10) not null
alter table Sc alter column grade varchar(5) not null
--修改学生表中的Sno学号为主键
alter table Student add constraint Sno primary key(Sno)
--修改课程表的主键和外键
alter table Course add constraint Cno primary key(Cno)
use school
alter table Course add constraint Cpno foreign key(Cpno) references Course(Cno)
exec sp_help Student
--2. 参照以上各表给出的各种约束条件设置要求,在自己创建的表中进行相应的设置。
--3. 输入各种数据以验证约束条件的作用。
--4. 创建三个该数据库的用户。
--首先在数据的服务器级别创建登录账户,密码
create login zhenghui1 with password='123456';
create login zhenghui2 with password='123456';
create login zhenghui3 with password='123456';
--创建数据库用户 在创建数据库用户的时候的前提下是:必须创建好服务器登录账户
create user zhenghui1;
create user zhenghui2;
create user zhenghui3;
--5. 用SQL命令和可视化环境两种方式分别实现为所有用户授予对某个表的查询权限。
--授权所有用户对Student表可查询
--授权对象可以为用户名和public,public的话,就是把权限授权给所有用户
grant select on Student to public
--6. 用SQL命令和可视化环境两种方式分别实现为一个用户授予对某表中某字段的查询权限,不允许其将该权限继续传递下去。验证该权限的作用。
grant select(Sno) on Student to zhenghui1
grant select(Sno) on Student to zhenghui3
--sp_addrolemember zhenghui1,zhenghui2
--7. 用SQL命令和可视化环境两种方式分别实现为另一个用户授予对某表中某字段的修改权限,并允许其将该权限继续传递下去。验证该权限的作用。
--授权对学生表的姓名字段可以有修改的权限,并允许将此权限传递下去
grant update(Sname) on Student to zhenghui2 with grant option;
--sp_addrolemember zhenghui2,zhenghui3;
grant delete(Sname,Sno) on Student to zhenghui3
--8. 收回为所有用户授予的对某表的查询权限。
revoke select on Student from public;
--9. 收回为用户授予对某表中某字段的查询权限。
revoke select(Sno) on Student from zhenghui1 ;
--10. 收回为用户授予对某表中某字段的修改权限。
--cascade 是必须的,不然会报错,因为上面已经把zhenghui2用户的权限授权给了zhenghui3,加了cascade命令之后,会把权限全部挨个的收回
revoke update(Sname) on Student from zhenghui2 cascade;
- Django-model进阶(中介模型,查询优化,extra,整体插入)
- flask-session组件
- day10、nfs+rsync全网备份及实时同步
- Flask-信号(blinker)
- Python中的单例模式的几种实现方式的及优化
- 程序员学习python必备的4大网站,你用过几个?
- 知面不知心?AI帮你看懂对方的“小心思”
- 数据库连接池,本地线程,上下文管理
- 2018年微信小程序风口趋势预测
- 小程序走在取代APP路上
- 重磅!小程序社交立减金全面开放,快来领攻略
- VR/AR未来何去何从?
- 使用Python+Tensorflow的CNN技术快速识别验证码
- 数字化医院科研信息化管理平台的设计
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- Notes | Chrome 浏览器常用快捷键
- Python | 从 PDF 中提取文本内容
- Stata | 自动生成中南财大2019拟录取硕士研究生分析报告
- Stata | 聊聊数据排序的几种方式
- 在生产中应用广泛的排序算法
- SQL | SQL 必知必会笔记 (一 )
- 如何在树莓派4B上安装EMQ X Broker
- SQL | SQL 必知必会笔记 (二)
- 基于桶子法实现的两种排序算法
- Notes | 微观经济学课堂笔记(一)
- 将终结点图添加到你的ASP.NET Core应用程序中
- Stata | 爬取 CFPS 文献传送门并制作成 Markdown
- 委托的好处
- Elasticsearch安装和配置
- Notes | QUAIDS 模型