数据库课堂笔记

文章详细介绍了数据库中的权限管理,包括如何授予和回收用户权限,以及角色的概念。此外,还讨论了数据库完整性的重要性,如实体完整性和参照完整性,并给出了一些违反这些完整性的实例。最后,提到了触发器在数据库监控中的应用。
摘要由CSDN通过智能技术生成

安全性


权限的授予和回收:

        权限授予一般格式
                grant  <权限>  on  <对象类型>  to  <用户>  [with  grant  option];

        with  grant  option:允许授予权限的用户再进行权限的授予,即权限的传播;
        All privileges: 将一个表格的所有的权限(增删改查引用)给用户;    

        权限回收一般格式:    
                revoke  <权限>  on  <对象类型>  from  <用户>  [cascade][restrict];

        cascade:回收授权给用户的权限,同时此用户授权给的其他用户权限同样失效;

         管理员创建新用户:
                create  User  <用户名>;

        角色的理解:角色相当于管理员统一授权和回收权限的群聊。角色的权限的授予和回收的格式和权限授予一般格式无差别;

        管理员对角色的创建:
                create  role  <角色名>;

审计:

       理解: 相当于审计员的日志。

        审计语言:
                audit       noaudit
        注:
审计语言在SQL server中不可以使用。

        例: audit alter,update on SC;
                noaudit alter,update on SC;

课堂实例: 


/*把查询Student表的权限授权给U1*/
grant select on Student To U1;

/*把Student表和Course表的全部权限给U2和U3*/
grant All privileges on Student to U2,U3;
grant All privileges on Course to U2,U3;

/*把对表SC表的查询授权给所有用户*/
grant Select on SC to Public;

/*把查询Student表和修改学生学号的权限授予给用户U4*/
grant update(Sno),select on Student to U4;

/*把对表SC的insert权限授权给U5用户,并允许他再将此权限授权给其他用户*/
grant Insert on SC to U5 with grant Option;

/*把用户U4修改学生学号的权限回收*/
revoke update(Sno) on Student from U4;

/*回收所有用户对表SC的查询权限*/
revoke select on SC from public;

/*把用户U5对SC表的insert权限收回*/
revoke insert on SC from U5 cascade;

/*建立计算机系学生的视图,把对视图的select权限授给王平,把该视图上的所有操作权限授予张明*/
create view CS_Student
as
Select Sno,Sname,Ssex,sage,Sdept from Student
where Sdept='计算机系';

 数据库完整性


实体完整性:

设置主码等的操作即为实体而完整性。

通过primary  key来定义主码,在实体完整性中分表级约束、列级约束
        表级约束:在表中单独定义主码primary  key;
        列级约束:在列后定义主码primary  key;

违反实体完整性的课堂实例:

/*向学生表中添加一条记录
9512101 张三 男 21 数学系*/
insert into Student values(9512101,'张三','男',21,'数学系');

/*将王敏的学号改为9512101*/
update Student set Sno='9512101' where Sname='王敏';

参照完整性:

设置外码等的操作即为参照完整性。

通过foreign  key(列名)  references<表名>(列名)来定义外码。

增删改参照表的码使参照完整性遭到破坏。        

违反参照完整性的课堂实例:

/*在选课表SC表中增加一条选课记录
9999999 c01 99*/
/*INSERT 语句与 FOREIGN KEY 约束"FK__SC__Sno__0EA330E9"冲突*/
insert into SC values(9999999,'c01',99);

/*演示操作第一种违反参照完整性的示例
向SC表中添加一条记录:7777777,c01*/
insert into SC(Sno,Cno) values('7777777','c01');

/*演示操作第二种违反参照完整性的示例
向修改SC表中9512101的学号为:7777777*/
update SC set Sno='7777777' where Sno='9512101';

/*演示操作第三种违反参照完整性的示例
从Student表中删除李勇的记录*/
delete from Student where Sname='李勇';

/*演示操作第四种违反参照完整性的示例
修改Student表中李勇的学号为:7777777*/
update Student set Sno='7777777' where Sname='李勇';

/*向学生表中添加一条记录,语句如下:
违反Check约束1:man;2:50*/
insert into Student(Sno,Sname,Ssex,Sage)
	values('9512101','张三','man',50);

/*创建学生等级表Student,要求学号在90000~99999之间,
姓名不能取空值,年龄小于30,性别只能是“男”或“女”*/
create table Student1
(Sno numeric(6)
 constraint c1 check(sno between 90000 and 99999),
 Sname char(20)
 constraint c2 not NULL,
 Sage numeric(3)
 constraint c3 check (Sage <30),
 Ssex char(2)
 constraint c4 check (Ssex in('男','女')),
 constraint StudentKey primary key(Sno)
 );

//查看创建的表的约束条件
exec SP_helpconstraint Student1;

/*查看全局约束条件*/
exec SP_help Student1;

约束不可以修改,只可以增加和删除。

/*删除c4约束*/
alter table student1 drop constraint c4;

触发器:


create trigger语法格式

create  trigger <触发器名>
{before/after} <触发事件>  on  <表名>    指明触发器激活的时间是在执行触发事件前或后

删除触发器:
        drop Trigger <触发器名>;

表的拥有者才可以在表上创建触发器。

/*创建一个触发器(当student表修改时,显示一个已经修改学生信息*/
create Trigger T1 on Student for update as
print '已修改Student表的数据' go

/*查看代码*/
exec Sp_helptext T1;

/*将学生表中的所有学生的年龄加1岁*/
update student set Sage=sage+1;

课堂SQL数据库环境资源:


表格创建:

CREATE TABLE Student
(
Sno char(7) PRIMARY KEY,
Sname char(10) NOT NULL,
Ssex char(2) CHECK(Ssex='男' OR Ssex='女'),
Sage tinyint CHECK(Sage>=15 AND Sage<=45),
Sdept char(20) DEFAULT '计算机系' 
);

CREATE TABLE Course
(
Cno char(10) NOT NULL,
Cname char(20) NOT NULL,
Ccredit tinyint CHECK(Ccredit>0),
Semester tinyint CHECK(Semester>0),
PRIMARY KEY(Cno)
);

CREATE TABLE SC
(
Sno char(7) NOT NULL,
Cno char(10) NOT NULL,
Grade tinyint,
CHECK(Grade>=0 AND Grade<=100),
PRIMARY KEY(Sno,Cno),
FOREIGN KEY(Sno) REFERENCES Student(Sno),
FOREIGN KEY(Cno) REFERENCES Course(Cno)
);

Student表数据的插入: 

insert into student values('9512101','李勇','男',19,'计算机系');
insert into student values('9512102','刘晨','男',20,'计算机系');
insert into student values('9512103','王敏','女',20,'计算机系');
insert into student values('9521101','张立','男',22,'信息系');
insert into student values('9521102','吴宾','女',21,'信息系');
insert into student values('9521103','张海','男',20,'信息系');
insert into student values('9531101','钱小平','女',18,'数学系');
insert into student values('9531102','王大力','男',19,'数学系');

Course表数据的插入:

insert into course values('c01','计算机文化课',3,1);
insert into course values('c02','VB',2,3);
insert into course values('c03','计算机网络',4,7);
insert into course values('c04','数据库基础',6,6);
insert into course values('c05','高等数学',8,2);
insert into course values('c06','数据结构',5,4);

SC表数据的插入:

insert into sc values('9512101','c01',90);
insert into sc values('9512101','c02',86);
insert into sc values('9512101','c06',null);
insert into sc values('9512102','c02',78);
insert into sc values('9512102','c04',66);
insert into sc values('9521102','c01',82);
insert into sc values('9521102','c02',75);
insert into sc values('9521102','c04',92);
insert into sc values('9521102','c05',50);
insert into sc values('9521103','c02',68);
insert into sc values('9521103','c06',null);
insert into sc values('9531101','c01',80);
insert into sc values('9531101','c05',95);
insert into sc values('9531102','c05',85);

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值