1.安全性
数据库的安全性是防止不合法的操作造成数据泄露、更改或破坏。这里主要讨论用户标识和鉴别、存取控制、视图和密码存储等安全技术。
1.1用户标识和鉴别
两种常用的方式是用户标识和口令,是最外层的安全保护措施。
1.2存取控制
存取控制是数据库安全性的重点,其机制包括用户安全定义和合法权限检查,有两类方法:自主存取控制(DAC)方法和强制存取控制(MAC)方法。重点是前者
1.2.1自主存取控制
在这方法中,一个用户对不同的对象、不同用户对同一对象有不同的权限,用户还可以实现权限转授。这些过程涉及到两个操作用户权限的授权和回收。
授权(GRANT):
GRANT <权限> [,<权限>]... ON <对象类型> <对象名> [,<对象类型> <对象名>]... TO <用户> [,<用户>].. . [WITH GRANT OPTION];
其中权限有SELECT、ALL PRIVILEGES(所有权限)、INSERT、UPDATE等(基本上就是数据定义,操纵中的语句),具体到属性列的授权要标明属性名。
对象一般是表或视图。
最后一句WITH GRANT OPTION代表被授权用户也可以授予别的用户该权限。
回收(REVOKE):
REVOKE <权限> [,<权限>]... ON <对象类型> <对象名> [,<对象类型> <对象名>]... FORM <用户> [,<用户>]...[CASCADE|RESTRICT];
同前面一样,CASCADE是将该用户和该用户授予别人的权限全回收,RESTRICT有局限,这里默认是RESTRICT。
以上两个操作是对数据的操作权限,对数据库模式的授权则由DBA在创建用户时实现。格式如下:
GRANT USER <username> [WITH] [DBA|RESOURCES|CONNECT];
该语句只有超级用户才能创建一个新的数据库用户,第二行是三种权限:
DBA:超级用户,拥有全部操作
RESOURCES:能够创建表和基本视图,是创建对象的属主,对自己的对象可以授权,但不能创建模式和新用户。
CONNECT:权限最低,只能登陆数据库,然后被授予其他权限后才能实现权限范围内的操作。
1.2.2强制存取控制
分为主体和客体,主体具有许可证级别,客体具有密级,只用许可证级别大于等于客体密级才能读取相应的客体,主要等于客体才能写相应的客体。
MAC和DAC共同组成DBMS的安全机制。
此外关于安全性还有视图机制、审计、数据加密、统计数据库安全性等操作,这里就不再赘述。
2.完整性
完整性是指数据的正确性和相容性。
主要有实体、参照、用户自定义完整性。
2.1实体完整性
是关于主码的操作:用到PRIMARY KEY定义主码,前面已经提过,其有列级定义和表级定义,定义多属性为主码只能用表级定义。
主码不唯一或者为空就拒绝插入修改。
2.2参照完整性
实质就是定义外码:FOREIGN KEY,前面已经提及,其涉及的表分为参照表和被参照表。
参照表中的外码必须在被参照表中存在,故在参照表中修改插入被参照表中不存在的元组会拒绝执行,而若在被参照表中插入删除会有拒绝、级联删除、设置为空值等操作,一般拒绝是默认。
2.3用户定义完整性
主要包括:UNIQUE 列值唯一;NOT NULL 列值非空;CHECK短语
其中CHECK()短语是检查列值是否符合括号内的表达式。
以下综合取个例子:
GREAT TABLE Student( sname char(8) NOT NULL ssex char(2) CHECK(ssex IN('男','女')//学生性别只能在男女中取 sno char(9) FOREIGN KEY (sno) REFERENCES Course(sno)//外码 PRIMARY(sname));//设置主码
最后还有个CONSTRAINT完整约束命名子句,其约束命名作用,便于修改删除,了解即可。