什么是数据库中的自主存取控制方法和强制存取控制方法
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了什么是数据库中的自主存取控制方法和强制存取控制方法相关的知识,希望对你有一定的参考价值。
自主存取控制是基于存取权限或特权概念及其实现技术与机制,哪个用户对哪个数据对象具有什么样的权限通过授权来说明。可通过存取控制矩阵来实现。强制存取控制方法是为保证更高程度的安全性,按照TDI/TCSEC标准中安全策略的要求,所采取的强制存取检查手段。
在数据库中,并非所有的用户都要(能)存取所有的数据。用户必须获得适当的权限才可以对所请求的数据其进行相应的操作。检查用户对数据存取权限的过程称就是存取控制。在物理层或逻辑层都可以进行存取控制。
扩展资料
实现存取控制:
为了实现存取控制,安全机构必须维护一个存取控制矩阵。它包含被授权者、权限施加对象及授予的权限三要索。图中,左标题栏为用户标识符或口令,上标题行为数据(包括程序)的标识符,矩阵体指明了各用户对相应数据的存取权限。
空白则表明该用户对相应数据无任何存取权,授权矩阵的大小与复杂性由安全机构设计与实现而定,并依赖于DBMS、OS及DCMS提供的软件支持。
存取控制矩阵的开发是DBA的任务,但DBMS必须提供DBA以相应的实用例程来建立、维护(批处理或联机处理)、联机存取该矩阵,报告矩阵的内容及违例情况。
参考资料来源:百度百科--存取控制过程
参考资料来源:百度百科--强制存取控制(MAC)方法
自主存取控制方法:定义各个用户对不同数据对象的存取对象。当用户对数据库访问时首先检查用户的存取权限。防止不合法用户对数据库的存取。
强制存取控制方法:每一个数据对象被(强制地)标以一定的密集,每一个用户也被(强制地)授予某一个级别的许可,系统规定只有具有谋一许可证级别的用户才能存取某一个密级的数据对象。
扩展资料
1、数据库是一个共享资源,可以提供多个用户使用。这些用户程序可以一个一个地串行执行,每个时刻只有一个用户程序运行,执行对数据库的存取,其他用户程序必须等到这个用户程序结束以后方能对数据库存取。
2、为了实现存取控制,安全机构必须维护一个存取控制矩阵。它包含被授权者、权限施加对象及授予的权限三要索。图中,左标题栏为用户标识符或口令,上标题行为数据(包括程序)的标识符,矩阵体指明了各用户对相应数据的存取权限。
参考技术B 数据库的存取控制机制是定义和控制用户对数据库数据的存取访问权限,以确保只授权给有资格的用户访问数据库并防止和杜绝对数据库中数据的非授权访问。存取控制机制主要包括两部分:
(1) 定义用户权限,并将用户权限登记到数据字典中。用户权限是指不同的用户对于不同的数据对象允许执行的操作权限。系统必须提供适当的语言定义用户权限,这些定义经过编译后存放在数据字典中,被称为安全规则或授权规则。
(2) 合法权限检查。每当用户发出存取数据库的操作请求后(请求一般应包括操作类型、操作对象和操作用户等信息),DBMS查找数据字典,根据安全规则进行合法权限检查,若用户的操作请求超出了定义的权限,系统将拒绝执行此操作。
用户权限定义和合法权限检查机制一起组成了DBMS的安全子系统。
存取控制又可以分为自主存取控制(DAC)和强制存取控制(MAC)两类。
自主存取控制方法中,拥有数据对象的用户即拥有对数据的所有存取权限,而且用户可以将其所拥有的存取权限转授予其他用户。自主存取控制很灵活,但在采用自主存取控制策略的数据库中,这种由授权定义的存取限制很容易被旁路,使系统无法对抗对数据库的恶意攻击。因此,在要求保证更高程度的安全性系统中采用了强制存取控制的方法。
在强制存取控制方法中,将用户和客体分为多种安全级别,对数据库中每个存取对象指派一个密级,对每个用户授予一个存取级,由系统提供基于标识的高级安全认证。对任意一个对象,只有具有合法存取级的用户才可以存取。本回答被提问者和网友采纳 参考技术C ①自主存取控制(Discretionary Access Control ,简称DAC):用户对不同的数据对象有不同的存取权限,不同用户对同一对象有不同的权限,可转授用户存取权限。
TCSEC中的 C2级
灵活
②强制存取控制(Mandatory Access Control,简称MAC):每一数据对象标以一定密级,每一用户对应某一级别的许可证,只有具有合法许可证的用户才可以存取某一对象。
TCSEC中的B1级
严格
③
自助存取控制机制仅仅通过对数据的存取权限进行安全控制,为数据本身并无安全标记;强制存取控制机制则对数据本身进行密级标记,无论数据如何复制,标记与数据是一个不可分的整体,只有符合密级标记要求的用户才可以操纵数据,从而提供了更高级别的安全性。
强制存取控制的安全性级别更高。 参考技术D 自主存取控制:定义用户对不同数据对象的存取权限,当用户对数据库访问是首先检查用户的存取权限。防止不合法用户对数据库的存取。
强制存储控制:每一个数据对象被标以一定的密级,每一个用户被授予一定的级别许可证。系统规定只有具有某一许可证级别的用户才可对某一密级的用户进行数据操作
实验4数据库的安全性完整性
实验4数据库的安全性、完整性
实验目的要求
-
掌握自主存取控制权限的定义和维护方法;
-
掌握实体完整性的定义和维护方法;
-
掌握参照完整性的定义和维护方法;
-
掌握用户自定义完整性的定义和维护方法。
实验主要内容
-
定义用户、角色,分配权限给用户、角色,回收权限,以相应的用户名登录数据库验证权限分配是否正确。选择一个应用场景,使用自主存取控制机制设计权限分配。可以采用两种方案。方案一:采用sa超级用户登录数据库,完成所有权限分配工作,然后用相应用户名登陆数据库以验证权限分配正确性;方案二:采用sa用户登陆数据库创建三个部门经理用户,并分配相应的权限,然后分别用三个经理用户名登陆数据库,创建相应部门的USER, ROLE,并分配相应权限。验证权限分配之前,请备份好数据库;针对不同用户所具有的权限,分别设计相应的SQL语句加以验证。
-
定义实体完整性,删除实体完整性。能够写出两种方式定义实体完整性的SQL语句:创建表时定义实体完整性、创建表后定义实体完整性。设计SQL语句验证完整性约束是否起作用。
-
定义参照完整性,定义参照完整性的违约处理,删除参照完整性。写出两种方式定义参照完整性的SQL语句:创建表时定义参照完整性、创建表后定义参照完整性。
-
针对具体应用语义,选择NULL/NOT NULL、DEFAULT,UNIQUE、CHECK等,定义属性上的约束条件。
实验仪器设备
-
学生每个一台PC机
-
已安装SQL Server环境
实验记录
安全性
创建和删除用户
-
使用sa超级用户登录数据库
-
打开【新建查询】,输入
CREATE USER U1 WITHOUT LOGIN EXECUTE AS USER = ‘U5‘ REVERT
创建多个不用登录的用户
-
查看当前用户授权情况的语句为
SELECT pr.principal_id, pr.name, pr.type_desc, pr.authentication_type_desc, pe.state_desc, pe.permission_name, s.name + ‘.‘ + o.name AS ObjectName FROM sys.database_principals AS pr JOIN sys.database_permissions AS pe ON pe.grantee_principal_id = pr.principal_id JOIN sys.objects AS o ON pe.major_id = o.object_id JOIN sys.schemas AS s ON o.schema_id = s.schema_id;
4.定义多个用户
CREATE USER U1 WITHOUT LOGIN ;
CREATE USER U2 WITHOUT LOGIN ;
CREATE USER U3 WITHOUT LOGIN ;
CREATE USER U4 WITHOUT LOGIN ;
CREATE USER U5 WITHOUT LOGIN ;
5.删除用户
--声明数据库引用
use database_name;
go
--判断是否存在用户自定义用户,如果存在则删除。
if exists(select * from sys.database_principals where name=user_name)
--把架构所有者修改回来架构自身
alter authorization on schema::[Architecture_name] to Architecture_name;
--删除角色拥有的成员
alter role [[Architecture_name] drop member user_name;
--删除扩展属性
exec sys.sp_dropextendedproperty @name=N‘tests_description‘, @level0type=N‘user‘,@level0name=N‘user_name‘
--删除用户架构
drop user user_name;
go
--database_name
--数据库名称
--user_name
--用户名称
--Architecture_name
--架构名称
--tests_description
--扩展属性名称
执行完命令之后,点击刷新便能够看到用户被删除。
给用户授权
授权、查,增,改的方法
use 学生
go
--分配权限
grant select,insert,Update on Students to U1
grant create table to U1
把对 Student表和 Course表的全部操作权限授予用户U2和U3。
SQL server的授权同时只能操作一个数据库对象(Object)
GRANT ALL PRIVILEGES ON OBJECT::S_T.Student TO U2,U3
GRANT ALL PRIVILEGES ON OBJECT::S_T.Course TO U2,U3
把对表SC的查询权限授予所有用户
GRANT SELECT ON SC TO PUBLIC
把查询Student表和修改学生学号权限授给用户U4
GRANT UPDATE(SNO),SELECT
ON Student
TO U4
验证有效性
BEGIN TRANSACTION;
EXECUTE AS USER=‘U4‘;
UPDATE student
SET SNO=‘1234‘
WHERE SNO=‘201215125‘;
REVERT;
SELECT * FROM student;
ROLLBACK;
把对表SC的 INSERT权限授予U5用户,并允许将此权限再授予其他用户。
GRANT INSERT
ON SC
TO U5
WITH GRANT OPTION
验证有效性
EXECUTE AS USER=‘U5‘;
INSERT INTO SC(SNO,CNO,GRADE) VALUES (201215125,4,98);
REVERT;
SELECT * FROM SC;
U5将INSERT的权限传播给U6,U6也可将INSERT的权力授予U7
EXECUTE AS USER =‘U5‘
GRANT INSERT
ON SC
TO U6
WITH GRANT OPTION
REVERT
EXECUTE AS USER =‘U6‘
GRANT INSERT
ON SC
TO U7
WITH GRANT OPTION
REVERT
权限回收
--把用户U4修改学生学号的权限收回
REVOKE UPDATE(SNO)
ON student
FROM U4
--收回所有用户对表SC的查询权限
REVOKE SELECT
ON SC
FROM PUBLIC
--把用户U5,U6,U7对SC表的INSERT权限收回
--使用CASCADE
REVOKE INSERT
ON SC
FROM U5 CASCADE
验证权限是否收回成功
EXECUTE AS USER=‘U4‘;
UPDATE student
SET SNO=‘1234‘
WHERE SNO=‘201215125‘;
REVERT;
EXECUTE AS USER=‘U1‘;
SELECT * FROM SC
REVERT;
EXECUTE AS USER=‘U5‘;
INSERT INTO SC(SNO,CNO,GRADE) VALUES (201215125,4,98);
REVERT;
定义实体完整性,删除实体完整性
-
实体完整性
- 实体完整性定义
- CREAT TABLE中用PRIMARY KEY定义
- 单属性构成的码有两种说明方法(PRIMARY KEY的位置和语法不同):
- 定义为列级约束条件
- 定义为表记约束条件
- 对多个属性构成的码只有一种说明方法
- 定义为表级约束条件 (PRIMARY KEY(Sno,Cno))
- 实体完整性检查和违约处理
- 插入和更新时DBMS按照实体完整性规则进行自动检查
- 由于全表扫描效率太低,便使用索引(B+树)
- 插入和更新时DBMS按照实体完整性规则进行自动检查
- 实体完整性定义
--创建表
CREAT TABLE COURSE(
CNO CHAR(4) NOT NULL
PRIMARY KEY,
CNAME NCHAR(50),
CPNO CHAR(4),
ccredit smallint
)
--添加实体完整性
ALTER TABLE COURSE
ADD CONSTRAINT COURSE_PK
PRIMARY KEY(Cno);
--删除实体完整性
ALTER TABLE Course DROP CONSTRAINT PK__Course__C1fe6373BC8AAD0E
定义参照完整性,参照完整性违约处理,删除参照完整性
-
参照完整性
-
参照完整性定义
-
一个关系的外码或者取空值或者等于它所参照的关系的主码值
-
在CREAT TABLE中用FOREIGN KEY短语定义哪些列为外码
-
用REFERENCES短语指明这些外码参照哪些表的主码
-
表级定义、列级定义参照完整性,具体代码实例看资料
-
-
在参照完整性检查和违约处理
-
对参照表和被参照表进行增删改操作时进行完整性检查和违约处理
-
被参照表 参照表 违约处理 插入元组 拒绝 修改外码值 拒绝 删除元组 拒绝/级联删除/设置为空值 修改主码值 拒绝/级联修改/设置为空值 -
拒绝执行(NO ACTION)
-
级联操作(CASCADE)
-
设置空值(SET-NULL)
-
示例代码 CREAT TABLE SC (Sno CHAR(9) NOT NULL, Cno CHAR(4) NOT NULL, Grade SMALLINT, PRIMARY KEY(Sno,Cno), FOEREIGN KEY(Sno)REFERENCES Student(Sno) ON DELETE CASCADE /*级联删除SC表中的相应的元组*/ ON UPDATE CACADE, /*级联更新相应的元组*/ FOREIGN KEY (Cno)REFERENCES Course(Cno) ON DELETE NO ACTION/*当删除course表中的元组造成了与SC表不一致时拒绝删除*/ ON UPDATE CASCADE /*当更新coourse表中的Cno时,级联更新SC表中相应的元组*/ );
-
-
-
用户定义完整性
-
针对某一具体应用的数据必须满足的语义要求
-
CREAT TABLE 时定义属性上的约束条件
-
列值非空(NOT NULL)
-
列值唯一(UNIQUE)
-
检查列值是否满足一个条件表达式(CHECK)
CREAT TABLE DEPT ( Deptno NUMERIC(2), Dname CHAR(9) UNIQUE NOT NULL, /*要求Dname列值唯一,并且不能取空值*/ PRIMARY KEY(Deptno) );
CHECK (条件)
-
-
属性上的约束条件检查和违约处理(只涉及单个属性)
-
元组上的约束条件定义(涉及多个属性)
CHECK
位置不同
实体完整性 参照完整性 用户定义完整性 定义方法 CREAT TABLE CREAT TABLE CREAT TABLE 检查时机 执行插入、修改操作 参照表、插入/修改被参照表:删除/修改 执行插入、修改操作 违约处理 拒绝执行 拒绝执行/级联操作/设置为空值 拒绝执行 -
-
完整性约束名子句
CONSTRAINT
语句的用法,详见课本资料
CHECK约束
通过限制一个或多个列可接受的值,CHECK 约束可以强制域完整性。 可以通过任何基于逻辑运算符返回 TRUE 或 FALSE 的逻辑(布尔)表达式创建 CHECK 约束。
用成绩来举例,成绩都有最大和最小值,为了避免出现负分,超分,应该给成绩列添加上CHECK约束
ALTER TABLE SC
ADD CONSTRAINT Check_for_grade
CHECK(0<= Grade AND Grade <=100)
验证约束是否生效
INSERT INTO SC(SNO,CNO,Grade) VALUES(201215125,6,120)
CHECK约束正常工作。
以上是关于什么是数据库中的自主存取控制方法和强制存取控制方法的主要内容,如果未能解决你的问题,请参考以下文章