《[精选]数据库的安全性和完整性管理课程.pptx》由会员分享,可在线阅读,更多相关《[精选]数据库的安全性和完整性管理课程.pptx(82页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、第第1515章章 SQL Server 2008SQL Server 2008数据库的数据库的安全性和完整性管理安全性和完整性管理15.1 15.1 数据库安全性概述数据库安全性概述lSQL Server的安全性管理是建立在认证authentication和访问许可permission这两种机制上的。l认证是指确定登录SQL Server的用户的登录账号和密码是否正确,以此来验证其是否具有连接SQL Server的权限。l但是,通过认证并不代表能够访问SQL Server中的数据。用户只有在获取访问数据库的权限之后,才能够对效劳器上的数据库进行权限许可下的各种操作。l用户访问数据库权限的设置是
2、通过用户账号来实现的。角色简化了安全性管理。15.1 15.1 数据库安全性概述数据库安全性概述l所以在SQL Server的安全模型中包括以下几局部:l SQL Server身份验证;l 登录账户;l 数据库用户;l 角色;l 权限。15.1 15.1 数据库安全性概述数据库安全性概述l15.1.1 15.1.1 身份验证简介身份验证简介lSQL Server支持两种模式的身份验证:Windows验证模式、SQL Server 和Windows 混合验证模式。lWindows验证模式比起SQL Server验证模式来有许多优点。Windows身份验证比SQL Server身份验证更加安全;使
3、用Windows身份验证的登录账户更易于管理;用户只需登录Windows之后就可以使用SQL Server,只需要登录一次。l在混合验证模式下,Windows验证和SQL Server验证这两种验证模式都是可用的。对于SQL Server验证模式,用户在连接SQL Server时必须提供登录名和登录密码。15.1 15.1 数据库安全性概述数据库安全性概述l15.1.2 15.1.2 验证模式的修改验证模式的修改l当安装SQL Server时,可以选择SQL Server的身份验证类型。安装完成之后也可以修改认证模式。修改步骤如下。l1翻开SQL Server Management Studi
4、o。l2在要更改的效劳器上鼠标右键单击,在快捷菜单中选择属性,弹出效劳器属性对话框。l3单击左侧列表中的“安全性项,出现“安全性页面,如图15.1所示。在图中修改身份验证。15.1 15.1 数据库安全性概述数据库安全性概述图15.1身份验证15.2 15.2 管理效劳器登录管理效劳器登录l1创立Windows登录账户l1在“对象资源管理器中,单击树型目录中的“安全性节点,如图15.2所示。15.2 15.2 管理效劳器登录管理效劳器登录l2鼠标右键单击“安全性的子节点“登录名,在快捷菜单中选择“新建登录名,出现“登录名-新建对话框,如图15.3所示。15.2 15.2 管理效劳器登录管理效劳
5、器登录l3在“登录名编辑框中输入登录名称,输入的登录名必须是已存在的Windows登录用户。可以单击“搜索按钮,出现登录“选择用户和组对话框,如图15.4所示。在对象名称编辑框中输入用户或组的名称,单击“检查名称按钮检查对象是否存在。输入完成,单击“确定按钮关闭选择用户或组对话框。15.2 15.2 管理效劳器登录管理效劳器登录l4确认选择的是“Windows身份验证。指定账户登录的默认数据库。l5单击窗口左侧列表中的“效劳器角色节点,指定账户所属效劳器角色。l6单击窗口左侧列表中的“用户映射节点,右侧出现用户映射页面。可以查看或修改SQL登录账户到数据库用户的映射。选择此登录账户可以访问的数
6、据库,对具体的数据库,指定要映射到登录名的数据库用户默认情况下,数据库用户名与登录名相同。指定用户的默认架构,首次创立用户时,其默认架构是dbo。l7设置完成单击“确定按钮提交更改。15.2 15.2 管理效劳器登录管理效劳器登录l2创立SQL Server登录账户l一个SQL Server登录账户名是一个新的登录账户,该账户和Windows操作系统的登录账户没有关系。l1翻开新建登录名对话框,选择“SQL Server身份验证,输入登录名,密码和确认密码,并选择缺省数据库,如图15.5所示。15.2 15.2 管理效劳器登录管理效劳器登录l2设置效劳器角色和用户映射,请参考“创立Window
7、s登录账户的步骤5和步骤6。15.2 15.2 管理效劳器登录管理效劳器登录l3登录账户管理l创立登录账户之后,在图15.2所示效劳器安全性展开登录名节点上,鼠标右键单击相应的账户,出现快捷菜单,如图15.6所示,如果要修改该登录账户,选择属性菜单;如要删除该登录账户,则选择删除菜单。15.2 15.2 管理效劳器登录管理效劳器登录l15.2.2 15.2.2 使用使用Transact-SQLTransact-SQL管理登录账户管理登录账户l在Transact-SQL中,管理登录账户的SQL语句有:CREATE LOGIN、DROP LOGIN、ALTER LOGIN。下面简要说明如何使用T-
8、SQL来创立和维护登录账户。l1新建登录账户CREATE LOGINl其语法格式为:lCREATE LOGIN login_name WITH|FROM 15.2 15.2 管理效劳器登录管理效劳器登录l【例15.1】创立带密码的登录名“test。MUST_CHANGE选项要求用户首次连接效劳器时更改此密码。lCREATE LOGIN test WITH PASSWORD=26aK MUST_CHANGEl【例15.2】从Windows域账户创立 Developmentiewangjf 登录名。lCREATE LOGIN Developmentiewangjf FROM Windows15.2
9、 15.2 管理效劳器登录管理效劳器登录l2删除登录账户DROP LOGINl其语法格式为:DROP LOGIN login_namel【例15.3】删除登录账户“test。lDROP LOGIN testl3更改登录账户ALTER LOGINl其语法格式为:lALTER LOGIN login_name l l|WITH ,.l :=ENABLE|DISABLE15.2 15.2 管理效劳器登录管理效劳器登录15.3 15.3 角色和用户管理角色和用户管理l15.3.1 15.3.1 角色管理简介角色管理简介l角色等价于Windows的工作组,将登录名或用户赋予一个角色,角色具有权限,登录名
10、或用户作为角色成员,从而继承了所属角色的权限。如图15.7所示。15.3 15.3 角色和用户管理角色和用户管理l只需给角色指定权限,然后将登录名或用户指定为某个角色,而不必给每个登录名或用户指定权限,这样给实际工作带来了很大的便利。l在SQL Server中角色分为效劳器角色和数据库角色。而数据库角色又分为固有数据库角色、用户自定义数据库角色和应用程序角色。l1效劳器角色l效劳器角色内建于SQL Server,其权限无法更改,每一个角色拥有一定级别的数据库管理职能,如图15.8所示。15.3 15.3 角色和用户管理角色和用户管理l效劳器角色包括以下几种。l bulkadmin:可以运行BU
11、LK INSERT语句。l dbcreator:可以创立、更改、删除和复原任何数据库。l diskadmin:管理磁盘文件。l processadmin:可以终止SQL Server实例中运行的进程。l securityadmin:管理登录名及其属性。这类角色可以GRANT、DENY和REVOKE效劳器级和数据库级权限,可以重置SQL Server登录名的密码。l serveradmin:可以更改效劳器范围的配置选项和关闭效劳器。l setupadmin:添加和删除链接效劳器,并且也可以执行某些系统存储过程。l sysadmin:可以在效劳器中执行任何活动。15.3 15.3 角色和用户管理角
12、色和用户管理15.3 15.3 角色和用户管理角色和用户管理l2固有数据库角色l固有数据库角色是指这些角色的数据库权限已被SQL Server预定义,不能对其权限进行任何修改,并且这些角色存在于每个数据库中,如图15.9所示。15.3 15.3 角色和用户管理角色和用户管理l固有数据库角色包括以下几种。l db_accessadmin:可以为Windows登录账户、Windows 组和SQL Server登录账户添加或删除访问权限。l db_backupoperator:可以备份该数据库。l db_datareader:可以读取所有用户表中的所有数据。l db_datawriter:可以在所有
13、用户表中添加、删除或更改数据。l db_ddladmin:可以在数据库中运行任何数据定义语言DDL命令。l db_denydatareader:不能读取数据库内用户表中的任何数据。15.3 15.3 角色和用户管理角色和用户管理l db_denydatawriter:不能添加、修改或删除数据库内用户表中的任何数据。l db_owner:可以执行数据库的所有配置和维护活动。l db_securityadmin:可以修改角色成员身份和管理权限。l public:当添加一个数据库用户时,它自动成为该角色成员,该角色不能删除,指定给该角色的权限自动给予所有数据库用户。ldb_owner和db_secu
14、rityadmin角色的成员可以管理固有数据库角色成员身份;但是,只有db_owner数据库的成员可以向db_owner固有数据库角色中添加成员。15.3 15.3 角色和用户管理角色和用户管理l3用户自定义数据库角色l当打算为某些数据库用户设置相同的权限,但是这些权限不等同于预定义的数据库角色所具有的权限时,就可以定义新的数据库角色来满足这一要求,从而使这些用户能够在数据库中实现某些特定功能。用户自定义数据库角色包含以下两种类型。l 标准角色:为完成某项任务而指定的具有某些权限和数据库用户的角色。l 应用角色:与标准角色不同的是,应用角色默认情况下不包含任何成员,而且是非活动的。将权限赋予应
15、用角色,然后将逻辑参加到某一特定的应用程序中,从而激活应用角色而实现了对应用程序存取数据的可控性。15.3 15.3 角色和用户管理角色和用户管理l15.3.2 15.3.2 角色的管理角色的管理l1使用Management Studio管理角色l1为效劳器角色添加登录账户。执行如下步骤。l 在图15.8中展开效劳器角色节点。在需要添加用户的角色上单击鼠标右键,选择“属性菜单,弹出“属性对话框。l 单击“添加按钮,则弹出“选择登录名对话框,如图15.10所示。l 单击“浏览按钮,则弹出“查找对象对话框,如图15.11所示。l 选中需要添加的对象。l 单击每个对话框中的“确定按钮关闭对话框。15
16、.3 15.3 角色和用户管理角色和用户管理图15.10“选择登录名对话框15.3 15.3 角色和用户管理角色和用户管理图15.11“查找对象对话框15.3 15.3 角色和用户管理角色和用户管理l2为固有数据库角色添加成员。鼠标右键单击想要添加成员的固有效劳器角色节点,其余步骤与1类似。l3创立用户自定义角色。执行如下步骤。l 展开要创立数据库节点,直到看到“数据库角色节点,鼠标右键单击“数据库角色,选择“新建数据库角色,出现“新建数据库角色对话框,如图15.12所示。15.3 15.3 角色和用户管理角色和用户管理15.3 15.3 角色和用户管理角色和用户管理l 在角色名称编辑框中填入
17、角色名称,在所有者编辑框中填入该角色的所有者。l 指定角色拥有的框架名称。单击“添加按钮添加角色成员,则弹出“选择数据库用户或角色对话框,如图15.13所示。15.3 15.3 角色和用户管理角色和用户管理l 输入用户如果需要,单击“浏览按钮,单击“确定按钮添加用户到角色。l 单击图15.12左侧选择页中的“安全对象,则右侧“安全对象页面,如图15.14所示。在此可以设置角色访问数据库的资源。15.3 15.3 角色和用户管理角色和用户管理15.3 15.3 角色和用户管理角色和用户管理l 单击安全对象中“搜索按钮,弹出“添加对象对话框,如图15.15所示。l 选择对象类型,如选择“特定类型的
18、所有对象,则弹出“选择对象类型对话框,如图15.16所示。15.3 15.3 角色和用户管理角色和用户管理l 在如图15.16所示的对话框中选择需要设置权限的对象类型,如选择表,单击“确定按钮关闭,则显示所有表的权限设置,如图15.17所示。可以设置具体的表的权限。针对具体表,还可以设计对应的列权限。15.3 15.3 角色和用户管理角色和用户管理15.3 15.3 角色和用户管理角色和用户管理l2使用Transact-SQL语句管理角色l对于效劳器角色来说,其成员为登录账号,对于数据库角色来说,其成员为数据库用户、数据库角色、Windows 登录或Windows组。l1管理效劳器角色。在SQ
19、L Server中管理效劳器角色的存储过程主要有两个:sp_addsrvro lemember和sp_dropsrvrrolemember。lsp_addsrvrolemember是添加登录账户到效劳器角色内,使其成为该角色的成员。l其语法格式为:lsp_addsrvrolemember loginame=login rolename=role15.3 15.3 角色和用户管理角色和用户管理lsp_dropsrvrrolemember用来在某一效劳器角色中删除登录账号,当该成员从效劳器角色中被删除后,便不再具有该效劳器角色所设置的权限。l其语法格式为:lsp_dropsrvrolemember
20、 loginame=login rolename=rolel【例15.7】将登录账户“iewangjf参加sysadmin角色中。lsp_addsrvrolemember iewangjf sysadmin15.3 15.3 角色和用户管理角色和用户管理l2管理数据库角色。管理数据库角色的语句有:CREATE ROLE,DROP ROLE,ALTER ROLE。lCREATE ROLE用来新建数据库角色,其语法格式为:lCREATE ROLE role_name AUTHORIZATION owner_name l其中AUTHORIZATION owner_name表示将拥有新角色的数据库用户
21、或角色。如果未指定用户,则执行CREATE ROLE的用户将拥有该角色。l【例15.8】创立用户“iewangjf隶属的数据库角色“buyers。lCREATE ROLE buyers AUTHORIZATION iewangjf15.3 15.3 角色和用户管理角色和用户管理l【例15.9】创立db_securityadmin 固有数据库角色隶属的数据库角色“auditors。lCREATE ROLE auditors AUTHORIZATION db_securityadminl管理角色成员的存储过程有:sp_addrolemember,sp_droprolemember,这两个存储过程和
22、添加删除效劳器角色的存储过程用法类似。l【例15.10】将数据库用户“iewangjf添加到当前数据库的“Sales数据库角色中。lsp_addrolemember Sales,iewangjf15.3 15.3 角色和用户管理角色和用户管理l3查看角色信息。查看角色信息的存储过程有sp_helprolemember、sp_helprole。lsp_helprolemember返回某个角色的成员的信息。其语法格式为:lsp_helprolemember rolename=role lsp_helprole返回当前数据库中有关角色的信息。其语法格式为:lsp_helprole rolename=
23、role l【例15.11】显示Sales角色的成员。lsp_helprolemember Salesl【例15.12】返回当前数据库中的所有角色。lsp_helprole15.3 15.3 角色和用户管理角色和用户管理l15.3.3 15.3.3 用户管理简介用户管理简介l用户对数据的访问权限以及对数据库对象的所有关系都是通过用户账号来控制的,用户账号总是基于数据库的,即两个不同数据库中可以有两个相同的用户账号。l在数据库中,用户账号与登录账号是两个不同的概念,一个合法的登录账号只说明该账号通过了Windows认证或SQL Server认证,但不能说明其可以对数据库数据和数据对象进行某种操作
24、。l通常而言,数据库用户账号总是与某一登录账号相关联。但有一个例外,那就是guest用户。用户通过Windows认证或SQL Server认证而成功登录到SQL Server之后的过程如下。15.3 15.3 角色和用户管理角色和用户管理l1检查该登录用户是否有合法的用户名,如果有合法用户名,则允许其以用户名访问数据库,否则执行步骤2。l2SQL Server检查是否有guest用户,如果有,则允许登录用户以guest用户来访问数据库,如果没有,则该登录用户被拒绝。l由此可见,guest用户主要是作为那些没有属于自己的用户账号的SQL Server登录者的缺省用户名,从而使该登录者能够访问具有
25、guest用户的数据库。15.3 15.3 角色和用户管理角色和用户管理l15.3.4 15.3.4 用户的管理用户的管理l1使用Management Studio管理用户l1在Management Studio对象资源管理器中,扩展指定的数据库节点,直到看到用户节点,如右图所示。l2鼠标右键单击用户子节点,在弹出菜单中选择“新建用户,弹出“新建数据库用户对话框,如图15.19所示。在用户名编辑框中输入用户名。15.3 15.3 角色和用户管理角色和用户管理15.3 15.3 角色和用户管理角色和用户管理l3在登录名编辑框中输入登录名或单击“按钮,弹出“选择登录名对话框,如图15.10所示。输
26、入登录名或单击“浏览按钮。如单击“浏览按钮,则出现“查找对象对话框,如图15.11所示。l4选中想添加的登录名,单击“确定按钮关闭对话框。l5选择该用户登录的默认架构和所属角色,最后关闭“新建数据库用户对话框。15.3 15.3 角色和用户管理角色和用户管理l2.使用Transact-SQL管理用户l使用Transact-SQL管理用户的语句有CREATE USER,DROP USER,ALTER USER。l1创立用户:CREATE USERlCREATE USER语法格式为:lCREATE USER user_name FOR|FROM l l LOGIN login_namel|CERT
27、IFICATE cert_namel|ASYMMETRIC KEY asym_key_namel|WITHOUT LOGINl WITH DEFAULT_SCHEMA=schema_name 15.3 15.3 角色和用户管理角色和用户管理l【例15.13】首先创立名为“Teacher且具有密码的效劳器登录名,然后在数据库“TEACH中创立对应的数据库用户“WangWei。lCREATE LOGIN Teacher WITH PASSWORD=27039;lUSE TEACHlCREATE USER WangWeil【例15.14】创立具有默认架构“Teaching的对应数据库用户“WangW
28、eilCREATE USER WangWei FOR LOGIN Teacher l WITH DEFAULT_SCHEMA=Teaching15.3 15.3 角色和用户管理角色和用户管理l2更改用户名或更改其登录的默认架构ALTER USERl其语法格式为:lALTER USER user_name WITH ,.n l:=NAME=new_user_namel|DEFAULT_SCHEMA=schema_name l【例15.15】更改数据库用户的名称。lALTER USER WangWei WITH NAME=Wangjfl【例15.16】更改用户的默认架构。lALTER USER W
29、angWei WITH DEFAULT_SCHEMA=Admining15.3 15.3 角色和用户管理角色和用户管理l3删除用户:DROP USERl其语法格式为:lDROP USER user_namel【例15.17】删除用户“WangWei。lDROP USER WangWei15.4 SQL Server 200815.4 SQL Server 2008权限权限l权限管理指将安全对象的权限授予主体,取消或禁止主体对安全对象的权限。SQL Server通过验证主体是否已获得适当的权限来控制主体对安全对象执行的操作。l1主体l“主体是可以请求SQL Server资源的个体、组和过程。主体
30、分类如表15.1所示。表15.1主 体 分 类15.4 SQL Server 200815.4 SQL Server 2008权限权限l2安全对象l安全对象是SQL Server Database Engine 授权系统控制对其进行访问的资源。每个 SQL Server安全对象都有可能授予主体的关联权限,如表15.2所示。15.4 SQL Server 200815.4 SQL Server 2008权限权限l3架构l架构是形成单个命名空间的数据库实体的集合。命名空间是一个集合,其中每个元素的名称都是唯一的。在SQL Server 2008中,架构独立于创立它们的数据库用户而存在。可以在不更改
31、架构名称的情况下转让架构的所有权,这是与SQL Server 2000不同的地方。l完全限定的对象名称包含4局部:server.database.schema.object。15.4 SQL Server 200815.4 SQL Server 2008权限权限lSQL Server 2008还引入了“默认架构的概念,用于解析未使用其完全限定名称引用的对象的名称。在SQL Server 2008中,每个用户都有一个默认架构,用于指定效劳器在解析对象的名称时将要搜索的第一个架构。可以使用CREATE USER和ALTER USER的DEFAULT_ SCHEMA选项设置和更改默认架构。如果未定义
32、默认架构,则数据库用户将把 DBO作为其默认架构。15.4 SQL Server 200815.4 SQL Server 2008权限权限l【例15.18】下面代码创立了用户“Jane,默认架构为“Sales,并设置其拥有数据库“db_ddladmin角色。lUSE AdventureWorkslCREATE USER Jane FOR LOGIN JanelWITH DEFAULT_SCHEMA=Sales;lEXEC sp_addrolemember db_ddladmin,Jane;l这样Jane所做的任何操作默认发生在“Sales架构上,她所创立的对象默认属于“Sales架构,所引用的
33、对象默认在“Sales架构上。当她执行以下语句时:lCREATE PROCEDURE usp_GetCustomerslASlSELECT*FROM Customerl该存储过程创立在“Sales架构上,其他用户引用它时需要使用“Sales.usp_GetCustomers。15.4 SQL Server 200815.4 SQL Server 2008权限权限l4权限l在SQL Server 2008中,能够授予的安全对象和权限的组合有181种,具体的GRANT、DENY、REVOKE语句格式和具体的安全对象有关。使用时请参阅联机丛书。l主要安全对象权限如表15.3所示。15.5 15.5
34、权限管理权限管理l1使用Management Studio管理权限l可通过对象或主体管理对象权限,下面讲述通过对象来设置权限。l1鼠标右键单击对象,在快捷菜单中选择属性,弹出属性对话框。l2单击左侧选择页中“权限,则显示权限页,如图15.20所示,在此可以指定该对象的角色或用户的权限。15.5 15.5 权限管理权限管理15.5 15.5 权限管理权限管理l3单击“搜索按钮,弹出“选择用户或角色对话框,如图15.21所示。l4输入用户或角色名,或单击“浏览按钮,选择需要添加授权的用户或角色,如图15.22所示。15.5 15.5 权限管理权限管理l5单击“确定按钮关闭查找对象对话框,然后关闭选
35、择用户或角色对话框,回到表属性权限页中,如图15.23所示。15.5 15.5 权限管理权限管理l6选择需要设置权限的用户或角色。设置该用户对每个具体权限的“授予、“具有授予权限、“拒绝3种权限。如图15.23所示,设置用户“guest对该表的插入Insert权限,而拒绝了对表数据的删除Delete权限。l7如果允许用户具有查询Select权限,则列权限可用,单击“列权限按钮,“列权限对话框出现,如图15.24所示。15.5 15.5 权限管理权限管理15.5 15.5 权限管理权限管理l如果不进行设置,则用户从其所属角色中继承权限。设置完列权限之后,单击“确定按钮关闭列权限对话框。l8设置完
36、权限之后,单击“确定按钮关闭属性页。l另一种方法是通过设置用户或角色的权限来设置权限,请参考15.3.2节“创立用户自定义角色中的相关内容。15.5 15.5 权限管理权限管理l2使用Tractans-SQL管理权限l在SQL Server中使用GRANT、REVOKE和DENY 3种命令来管理权限。l1GRANT用来把权限授予某一用户,以允许该用户执行针对该对象的操作,如UPDATE、SELECT、DELETE、EXECUTE。或允许其运行某些语句,如CREATE TABLE、CREATE DATABASE。l其简化语法格式为:lGRANT ALL PRIVILEGES l|permissi
37、on column ,.n ,.n l ON class:securable l TO principal ,.n l WITH GRANT OPTION AS principal 15.5 15.5 权限管理权限管理l【例15.19】授予用户“WangWei对数据库的CREATE TABLE权限。lGRANT CREATE TABLE TO WangWeil【例15.20】授予用户“WangWei对数据库的CREATE VIEW权限并使该用户具有为其他主体授予CREATE VIEW的权限。lGRANT CREATE VIEW TO WangWei WITH GRANT OPTIONl【例15
38、.21】授予用户“WangWei对表“Person.Address的SELECT权限。lGRANT SELECT ON OBJECT:Person.Address TO WangWei15.5 15.5 权限管理权限管理l2REVOKE用于取消用户对某一对象或语句的权限,这些权限是经过GRANT语句授予的。其语法格式和GRANT一致。l【例15.22】从用户“WangWei以及“WangWei已授予VIEW DEFINITION权限的所有主体中撤消对数据库的VIEW DEFINITION权限。lREVOKE VIEW DEFINITION FROM CarmineEs CASCADEl【例15
39、.23】撤销用户“WangWei对表“Person.Address的SELECT权限。lREVOKE SELECT ON OBJECT:Person.Address FROM WangWei15.5 15.5 权限管理权限管理l3DENY用来禁止用户对某一对象或语句的权限,明确禁止其对某一用户对象,执行某些操作。其语法格式和GRANT一致。l【例15.24】拒绝用户“WangWei对数据库中表“Person.Address的“SELECT权限。lDENY SELECT ON OBJECT:Person.Address TO WangWei15.6 15.6 数据库完整性概述数据库完整性概述l强
40、制数据完整性可保证数据库中数据的质量。数据完整性是指数据的精确性和可靠性,例如,输入“employee_idemployee_id为主键值为123的雇员,则该数据库不应允许其他雇员使用具有相同值的employee_id。如果想将“employee_rating列的值范围设定为15,则数据库不应接受值6。数据完整性分为以下类别。l1实体完整性l实体完整性将行定义为特定表的唯一实体。实体完整性通过索引、UNIQUE约束、PRIMARY KEY约束或IDENTITY属性,强制表的标识符列或主键的完整性。15.6 15.6 数据库完整性概述数据库完整性概述l2域完整性l域完整性是指数据库表中的列必须满
41、足某种特定的数据类型或约束。可以强制域完整性限制类型通过使用数据类型、限制格式通过使用CHECK约束和规则或限制值的范围通过使用FOREIGN KEY约束、CHECK约束、DEFAULT定义、NOT NULL定义和规则。l3引用完整性l引用完整性以外键与主键之间或外键与唯一键之间的关系为基础通过FOREIGN KEY和CHECK进行约束。引用完整性确保键值在所有表中一致。这类一致性要求不能引用不存在的值,如果一个键值发生更改,则整个数据库中,对该键值的所有引用要统一进行更改。15.6 15.6 数据库完整性概述数据库完整性概述l4用户定义完整性l用户定义完整性使用户可以定义不属于其他任何完整性
42、类别的特定业务规则。SQL Server提供了一些工具来帮助用户实现数据完整性,其中最主要的是约束、规则、触发器,其中触发器在前面章节中已经介绍。15.7 15.7 约束的概念和类型约束的概念和类型l约束是通过限制列中数据、行中数据和表之间数据来保证数据完整性的非常有效的方法。约束可以确保把有效的数据输入到列中,并维护表和表之间的特定关系。SQL Server 2008 提供了以下机制来强制列中数据的完整性:l PRIMARY KEY约束;l FOREIGN KEY约束;l UNIQUE约束;l CHECK约束;l DEFAULT定义;l 允许空值。15.7 15.7 约束的概念和类型约束的概
43、念和类型l定义约束时,既可以把约束放在一个列上,也可以把约束放在多个列上。如果把约束放在一个列上,该约束称为列级约束,因为它只能由约束所在的列引用;如果把约束放在多个列上,该约束称为表级约束,这时可以由多个列来引用该约束。l在定义约束或修改约束的定义时,应该考虑以下情况:l 不必删除表,就可以直接创立、修改和删除约束;l 必须在应用程序中增加错误检查机制,测试数据是否与约束相冲突;l 向表上增加约束时,SQL Server系统将检查表中的数据是否与约束冲突。15.7 15.7 约束的概念和类型约束的概念和类型l15.7.1 PRIMARY KEY15.7.1 PRIMARY KEY约束约束l表
44、中包含唯一标识表中每一行的一列或一组列作为PRIMARY KEY约束。一个表只能有一个PRIMARY KEY约束,并且PRIMARY KEY约束中的列不能接收空值。l其定义语法格式为:lCONSTRAINT constraint_namel PRIMARY KEY|UNIQUE CLUSTERED|NONCLUSTEREDl column_name1,column_name2,column_name1615.7 15.7 约束的概念和类型约束的概念和类型l【例15.25】创立一个简单的学生表。lCREATE TABLE student l StuID int PRIMARY KEY,l Stu
45、Name varchar20 l或者将Primary key写到后面。lCREATE TABLE studentl StuID int,l StuName varchar20,l CONSTRAINT pk_stu_ID PRIMARY KEYstuID 15.7 15.7 约束的概念和类型约束的概念和类型l15.7.2 FOREIGN KEY15.7.2 FOREIGN KEY约束约束l外键FOREIGN KEY是用于建立和加强两个表数据之间连接的一列或多列。在外键引用中,当一个表的列被引用作为另一个表的主键列时,就在两表之间创立了连接,这个列就成为第二个表的外键。lFOREIGN KEY约
46、束要求列中的每个值,都存在于引用的表的对应被引用列中。FOREIGN KEY约束只能引用在引用的表中是 PRIMARY KEY 或 UNIQUE 约束的列。l其定义的语法格式为:l CONSTRAINT constraint_name l FOREIGN KEY l REFERENCES schema_name.referenced_table_name ref_column ,.n 15.7 15.7 约束的概念和类型约束的概念和类型l【例15.26】创立选课表。lCREATE TABLE schedule lscheduleid int PRIMARY KEY,lsubjectid int
47、 REFERENCES subjectsubjectid,lstuID int CONSTRAINT fk_stu_id FOREIGN KEYStuID REFERENCES studentStuID l其中表“schedule具有两个外键,字段“subjectid引用的是“subject表的主键“subjectid,而StuID引用的是“student的主键StuID。Constraint fk_stu_id是约束名称,如果省略,则系统会指定约束名。15.7 15.7 约束的概念和类型约束的概念和类型l15.7.3 UNIQUE15.7.3 UNIQUE约束约束l使用UNIQUE约束确保在
48、非主键列中不输入重复的值。可以对一个表定义多个UNIQUE约束,UNIQUE约束允许NULL值,其语法格式请参照15.7.1小节。l15.7.4 CHECK15.7.4 CHECK约束约束lCHECK 约束通过不基于其他列中的数据的逻辑表达式确定有效值。例如,可以通过任何基于逻辑运算符返回TRUE或FALSE的逻辑布尔表达式创立CHECK约束。l【例15.27】为学生表身份证增加Check约束,身份证是15位或18位。lCREATE TABLE studentl StuID int PRIMARY KEY,l StuName varchar20,l StuIDCard varchar18 UN
49、IQUE CHECKlenStuIDCard=15 or lenStuIDCard=15 15.7 15.7 约束的概念和类型约束的概念和类型l15.7.5 DEFAULT15.7.5 DEFAULT定义定义 l定义列的缺省值,插入数据时,如果列不允许空值且没有DEFAULT定义,就必须为该列指定值。否则数据库会返回错误,指出该列不允许空值。l15.7.6 15.7.6 允许空值允许空值lNULL的意思是没有输入,出现NULL通常表示值未知或未定义。SQL Server建议防止允许空值,因为空值会使查询和更新变得更复杂。如果不允许空值,用户向表中输入数据时必须在列中输入一个值,否则数据库将不接
50、收该表行。15.8 15.8 管理约束管理约束l在所要修改的表上用鼠标右键单击,在快捷菜单中选择“修改,出现表的属性页,可设置允许空值约束,在所要修改的列名上用鼠标右键单击,出现快捷菜单,如图15.25所示。快捷菜单上“设置主键用来设置PRIMARY KEY约束,“关系用来设置FOREIGN KEY约束,“索引/键用来设置UNIQUE约束,“CHECK约束可直接设置CHECK约束。下方“默认值或绑定则可用来设置DEFAULT定义。15.8 15.8 管理约束管理约束9、静夜四无邻,荒居旧业贫。4月-234月-23Tuesday,April 18,202310、雨中黄叶树,灯下白头人。06:57