2020年2月21日第1页第3章管理安全性本章概述本章要点本章内容2020年2月21日第2页本章概述安全性是数据库管理系统的重要特征。能否提供全面、完整、有效、灵活的安全机制,往往是衡量一个分布式数据库管理系统是否成熟的重要标志,也是用户选择合适的数据库产品的一个重要判断指标。MicrosoftSQLServer2008系统提供了一整套保护数据安全的机制,包括角色、架构、用户、权限等手段,可以有效地实现对系统访问和数据访问的控制。本章全面讲述MicrosoftSQLServer2008系统的安全管理。2020年2月21日第3页本章要点理解数据库安全性问题和安全性机制之间的关系管理和维护登录名SQLServer系统的密码策略固定服务器角色的特点和管理管理和维护数据库用户管理和维护架构权限类型和权限管理系统内置的加密机制2020年2月21日第4页本章内容3.1概述3.2管理登录名3.3固定服务器角色3.4管理数据库用户3.5管理架构3.6数据库角色3.7管理应用程序角色3.8管理权限3.9SQLServer2008内置的加密机制3.10使用SQLServerManagementStudio工具3.11本章小结3.1概述安全性是所有数据库管理系统的一个重要特征。理解安全性问题是理解数据库管理系统安全性机制的前提。下面结合MicrosoftSQLServer2008系统的安全特征,分析安全性问题和安全性机制之间的关系。2020年2月21日第5页登录到系统第一个安全性问题:当用户登录数据库系统时,如何确保只有合法的用户才能登录到系统中?这是一个最基本的安全性问题,也是数据库管理系统提供的基本功能。在MicrosoftSQLServer2008系统中,通过身份验证模式和主体解决这个问题。2020年2月21日第6页身份验证模式身份验证模式是MicrosoftSQLServer2008系统验证客户端和服务器之间连接的方式。MicrosoftSQLServer2008系统提供了两种身份验证模式:Windows身份验证模式和混合模式。在Windows身份验证模式中,用户通过MicrosoftWindows用户账户连接时,SQLServer使用Windows操作系统中的信息验证账户名和密码。Windows身份验证模式使用Kerberos安全协议,通过强密码的复杂性验证提供密码策略强制、账户锁定支持、支持密码过期等。在混合模式中,当客户端连接到服务器时,既可能采取Windows身份验证,也可能采取SQLServer身份验证。当设置为混合模式时,允许用户使用Windows身份验证SQLServer身份验证进行连接。2020年2月21日第7页主体主体是可以请求系统资源的个体、组合过程。例如,数据库用户是一种主体,可以按照自己的权限在数据库中执行操作和使用相应的数据。MicrosoftSQLServer2008系统有多种不同的主体,不同主体之间的关系是典型的层次结构关系,位于不同层次上的主体其在系统中影响的范围也不同。位于层次比较高的主体,其作用范围比较大;位于层次比较低的主体,其作用范围比较小。2020年2月21日第8页操作第二个安全性问题:当用户登录到系统中,他可以执行哪些操作、使用哪些对象和资源?这也是一个基本的安全问题,在MicrosoftSQLServer2008系统中,通过安全对象和权限设置来解决这个问题。2020年2月21日第9页主体和安全对象的结构示意图2020年2月21日第10页主体Windows级Windows组Windows域登录名Windows本地登录名SQLServer级SQLServer登录名固定服务器角色数据库级数据库用户固定数据库角色应用程序角色安全对象服务器安全对象范围端点SQLServer登录名数据库数据库安全对象范围数据库用户/应用程序角色/角色/程序集/消息类型/路由/服务/远程服务绑定/全文目录/证书/非对称密钥/对称密钥/约定/架构架构安全对象范围类型/XML架构集合/聚合/约束/函数/过程/队列/统计信息/同义词/表/视图请求所有第三个安全性问题:数据库中的对象由谁所有?如果是由用户所有,那么当用户被删除时,其所拥有的对象怎么办,难道数据库对象可以成为没有所有者的“孤儿”吗?在MicrosoftSQLServer2008系统中,这个问题是通过用户和架构分离来解决的。2020年2月21日第11页数据库对象、架构和用户之间的关系示意图2020年2月21日第12页……数据库对象架构用户包含在被拥有表视图存储过程函数3.2管理登录名管理登录名包括创建登录名、设置密码策略、查看登录名信息及修改和删除登录名等。下面讲述登录名管理的内容,注意,sa是一个默认的SQLServer登录名,拥有操作SQLServer系统的所有权限。该登录名不能被删除。当采用混合模式安装MicrosoftSQLServer系统之后,应该为sa指定一个密码。2020年2月21日第13页创建登录名在MicrosoftSQLServer2008系统中,许多操作都既可以通过Transact-SQL语句完成,也可以通过MicrosoftSQLServerManagementStudio工具来完成。下面主要介绍如何使用Transact-SQL语句创建登录名。在创建登录名时,既可以通过将Windows登录名映射到SQLServer系统中,也可以创建SQLServer登录名。2020年2月21日第14页使用Windows登录名创建登录名2020年2月21日第15页创建有默认数据库的登录名2020年2月21日第16页创建SQLServer登录名2020年2月21日第17页MicrosoftSQLServer2008系统的密码策略问题密码复杂性和密码过期两大特征密码的复杂性是指通过增加更多可能的密码数量来阻止黑客的攻击。密码过期策略是指如何管理密码的使用期限。在创建SQLServer登录名时,如果使用密码过期策略,那么系统将提醒用户及时更改旧密码和登录名,并且禁止使用过期的密码。2020年2月21日第18页关键字在使用CREATELOGIN语句创建SQLServer登录名时,为了实施上述的密码策略,可以指定HASHED、MUST_CHANGE、CHECK_EXPIRATION、CHECK_PLICY等关键字。2020年2月21日第19页HASHED关键字HASHED关键字用于描述如何处理密码的哈希运算。在使用CREATELOGIN语句创建SQLServer登录名时,如果在PASSWORD关键字后面使用HASHED关键字,那么表示在作为密码的字符串存储到数据库之前,对其进行哈希运算。如果在PASSWORD关键字后面没有使用HASHED关键字,那么表示作为密码的字符串已经是经过哈希运算之后的字符串,因此在存储到数据库之前不再进行哈希运算了。2020年2月21日第20页其他关键字MUST_CHANGE关键字表示在首次使用新登录名时提示用户输入新密码。CHECK_EXPIRATION关键字表示是否对该登录名实施密码过期策略。CHECK_PLICY关键字表示对该登录名强制实施Windows密码策略。2020年2月21日第21页使用密码策略创建SQLServer登录名2020年2月21日第22页维护登录名登录名创建之后,可以根据需要修改登录名的名称、密码、密码策略、默认的数据库等信息,可以禁用或启用该登录名,甚至可以删除不需要的登录名。2020年2月21日第23页使用ALTERLOGIN修改登录名2020年2月21日第24页修改Rudolf登录名的密码2020年2月21日第25页禁用和启用登录名2020年2月21日第26页3.3固定服务器角色固定服务器角色是服务器级别的主体,它们的作用范围是整个服务器。固定服务器角色已经具备了执行指定操作的权限,可以把其他登录名作为成员添加到固定服务器角色中,这样该登录名可以继承固定服务器角色的权限。下面首先讲述MicrosoftSQLServer2008系统提供的固定服务器角色的特点,然后分析如何处理登录名与固定服务器角色之间的关系。2020年2月21日第27页固定服务器角色的特点固定服务器角色也是服务器级别的主体,已经具备了执行指定操作的权限。MicrosoftSQLServer2008系统提供了9个固定服务器角色,这些角色的清单和功能描述如表3-1所示。2020年2月21日第28页固定服务器角色2020年2月21日第29页固定服务器角色和登录名在MicrosoftSQLServer系统中,可以把登录名添加到固定服务器角色中,使登录名作为固定服务器角色的成员继承固定服务器角色的权限。对于登录名来说,可以判断其是否为某个固定服务器角色的成员。用户可以使用sp_addsrvrolemember、sp_helpsrvrolememeber、sp_dropsrvrolemember等存储过程和IS_SRVROLEMEMBER函数来执行有关固定服务器角色和登录名之间关系的操作。2020年2月21日第30页sp_addsrvrolemember如果希望指定的登录名成为某个固定服务器角色的成员,可以使用sp_addsrvrolemember存储过程来完成这种操作。sp_addsrvrolemember存储过程的语法如下:sp_addsrvrolemember'login_name','role_name'2020年2月21日第31页在sysadmin角色中增加成员2020年2月21日第32页sp_helpsrvrolemember如果要查看指定的固定服务器角色的成员或所有的固定服务器角色的成员,可以使用sp_helpsrvrolemember存储过程。如果希望判断指定的登录名是否为某个固定服务器角色的成员,可以使用IS_SRVROLEMEMBER函数。该函数返回值是1时,表示当前用户的登录名是成员;返回0时,表示不是成员;否则,表示指定的固定服务器角色名称是错误的。是表示该登录名成员不是当前固定服务器角色的成员,但是依然作为系统的登录名存在。2020年2月21日第33页sp_dropsrvrolemember如果希望把固定服务器角色的某个成员删除,那么可以使用sp_dropsrvrolemember存储过程。删除固定服务器角色的登录名成员,只是表示该登录名成员不是当前固定服务器角色的成员,但是依然作为系统的登录名存在。2020年2月21日第34页3.4管理数据库用户数据库用户是数据库级的主体,是登录名在数据库中的映射,是在数据库中执行操作和活动的行动者。在MicrosoftSQLServer2008系统中,数据库用户不能直接拥有表、视图等数据库对象,而是通过架构拥有这些对象。数据库用户管理包括创建用户、查看用户信息、修改用户、删除用户等操作。2020年2月21日第35页创建用户可以使用CREATEUSER语句在指定的数据库中创建用户。由于用户是登录名在数据库中的映射,因此在创建用户时需要指定登录名。2020年2月21日第36页创建登录名的数据库用户2020年2月21日第37页创建带有默认架构的数据库用户2020年2月21日第38页查看和dbo如果希望查看数据库用户的信息,可以使用sys.database_principals目录视图。该目录视图包含了有关数据库用户的名称、ID、类型、默认的架构、创建日期和最后修改日期等信息。dbo是数据库中的默认用户。SQLServer系统安装之后,dbo用户就自动存在了。dbo用户拥有在数据库中操作的所有权限。默认情况下,sa登录名在各数据库中对应的用户是dbo用户。2020年2月21日第39页激活guest用户2020年2月21日第40页维护用户可以使用ALTERUSER语句修改用户。修改用户包括两个方面,第一,可以修改用户名;第二可以修改用户的默认架构。修改用户名与删除、重建用户是不同