数据库原理与应用教程(第3版)国家“十一五”规划教材第11章安全管理•11.1安全控制概述•11.2登录名•11.3数据库用户•11.4权限管理•11.5角色2019年10月2日8时30分211.1安全控制概述•数据库的安全控制是指:在数据库应用系统的不同层次提供对有意和无意损害行为的安全防范。•在数据库中•对有意的非法活动可采用加密存、取数据的方法控制;•对有意的非法操作可使用用户身份验证、限制操作权来控制;•对无意的损坏可采用提高系统的可靠性和数据备份等方法来控制。2019年10月2日8时30分311.1.1安全控制模型2019年10月2日8时30分4文件的访问权限11.1.2SQLServer安全控制过程•在大型DBMS中,用户访问数据库数据要经过三个安全认证过程:•确认用户是否是数据库服务器的合法用户(具有登录名);•第二个过程,确认用户是否是要访问的数据库的合法用户(是数据库用户);•第三过程,确认用户是否具有合适的操作权限(权限认证)。2019年10月2日8时30分5安全认证三个过程示意图2019年10月2日8时30分6数据库服务器①③②1.登录名2.数据库用户3.权限认证•在SQLServer2005如何实现3个认证过程?11.2登录名•SQLServer2005的安全权限是基于标识用户身份的登录标识符(LoginID,登录ID),登录ID就是控制访问SQLServer数据库服务器的登录名。•11.2.1身份验证模式•11.2.2建立登录名•11.2.3删除登录名2019年10月2日8时30分811.2.1身份验证模式•SQLServer2005支持两类登录名:•由SQLServer负责验证的登录名;•Windows网络账户,可以是组用户。•SQLServer2005相应地提供了两种身份验证模式:•Windows身份验证模式•混合验证模式2019年10月2日8时30分91.Windows身份验证模式•SQLServer将用户的身份验证交给了Windows操作系统来完成。•在这种身份验证模式下,SQLServer将通过Windows操作系统来获得用户信息,并对登录名和密码进行重新验证。•使用Windows身份验证模式时,用户必须先登录到Windows操作系统,然后再登录到SQLServer。2019年10月2日8时30分102.混合身份验证模式•允许Windows授权用户和SQL授权用户登录到SQLServer数据库服务器。•如果希望允许非Windows操作系统的用户也能登录到SQLServer数据库服务器上,则应该选择混合身份验证模式。•SQLServer身份验证的登录信息保存在SQLServer实例上;Windows身份验证的登录信息由Windows和SQLServer实例共同保存。2019年10月2日8时30分11设置身份验证模式•系统管理员根据系统的实际应用情况设置SQLServer的身份验证模式。•1.可以在安装SQLServer2005时设置•2.也可以在安装完成后通过SSMS工具进行设置。2019年10月2日8时30分12设置方法•在SSMS的对象资源管理器中,在SQLServer实例上右击鼠标,选择“属性”命令。•在“服务器属性”窗口左边的“选择页”上,单击“安全性”选项。•在“服务器身份验证”部分,可以设置该实例的身份验证模式。2019年10月2日8时30分13设置身份验证模式窗口11.2.2建立登录名•建立登录名有两种方法:•通过SSMS工具实现,•通过T-SQL语句实现。2019年10月2日8时30分15建立Windows身份验证的登录名•使用Windows登录名进行的连接,被称为信任连接。•在SSMS的对象资源管理器中,依次展开“安全性”“登录名”节点。•在“登录名”节点上右击鼠标,选择“新建登录名”命令。2019年10月2日8时30分16•单击“搜索”按钮,弹出“选择用户或组”窗口。2019年10月2日8时30分17•单击“高级”按钮,弹出“选择用户或组”窗口。2019年10月2日8时30分18•单击“立即查找”按钮,在下面将列出查找的结果。2019年10月2日8时30分19建立SQLServer身份验证的登录名•在SSMS的对象资源管理器中,依次展开“安全性”“登录名”节点。•在“登录名”节点上右击鼠标,选择“新建登录名”命令。•在弹出的窗口中输入登录名。2019年10月2日8时30分202019年10月2日8时30分21新建登录窗口的一些选项说明•强制密码过期•对该登录名强制实施密码过期策略。必须先选中“强制实施密码策略”才能启用此复选框。•用户在下次登录时必须更改密码•首次使用新登录名时,SQLServer将提示用户输入新密码。2019年10月2日8时30分22新建登录窗口的一些选项说明•默认数据库•指定该登录名初始登录到SSMS时进入的数据库。•默认语言•指定该登录名登录到SQLServer时使用的默认语言。2019年10月2日8时30分23用T-SQL语句建立登录名CREATELOGINlogin_name{WITHoption_list1|FROMsources}sources::=WINDOWS[WITHwindows_options[,…]]option_list1::=PASSWORD='password'[,option_list2[,...]]2019年10月2日8时30分24建立登录帐户的T-SQL语句(续)option_list2::=SID=sid|DEFAULT_DATABASE=database|DEFAULT_LANGUAGE=languagewindows_options::=DEFAULT_DATABASE=database|DEFAULT_LANGUAGE=language2019年10月2日8时30分25示例•例1.创建SQLServer身份验证的登录帐户。登录名为:SQL_User2,密码为:a1b2c3XY。CREATELOGINSQL_User2WITHPASSWORD='a1b2c3XY'2019年10月2日8时30分26示例•例2.创建Windows身份验证的登录帐户。从Windows域帐户创建[HYJ\Win_User2]登录帐户。CREATELOGIN[HYJ\Win_User2]FROMWINDOWS2019年10月2日8时30分27示例•例3.创建SQLServer身份验证的登录帐户。登录名为:SQL_User3,密码为:AD4h9fcdhx32MOP。要求该登录帐户首次连接服务器时必须更改密码。CREATELOGINSQL_User3WITHPASSWORD='AD4h9fcdhx32MOP'MUST_CHANGE2019年10月2日8时30分2811.2.3删除登录名•依次展开“安全性”“登录名”节点。•在要删除的登录名上右击鼠标,选择“删除”命令,弹出删除登录名属性窗口。•单击“确定”按钮。2019年10月2日8时30分29删除登录帐户的T-SQL语句DROPLOGINlogin_name•不能删除正在使用的登录帐户,也不能删除拥有任何数据库对象、服务器级别对象的登录帐户。•例1.删除SQL_User2登录帐户。DROPLOGINSQL_User22019年10月2日8时30分3011.3数据库用户•11.3.1建立数据库用户•11.3.2删除数据库用户2019年10月2日8时30分3111.3.1建立数据库用户•展开要建立数据库用户的数据库。•展开“安全性”节点,在“用户”节点上右击鼠标,选择“新建用户”命令。•在“登录名”部分指定将要成为此数据库用户的登录名。单击“登录名”文本框右边的按钮,可以查找某登录名。2019年10月2日8时30分32用T-SQL语句建立数据库用户CREATEUSERuser_name[{{FOR|FROM}{LOGINlogin_name}]•user_name:指定在此数据库中用于识别该用户的名称。•LOGINlogin_name:指定要映射为数据库用户的SQLServer登录名。•如果省略FORLOGIN,则新的数据库用户将被映射到同名的SQLServer登录名。2019年10月2日8时30分33示例•让SQL_User2登录帐户成为当前数据库中的用户,并且用户名同登录名。CREATEUSERSQL_User22019年10月2日8时30分34示例•本示例首先创建名为SQL_JWC且具有密码的SQLServer身份验证的服务器登录名,然后在students数据库中创建与此登录帐户对应的数据库用户JWC。CREATELOGINSQL_JWCWITHPASSWORD='jKJl3$nN09jsK84';GOUSEstudents;GOCREATEUSERJWCFORLOGINSQL_JWC;2019年10月2日8时30分35注意•服务器登录名与数据库用户是两个完全不同的概念。•具有登录名的用户可以登录到SQLServer实例上,而且只局限在实例上进行操作。•数据库用户则是登录名以什么样的身份在该数据库中进行操作,是登录名在具体数据库中的映射,这个映射名(数据库用户名)可以和登录名一样,也可以不一样2019年10月2日8时30分3611.3.2删除数据库用户•删除数据库用户,实际就是解除了登录名和数据库用户之间的映射关系。•删除数据库用户之后,其对应的登录名仍然存在。•删除方法:•展开“数据库”“students”“安全性”“用户”节点。•在要删除的用户名上右击鼠标,选择“删除”命令。2019年10月2日8时30分37用T-SQL语句删除数据库用户•语句DROPUSERuser_name•其中user_name为要在此数据库中删除的用户名。•示例.删除SQL_User2用户。DROPUSERSQL_User22019年10月2日8时30分3811.4管理权限•11.4.1权限种类及用户分类•11.4.2权限的管理2019年10月2日8时30分391.权限种类•对象权限•是对表、视图等对象中数据的操作权。•语句权限•创建对象的权限。•隐含权限•指由SQLServer预定义的服务器角色、数据库角色、数据库拥有者和数据库对象拥有者所具有的权限。2019年10月2日8时30分402.数据库用户的分类•系统管理员•在数据库服务器上具有全部的权限。•SQLServer2005的默认系统管理员是“sa”。•数据库对象拥有者•创建数据库对象的用户即为数据库对象拥有者。•数据库对象拥有者对其所拥有的对象具有全部权限。•普通用户•只具有对数据库数据的增、删、改、查权限。11.4.2权限的管理•授予权限:允许用户或角色具有某种操作权•收回权限:不允许用户或角色具有某种操作权,或者收回曾经授予的权限。•拒绝权限:拒绝某用户或角色具有某种操作权,既使用户或角色由于继承而获得这种操作权,也不允许执行相应的操作。对象权限的管理•可以通过SSMS工具实现,•也可以通过T-SQL语句实现。用SSMS工具实现•展开某数据库下的“安全性”“用户”,•在要授权的用户上右击鼠标,在弹出的菜单中选择“属性”命令,弹出数据库用户属性窗口。•单击窗口左边“选择页”中的“安全对象”选项,出现“安全对象”窗口。数据库用户属性中的“安全对象”页单击“添加”弹出“添加对象”窗口“添加对象”窗口•在这个窗口中可以选择要添加的对象类型。•默认是添加“特定对象”类用T-SQL语句实现权限管理•用于管理权限的T-SQL语句有三个:•GRANT:用于授予权限。•REVOKE:用于收回或撤消权限。•DENY:用于拒绝权限授权语句•GRANT对象权限名[,…]ON{表名|视图名}TO{数据库用户名|用户角色名}[,…]2019年10月2日8时30分48收权语句REVOKE对象权限名[,…]ON{表名|视图名}FROM{数据库用户名|用户角色名}[,…]2019年10月2日8时30分49拒绝语句DENY对