第15章SQLServer2008数据库的安全性和完整性管理第15章主要内容15.1数据库的安全性概述15.2管理服务器登录15.3角色和用户管理15.4SQLServer2008权限15.5权限管理15.6数据库的完整性15.7数据库约束的概念和类型15.8管理约束15.1数据库安全性概述SQLServer的安全性管理是建立在认证(authentication)和访问许可(permission)这两种机制上的。认证是指确定登录SQLServer的用户的登录账号和密码是否正确,以此来验证其是否具有连接SQLServer的权限。但是,通过认证并不代表能够访问SQLServer中的数据。用户只有在获取访问数据库的许可之后,才能够对服务器上的数据库进行权限许可下的各种操作。15.1数据库安全性概述所以在SQLServer的安全模型中包括以下几部分(安全控制手段)SQLServer身份验证方式;登录账户;数据库用户;角色;权限。15.1数据库安全性概述15.1.1身份验证简介SQLServer支持两种模式的身份验证:Windows验证模式、SQLServer和Windows混合验证模式。15.1数据库安全性概述15.1.2验证模式的修改当安装SQLServer时,可以选择SQLServer的身份验证类型。安装完成之后也可以修改认证模式。修改步骤如下。(1)打开SQLServerManagementStudio。(2)在要更改的服务器上鼠标右键单击,在快捷菜单中选择属性,弹出服务器属性对话框。(3)单击左侧列表中的“安全性”项,出现“安全性”页面,如图15.1所示。在图中修改身份验证。15.1数据库安全性概述图15.1身份验证15.2管理服务器登录1.创建Windows登录账户(1)在“对象资源管理器”中,单击树型目录中的“安全性”节点,如图15.2所示。15.2管理服务器登录(2)鼠标右键单击“安全性”的子节点“登录名”,在快捷菜单中选择“新建登录名…”,出现“登录名-新建”对话框,如图15.3所示。15.2管理服务器登录(3)在“登录名”编辑框中输入登录名称,输入的登录名必须是已存在的Windows登录用户。可以单击“搜索…”按钮,出现登录“选择用户和组”对话框,如图15.4所示。在对象名称编辑框中输入用户或组的名称,单击“检查名称”按钮检查对象是否存在。输入完成,单击“确定”按钮关闭选择用户或组对话框。15.2管理服务器登录(4)确认选择的是“Windows身份验证”。指定账户登录的默认数据库。(5)单击窗口左侧列表中的“服务器角色”节点,指定账户所属服务器角色。(6)单击窗口左侧列表中的“用户映射”节点,右侧出现用户映射页面。可以查看或修改SQL登录账户到数据库用户的映射。选择此登录账户可以访问的数据库,对具体的数据库,指定要映射到登录名的数据库用户(默认情况下,数据库用户名与登录名相同)。指定用户的默认架构,首次创建用户时,其默认架构是dbo。(7)设置完成单击“确定”按钮提交更改。15.2管理服务器登录2.创建SQLServer登录账户一个SQLServer登录账户名是一个新的登录账户,该账户和Windows操作系统的登录账户没有关系。(1)打开新建登录名对话框,选择“SQLServer身份验证”,输入登录名,密码和确认密码,并选择缺省数据库,如图15.5所示。15.2管理服务器登录(2)设置服务器角色和用户映射,请参考“创建Windows登录账户”的步骤5和步骤6。15.2管理服务器登录3.登录账户管理创建登录账户之后,在图15.2所示服务器安全性展开登录名节点上,鼠标右键单击相应的账户,出现快捷菜单,如图15.6所示,如果要修改该登录账户,选择属性菜单;如要删除该登录账户,则选择删除菜单。15.2管理服务器登录15.2.2使用Transact-SQL管理登录账户在Transact-SQL中,管理登录账户的SQL语句有:CREATELOGIN、DROPLOGIN、ALTERLOGIN。下面简要说明如何使用T-SQL来创建和维护登录账户。15.2管理服务器登录1.新建登录账户CREATELOGIN其语法格式为:CREATELOGINlogin_name{WITHoption_list1|FROMsources}【例15.1】创建带密码的登录名“test”。CREATELOGINtestWITHPASSWORD='test'15.2管理服务器登录2.删除登录账户DROPLOGIN其语法格式为:DROPLOGINlogin_name【例15.3】删除登录账户“test”。DROPLOGINtest15.3角色和用户管理15.3.1角色管理简介角色等价于Windows的工作组,将登录名或用户赋予一个角色,角色具有权限,登录名或用户作为角色成员,从而继承了所属角色的权限。如图15.7所示。登录名或用户角色权限15.3角色和用户管理只需给角色指定权限,然后将登录名或用户指定为某个角色,而不必给每个登录名或用户指定权限。在SQLServer中角色分为服务器角色和数据库角色。1.服务器角色服务器角色内建于SQLServer,其权限无法更改,每一个角色拥有一定级别的数据库管理职能。15.3角色和用户管理服务器角色包括以下几种:bulkadmin:可以运行BULKINSERT语句。dbcreator:可以创建、更改、删除和还原任何数据库。diskadmin:管理磁盘文件。processadmin:可以终止SQLServer实例中运行的进程。securityadmin:管理登录名的密码。serveradmin:可以更改服务器范围的配置选项和关闭服务器。setupadmin:添加和删除链接服务器,并且也可以执行某些系统存储过程。sysadmin:可以在服务器中执行任何活动。15.3角色和用户管理15.3角色和用户管理2.固有数据库角色固有数据库角色是指这些角色的数据库权限已被SQLServer预定义,不能对其权限进行任何修改,并且这些角色存在于每个数据库中,如图15.9所示。15.3角色和用户管理固有数据库角色包括以下几种。db_accessadmin:可以为Windows登录账户、Windows组和SQLServer登录账户添加或删除访问权限。db_backupoperator:可以备份该数据库。db_datareader:可以读取所有用户表中的所有数据。db_datawriter:可以在所有用户表中添加、删除或更改数据。db_ddladmin:可以在数据库中运行任何数据定义语言(DDL)命令。db_denydatareader:不能读取数据库内用户表中的任何数据。15.3角色和用户管理db_denydatawriter:不能添加、修改或删除数据库内用户表中的任何数据。db_owner:可以执行数据库的所有配置和维护活动。db_securityadmin:可以修改角色成员身份和管理权限。public:当添加一个数据库用户时,它自动成为该角色成员,该角色不能删除,指定给该角色的权限自动给予所有数据库用户。db_owner和db_securityadmin角色的成员可以管理固有数据库角色成员身份;但是,只有db_owner数据库的成员可以向db_owner固有数据库角色中添加成员。15.3角色和用户管理3.用户自定义数据库角色当打算为某些数据库用户设置相同的权限,但是这些权限不等同于预定义的数据库角色所具有的权限时,就可以定义新的数据库角色来满足这一要求。15.3角色和用户管理15.3.3用户管理简介用户对数据的访问权限以及对数据库对象的所有关系都是通过用户账号来控制的,用户账号总是基于数据库的,即两个不同数据库中可以有两个相同的用户账号。在数据库中,用户账号与登录账号是两个不同的概念,一个合法的登录账号只表明该账号通过了Windows认证或SQLServer认证,但不能表明其可以对数据库数据和数据对象进行某种操作。15.3角色和用户管理15.3.4用户的管理1.使用ManagementStudio管理用户(1)在ManagementStudio对象资源管理器中,扩展指定的数据库节点,直到看到用户节点,如右图所示。(2)鼠标右键单击用户子节点,在弹出菜单中选择“新建用户…”,弹出“新建数据库用户”对话框,如图15.19所示。在用户名编辑框中输入用户名。15.3角色和用户管理15.3角色和用户管理(3)在登录名编辑框中输入登录名或单击“…”按钮,弹出“选择登录名”对话框,如图15.10所示。输入登录名或单击“浏览”按钮。如单击“浏览”按钮,则出现“查找对象”对话框,如图15.11所示。(4)选中想添加的登录名,单击“确定”按钮关闭对话框。(5)选择该用户登录的默认架构和所属角色,最后关闭“新建数据库用户”对话框。15.3角色和用户管理2.使用Transact-SQL管理用户使用Transact-SQL管理用户的语句有CREATEUSER,DROPUSER,ALTERUSER。创建用户:CREATEUSERCREATEUSER语法格式为:CREATEUSERuser_name[{{FOR|FROM}{LOGINlogin_name|CERTIFICATEcert_name|ASYMMETRICKEYasym_key_name}|WITHOUTLOGIN][WITHDEFAULT_SCHEMA=schema_name]15.3角色和用户管理【例15.13】首先创建名为“Teacher”且具有密码的服务器登录名,然后在数据库“TEACH”中创建对应的数据库用户“WangWei”。CREATELOGINTeacherWITHPASSWORD='270tea39';USETEACHCREATEUSERWangWei【例15.14】创建具有默认架构“Teaching”的对应数据库用户“WangWei”CREATEUSERWangWeiFORLOGINTeacherWITHDEFAULT_SCHEMA=Teaching15.3角色和用户管理删除用户:DROPUSER其语法格式为:DROPUSERuser_name【例15.17】删除用户“WangWei”。DROPUSERWangWei15.4SQLServer2008权限权限管理指将安全对象的权限授予主体,取消或禁止主体对安全对象的权限。SQLServer通过验证主体是否已获得适当的权限来控制主体对安全对象执行的操作。1.主体“主体”是可以请求SQLServer资源的个体、组和过程。主体分类如表15.1所示。主体内容Windows级别的主体Windows域登录名、Windows本地登录名SQLServer级别的主体SQLServer登录名数据库级别的主体数据库用户、数据库角色、应用程序角色15.4SQLServer2008权限2.安全对象安全对象是SQLServerDatabaseEngine授权系统控制对其进行访问的资源。每个SQLServer安全对象都有可能授予主体的关联权限,如表15.2所示。安全对象内容服务器端点、登录账户、数据库数据库用户、角色、应用程序角色、程序集、消息类型、路由、服务、远程服务绑定、全文目录、证书、非对称密钥、对称密钥、约定、架构架构类型、XML架构集合、对象对象聚合、约束、函数、过程、队列、统计信息、同义词、表、视图15.4SQLServer2008权限3.架构架构是形成单个命名空间的数据库实体的集合。命名空间是一个集合,其中每个元素的名称都是唯一的。在SQLServer2008中,架构独立于创建它们的数据库用户而存在。可以在不更改架构名称的情况下转让架构的所有权。完全限定的对象名称包含4部分:server.database.schema.obj