10.1安全控制安全性指保护数据库,防止不合法的使用所造成的数据泄漏、更改和破坏安全性控制是数据库管理员(或系统管理员)的一个重要任务。10.1.1数据库安全控制的一般方法身份验证用户名和密码访问控制对用户访问数据库对象(表,存储过程、视图等)的权限(查询、插入、删除、修改)的控制文件操作控制操作系统下数据库文件的保护数据加密存储数据库中存储密文。查询时解密,比如密码是加密的10.1.2数据库权限的种类和用户的分类数据库权限的分类维护数据库管理系统的权限备份、恢复操作数据库管理系统的权限创建、修改和删除数据库对象的权限操作(查、插、删、改)数据库数据的权限用户分类Dba,最高权限数据库对象拥有者一般用户DBMS安全模型登录名角色权限数据库对象架构用户名数据库权限层次结构数据库验证主体是否对安全对象具有权限来控制安全10.2sqlserver的安全管理身份验证架构用户管理权限管理10.2.1三个认证过程系统登录:登录sqlserver服务器,需要登录名数据库访问:访问数据库,用户登录名要有对应的数据库用户账号。数据操作:操作数据库中数据或对象时,数据库用户账号要有访问相应数据对象的权限登录名和用户名关系SQLSERVER把登录名与用户名的关系称为映射。用登录名登录SQLSERVER后,在访问各个数据库时,SQLSERVER会自动查询此数据库中是否存在与此登录名关联的用户名,若存在就使用此用户的权限访问此数据库,若不存在就是用guest用户访问此数据库。一个登录名可以被授权访问多个数据库,但一个登录名在每个数据库中只能映射一次。一个登录可对应多个用户,一个用户也可以被多个登录使用。好比SQLSERVER就象一栋大楼,里面的每个房间都是一个数据库.登录名只是进入大楼的钥匙,而用户名则是进入房间的钥匙.一个登录名可以有多个房间的钥匙,但一个登录名在一个房间只能拥有此房间的一把钥匙。10.2.2sqlserver安全认证Windows身份验证Windows用户即可访问sqlserver混合模式即可使用windows身份验证,也可使用sqlserver身份验证。10.3架构架构是存放数据库对象的容器每个架构都有一个拥有者,每个用户都有一个默认架构。一个完整的数据库对象名:[服务器名].数据库名.架构名.对象名使用架构的优点实现了多个对象作为一个集合的授权,更加灵活10.2.3创建架构10.3架构架构既然是命名空间,那为什么我们访问一个表的时候,比如写类似于这种语句:SELECT*FROMTable1不需要制定架构名称呢(数据库中对象的全名称写法应该是:服务器名.数据库名.架构名.对象名)?那是因为MSSQL内部解析的机制是这样的(你不写明架构名的话):第一步先在sys架构中找这个表,找不到就在默认架构中找,再找不到就跑到dbo架构中找。创建一个用户的时候,MSSQL都会让你选择一个默认架构,如果你不选的话,那就是dbo。10.3管理登录账户安装sqlserver之后,系统会自动创建一些登录账户,sa是一个内置的登录账户每个登录名的定义存放在master数据库的syslogins表中。创建登录账户方法Createlogin使用SMSSSMO或系统存储过程使用SMSS新建登录名新建一个t1登录名,不关联账户,查看是否可以进入登录,是否可以查看数据库新建t2登录名,关联到学生成绩管理系统数据库,数据库会自动增加一个t2用户,成绩管理数据库下的对象,查看数据库中学生表、成绩表练习:删除登录名10.4数据库用户使用t2登录名在成绩管理数据库中创建用户u1(无法成功)。断开连接,使用sa登录,在成绩管理数据库中创建用户t1,指定默认登录名t2(无法成功,已对应了t2用户名),指定默认登录名为t1。练习:删除刚才建立的数据库用户修改验证方式10.5权限只有授权才能操作。权限分类对象权限:常见对象权限select,update,insert,delete,execute语句权限:createdatebase/table/view…,backupdababase…隐含权限:预先定义的,比如固定的数据库角色权限。10.5权限用户权限的管理授予:grant,收回:revoke,拒绝:deny面向单一用户权限的设置面向数据库对象权限的设置语句权限的设置Createdatabase\procedure\table等Backupdatabase等建表给用户添加建表权限在用户权限窗口中除了要指定createtable之外,还需要在指定更改/更改任意架构/控制权限才可以运行权限的再授予将e1对成绩表的更新权限再授予t1,成绩表右击—属性---安全对象页上10.6角色角色:一组具有相同或相似权限的用户构成的组固定的服务器角色(在服务器-安全性-登录名中设置)bulkadmin:可以运行BULKINSERT语句。dbcreator:可以创建、更改、删除和还原任何数据库。diskadmin:管理磁盘文件。processadmin:可以终止SQLServer实例中运行的进程。securityadmin:管理登录名及其属性。它们可以GRANT、DENY和REVOKE服务器级和数据库级权限。可以重置SQLServer登录名的密码。serveradmin:可以更改服务器范围的配置选项和关闭服务器。setupadmin:添加和删除链接服务器,并且也可以执行某些系统存储过程。sysadmin:可以在服务器中执行任何活动。10.6角色固定的数据库角色注意这个是在数据库-安全性-用户名中设置用户自定义角色创建授权添加和删除成员用户和角色的权限问题用户和角色的权限最后用户的权限=用户权限+用户角色权限-用户拒绝权限-角色拒绝权限用户可以属于不同的角色,则角色权限=角色1权限+角色2权限-角色1拒绝权限-角色2拒绝权限新建登录名,对应数据库用户名赋予权限给用户赋予对象权限(包含数据库权限)给角色赋予对象权限,然后把用户添加的角色中给用户赋予架构权限给角色赋予架构权限,然后把用户添加的角色中给用户赋予数据库权限给角色赋予数据库权限,然后把用户添加的角色中作业在本机sqlserver2008中添加bank登录名,默认数据库loandb,检验是否可以登录到loandb,具有什么权限?以bank登录,看用户是否具有selectbankt的权限,如没有,以sa身份为用户添加查询表bankt权限作业以bank用户建表,以bank用户查询legalEntityT表,看是否具有权限,如果无权限,则以sa身份为用户添加数据库的建表权限和选择权限,然后看是否可以建表,是否可查询legalEntityT表添加登录名e1,对应用户名e1,查询loant,看是否具有权限?作业给public角色添加查看loant的权限,然后看e1是具有选择loant的权限查看e1是否具有查询legalEntityT的权限,新建一个角色r1,添加用户e1,添加选择legalEntityT的权限,然后再看e1是否具有选择legalEntityT的权限拒绝r1选择loant的权限,然后再用e1查询loant看是否可以查询作业为e1添加更新bankt表和授予更新bankt表的权限,然后添加新登录名、新用户名e2,将e1的此权限授予e2,用e2登录查看是否具有更新bankt表的权限授予权限grantupdateonbankttoe2收回权限revokeupdateonbanktfrome2将架构dbo的选择和更新权限授予角色r1,查看e1是否也同时具有了这个权限。要求掌握安全管理的概念掌握数据库认证的三个过程掌握sqlserver提供的安全验证模式的含义和设置方法掌握创建于管理登陆账号和数据库用户的方法掌握权限管理的是三种状态和对数据库用户进行授权的方法要求掌握角色的作用掌握创建用户定义的角色并为用户定义的角色授权的方法掌握系统提供的服务器角色和数据库角色的作用熟练掌握综合运用权限管理和角色管理的知识解决实际问题的方法