数据库安全性定义与检查

实验3:数据库安全性定义与检查

实验3.1实体完整性实验

(1)实验目的

掌握实体完整性的定义和维护方法。

(2)实验内容和要求

定义实体完整性,删除实体完整性。能够写出两种方式定义实体完整性的SQL语句:创建表时定义实体完整性、创建表后定义实体完整性。设计SQL语句验证完整性约束是否起作用。

(3)实验重点和难点

实验重点:创建表时定义实体完整性。

实验难点:有多个候选码时实体完整性的定义。

 

(3.1.1)单个候选码的完整性定义:

 

-- ----------------------------

-- Table structure for food

-- ----------------------------

DROP TABLE IF EXISTS `food`;

CREATE TABLE `food` (

  `food_id` int(10) NOT NULL AUTO_INCREMENT PRIMARY KEY COMMENT '美食ID',

  `food_name` varchar(20) NOT NULL COMMENT '美食名称',

  `food_num` int(10) NOT NULL COMMENT '美食被多少篇游记提到',

  `city_id` int(10) NOT NULL COMMENT '城市ID',

-- 单个候选码 定义表时创建。

--  PRIMARY KEY (`food_id`)

) ENGINE=InnoDB AUTO_INCREMENT=9 DEFAULT CHARSET=utf8;

 

 

(3.1.2)多个候选码的完整性定义:

在表定义完成后创建:

alter table user add constraint p_key primary key(id,name)

 

-- ----------------------------

-- Table structure for food

-- ----------------------------

DROP TABLE IF EXISTS `food`;

CREATE TABLE `food` (

  `food_id` int(10) NOT NULL AUTO_INCREMENT COMMENT '美食ID',

  `food_name` varchar(20) NOT NULL COMMENT '美食名称',

  `food_num` int(10) NOT NULL COMMENT '美食被多少篇游记提到',

  `city_id` int(10) NOT NULL COMMENT '城市ID',

-- 多个候选码 定义表时创建。

PRIMARY KEY (`food_id`,’food_name’)

) ENGINE=InnoDB AUTO_INCREMENT=9 DEFAULT CHARSET=utf8;

 

(3.1.3)在表创建完成后,定义实体完整性

 

sql语句格式如下:

alter table 表名
add constraint 主键名称 primary key (字段)

在上述例子中:

添加完整性约束:

alter table food add constraint p_key primary key(food_id,food_name);

删除完整性约束:alter table table_name drop primary key;

(3.1.4)对主键定义的检查

user表已有数据

 

实验3.2 参照完整性实验

(1)实验目的

掌握参照完整性的定义和维护方法。

(2)实验内容和要求

定义参照完整性,定义参照完整性的违约处理,删除参照完整性。写出两种方式定义参照完整性的SQL语句:创建表时定义参照完整性、创建表后定义参照完整性。

(3)实验重点和难点

实验重点:创建表时定义参照完整性。

实验难点:参照完整性的违约处理定义。

(3.2.1)创建一个参照完整性

在创建表单时定义参照完整性:

CONSTRAINT 约束名称 FOREIGN KEY (字段名) REFERENCES  表单名 (字段名)

 

-- ----------------------------

-- Table structure for food

-- ----------------------------

DROP TABLE IF EXISTS `food`;

CREATE TABLE `food` (

  `food_id` int(10) NOT NULL AUTO_INCREMENT COMMENT '美食ID',

  `food_name` varchar(20) NOT NULL COMMENT '美食名称',

  `food_num` int(10) NOT NULL COMMENT '美食被多少篇游记提到',

  `city_id` int(10) NOT NULL COMMENT '城市ID',

PRIMARY KEY (`food_id`,’food_name’),

CONSTRAINT con_key FOREIGN KEY (city_id)  REFERENCES  city (city_id)

) ENGINE=InnoDB AUTO_INCREMENT=9 DEFAULT CHARSET=utf8;

 

(3.2.2)定义一个参照完整性的检查

--检查约束
alter table food check constraint con_key;

(3.2.3)创建表后的定义和删除操作

定义外键:

alter table food add constraint con_key FOREIGN KEY(city_id) REFRENCES city(city_id);

删除外键:

alter table food drop con_key;

 

实验3.3 用户自定义完整性实验

(1)实验目的

掌握用户自定义完整性的定义和维护方法。

(2)实验内容和要求

针对具体应用语义,选择NULL/NOT NULL、DEFAULT,UNIQUE、CHECK等,定义属性上的约束条件。

(3)实验重点和难点

实验重点:NULL/NOT NULL, DEFAULT。

实验难点:CHECK。

 

CREATE TABLE `spot` (

  `spot_id` int(10) NOT NULL AUTO_INCREMENT COMMENT '景点ID',

  `spot_name` varchar(20) NOT NULL COMMENT '景点名称',

  `city_id` int(10) NOT NULL COMMENT '城市ID',

  `spot_lat` double(10,6) NOT NULL COMMENT '景点经度',

  `spot_lng` double(10,6) NOT NULL COMMENT '景点纬度',

  `spot_num` int(10) NOT NULL DEFAULT '0' COMMENT '景点被访问次数',

  `spot_ticket` varchar(255) DEFAULT NULL COMMENT '景点门票',

  `spot_timeref` varchar(20) DEFAULT NULL COMMENT '景点用时参考',

  `spot_opentime` varchar(255) DEFAULT NULL COMMENT '景点开放时间',

  `spot_conference` varchar(255) DEFAULT NULL COMMENT '关联景点',

  PRIMARY KEY (`spot_id`)

) ENGINE=InnoDB AUTO_INCREMENT=27 DEFAULT CHARSET=utf8;

(3.3.1)用户自定义完整性约束示例:

 

(3.3.2)定义CHECK约束

定义表时的定义的CHECK约束:

constraint ck_age check (id<10);

constraint ck_tel check (LENGTHtel=11)

定义表后新增的CHECK约束:

但是在结果检查中发现Mysql中的CHECK语句存在无效化:

上网查找资料后发现Mysql中的CHECK语句是会被忽略的,所以一般用触发器或者数量较少时用枚举来限定数据。

例子:

1)触发器

DELIMITER $$

CREATE TRIGGER TestField1_BeforeInsert BEFORE INSERT ON user
FOR EACH ROW
BEGIN
IF NEW.id > 0 THEN
SEca = 0;
END IF;
END$$

又因为id是主键,id等于0已有的情况下,语句都会插入不成功。

(2)枚举

create table user (sex enum('',''),b int,id int,primary key(id));

这样子表单sex只允许插入或者

一、实验目的 使学生加深对数据库安全性和完整性的理解。并掌握SQL Server中有关用户、角色及操作权限的管理方法。熟悉通过SQL语句对数据进行完整性控制。 二、实验内容和要求   数据库安全性实验,在SQL Server企业管理器中,设置SQL Server的安全认证模式,实现对SQL Server的用户和角色管理,设置和管理数据操作权限。   具体内容如下:   设置SQL Server的安全认证模式(Windows或SQL Server和Windows(S)认证模式)。   登录的管理 创建一个登录用户   数据库用户的管理 登陆用户只有成为数据库用户(Database User)后才能访问数据库。每个数据库的用户信息都存放在系统表Sysusers中,通过查看Sysusers表可以看到该数据库所有用户的情况。SQL Server的数据库中都有两个默认用户:dbo(数据库拥有者用户)和(dba)。通过系统存储过程或企业管理器可以创建新的数据库用户。   角色的管理 创建一个角色,使创建的用户成为该角色的成员,并授予一定的操作权限。   在学生表中定义主键、外键约束。   在课程表的“课程名”字段上定义唯一约束。   在选课表的“成绩”字段上定义check约束,使之必须大于等于0且小于等于100.“课程号”字段只能输入数字字符。   定义规则,并绑定到读者表的“性别”字段,使之只能取“男、女”值。   在学生表中增加出生日期字段。定义缺省,并绑定到借阅表的“借阅日期”上,使之只能取当前日期。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值