安全性
可以最简单的通过授权来完成
sqlserver可以通过登录名来登陆
-- 创建登录名
create login 登陆名 with password='123'
create login [window用户名\Administrator] from windows
-- 刚创建的登录名只是能登陆,无法访问任何数据库
-- 想访问数据库需要在相应的数据库上创建用户
use 数据库名
create user zhangsan for login 登录名
-- 通过grant与revoke语句实现权限的授予和收回
grant 权限 on tablename to zhangsan
with grant option -- 如果有这句话,zhangsan可以将自己被授予的权限授予给他人
PS:一条语句只能对应一个表,(on一个),可以有多个权限,多个用户
如果要授予所有权限可以使用all privileges
如果要授予给所有人可以使用to public
revoke 权限名 on tablename from zhangsan cascade
-- cascade级联,将从zhangsan授予出发的权限全部收回
创建角色
create role rolename
给用户授予角色
exec sp_addrolemember rolename
删除数据库用户角色
exec sp_droprolemember rolename
实体完整性
主属性非空,用primary key来定义
可以用表级约束条件,单属性构成的码也可以用列级约束条件
在插入或修改时,会检查主码值是否唯一,不唯一拒绝插入修改
检查是否为null,主码的其中一个属性为null,拒绝操作
参照完整性
用foreign key定义哪些是外码 references指定参照哪个表的外码
可能破坏参照完整性的条件:
被参照表的删除和修改操作 => 拒绝或者设为null或者级联
参照表的修改和插入操作 => 拒绝操作
被参照表违越处理示例:
用户定义的完整性
- 不允许为空 => not null
- 列属性值唯一 => unique
- 满足指定条件 => check
也可以单独写出来:
完整性约束命名子句
使用constraint子句
--用法如下
constraint 约束名 约束条件
可以增加或者删除约束
alter table tablename add 约束
alter table tablename drop 约束