试验八数据完整性和安全性
苏州科技学院数理学院 实验报告 课程名称数据库原理与应用 A 班级 实验地点 实验名称 实验类型 信计 1412 逸夫楼 236 学号 实验日期 0 5、25 姓名 实验学时 0 2 学时 实验八数据完整性和安全性 √验证性 综合性 □ 设计性 实验目的: 数据完整性方面: 掌握域完整性的实现方法。 掌握实体完整性的实现方法。 掌握参照完整性的方法。 数据库安全性方面: 掌握 SQL Server 身份验证模式。 掌握创建登录账户、数据库用户的方法。 掌握使用角色实现数据库安全性的方法。 掌握权限的分配。 实验内容: 数据完整性方面: 数据库的完整性设置。 数据库的安全性方面: 1、设置身份验证模式:Windows身份验证模式和混合模验证模式。 2、设置登录账户 3、设置数据库用户 4、设置数据库角色。 5、设置管理对象的权限 实验内容及步骤实验内容及步骤 (记录实验的过程):(记录实验的过程): 案例学习案例学习 3.13.1 数据完整性管理数据完整性管理 可视化界面的操作方法: 实体完整性 1.将 student 表的“sno”字段设为主键:在表设计界面中,单击左边的行选定块,选定 “sno”字段,单击工具按钮设置主键。如图 1 所示: 图 1 1. 将“sc”表的“sno”和“cno”设置为主键:在表设计界面中,单击并按住Ctrl 键 拖动左边的行选定块,选定 sno 和 cno 字段,单击工具按钮 所示: 设置主键。如图 2 图 2 域完整性 3. 将 “ssex” 字段设置为只能取 “男” , “女” 两值: 在表设计界面, 点击鼠标右键——CHECK 约束,——添加约束,添加CK_student_sex 名称,然后在约束表达式框中输入“ ssex in ( 男 , 女 ) ”。如图 3 所示。 图 3 参照完整性 4. 将“student”表和“sc”表中的“sno”字段设为参照: 打开“sc”表的设计界面, 点击工 具栏按钮, 在弹出的属性(properties)对话框中点击 “新建” 按钮, 在 “主键表(Primary key table)”下拉框中选择“student”表,在其下的字段选择框中选择 “sno”,在“外键表(Foreign key table)”下拉框中选择“sc”表,在其下的字段选择框中选择“ sno”,单击关闭即可。见 图 4。 图 4 命令方式操作方法: 实体完整性 1.将“student”表的“sno”字段设为主键: 当“student”表已存在则执行: alter table student add constraint pk_sno primary key (sno) 当“student”表不存在则执行: Create table student(sno CHAR(5) primary key , sname CHAR(10) NOT NULL, ssexCHAR(2), sage int, sdept CHAR(4)) 注注: :可用命令“drop table student”删除“student”表 2. 添加一身份证号字段,设置其惟一性.(注: 操作前应删除表中的所有记录) Alter table student add id char(18) unique (id) 3. 将“sc”表的“sno”和“cno”设置为主键: 当“sc”表已存在则执行: alter table sc add constraint PK_SnoCno primary key (sno,cno) 当“sc”表不存在则执行: Create table sc(sno CHAR(5), cno CHAR(2), grade INT NULL, constraint PK_SnoCno primary key (sno,cno)) 域完整性 4. 将“ssex”字段设置为只能取“男”,“女”两值: 当“student”表已存在则执行: alter table student add constraint CK_Sex check (ssex in ( 男 , 女 )) 当“student”表不存在则执行: Create table student(sno CHAR(5) primary key , sname CHAR(10), ssexCHAR(2) check (ssex in ( 男 , 女 )) , sage int, sdept CHAR(4)) 5. 设置学号字段只能输入数字: alter table student add constraint CK_Sno_at check (sno like [0-9][0-9][0-9][0-9][0-9] ) 6. 设置身份证号的输入格式: alter table student add constraint CK_ID_at check ((id like [0-9][0-9][0-9][0-9][0-9][0-9][1-2][0-9][0-9][0-9][0-1][0-9][0-3][0-9][0-9][0-9][0-9]_ ) OR (id like [0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-1][0-9][0-3][0-9][0-9][0-9][0-9] )) 7. 设置 18 位身份证号的第 7 位到第 10 位为合法的年份(1900-2050) alter table student add constraint CK_ID_at2 check (len(id)=18 and ( (convert(smallint,substring(id,7,4) )=1900) and(convert(smallint,substring(id,7,4) )=22 or ssex= 女 and sage=20 ) 参照完整性参照完整性 9. 将“student”表和“sc”表中的“sno”字段设为参照: 当“sc”表已存在则执行: alter table sc addconstraintFP_sno foreign key (sno) references student(sno ) 当“sc”表不存在则执行: Create table sc(sno CHAR(5)constraintFP_sno foreign key references student(sno), cno CHAR(2),gradeINT NULL, constraint PK_SnoCno primary key (sno,cno) ) 完整性验证 1. 实体完整性: 在“student”表数据浏览可视化界面中输入学号相同的两条记录将会出 现错误如图 5 所示: 图 5 或者在命令窗口输入下面两条命令也会出现错误提示: insert into student values( 95003 , 张三 , 男 ,24, CS , 42222919901012903X ) insert into student values(