打印本文 打印本文  关闭窗口 关闭窗口
ASP与SQL网站数据库程序设计(8)
作者:. 文章来源:科学出版社 点击数: 更新时间:2004/1/24 23:26:21

数据库的备份与管理

7-1 生成数据库的SQL脚本

7-2 收缩数据库

7-3 数据库备份与还原

7-4 使用权限的管理


在前面的章节中,介绍了数据库与表的创建方式,以及一些常用的管理操作。然而,随着数据库的使用,数据库文件会不断地增加,或系统可能发生问题,因此在本章中我们将介绍一些数据库的维护操作,以便让数据库系统能够正常运行。

7-1  生成数据库的SQL脚本

这个功能可以将创建的数据库结构转换产生SQL语句,当需要创建同样结构的数据库时,可以执行这个SQL语句自动创建数据库,而不需要自己重新一个一个地创建,这样可以节省许多操作时间。

这个生成SQL脚本可以涵盖许多的数据库对象,包含表、视图、存储过程、对象权限、用户、组、角色等,因此通常会利用它来创建数据库结构,备份用来重建数据库,或是将它作为安装数据库的工具。

7-1-1 生成SQL脚本窗口

生成SQL脚本的设置窗口如图7-1所示,分为“常规”、“设置格式”与“选项”等三个选项卡。

1. “常规”选项卡

“常规”选项卡是用来指示要将数据库中的哪些数据库对象脚本化,也就是要产生哪些对象的SQL语句。可以在这个选项卡中单击“全部显示”按钮,将数据库中所有的对象显示在“Trade上的对象”清单中,如图7-1所示,它显示“Trade”数据库内包含三个表与一个视图对象。

接着可以利用上面的复选框,选择要加入所有属于特定对象类型的数据库对象。例如,选中“全部表”复选框,会将“币别信息”、“产品基本信息”与“产品类别”三个表加入到“将要写入脚本的对象”列表框中。

如果我们只要将特定几个数据对象编写成脚本,例如只要产生“产品基本数据”表的SQL脚本,我们也可以利用“新建”按钮,将在“对象于Trade”列表框中选定的数据库对象加入到“将要写入脚本的对象”列表框中。

选项卡中的“预览”按钮可以让我们在创建产生的SQL脚本文件之前,先查看使用目前的设置将会产生的SQL脚本内容。如图7-2所示为在“要编写脚本的对象”列表框中指定“产品基本信息”表,单击“预览”按钮,打开“生成SQL脚本预览”对话框。

2. “设置格式”选项卡

这个选项卡是用来指示脚本的设置格式选项,如图7-3所示。要为每一个选择的数据库对象加入(产生)哪些信息项目,可用的设置格式选项说明如表7-1所示。“脚本模板”区内会显示使用选取的设置格式选项,每一个数据库对象将会产生哪些SQL指令。

7-1  可用的设置格式选项说明

设置格式选项

说  明

为每个对象产生 CREATE <对象> 命令

产生用来创建选取的数据库对象的Transact-SQL语句

为每个对象产生 DROP <对象> 命令

在创建数据库对象的Transact-SQL语句之前,加上删除该数据库对象的SQL指令,也就是要在创建数据库对象之前,先删除现有的数据库对象

为所有相关的对象产生脚本

将所有与选取数据库对象相关的对象,也一并包含到产生的Transact-SQL语句中,这样可以避免用户再指定要创建SQL脚本的数据库对象时,忽略选取相关的对象

在脚本文件中包含描述的表头

在每个Transact-SQL语句之前,加上批注文字

包含延伸预存属性

将延伸存储过程包括在创建的SQL脚本中

只有与 Script 7.0 兼容的功能

产生与 Microsoft® SQL Server™ 7.0 版兼容的脚本。 如果选取这个选项,会忽略以下 SQL Server 2000 选项:数据行层级排序规则、用户自定义函数、扩充属性、数据表和视图的INSTEAD OF触发程序、视图的索引 (索引视图)、导出数据行的索引、视图的参考权限及降序索引

3. “选项”选项卡

使用这个选项卡可以对产生的Transact-SQL语句做进一步的微调,例如,指定存放SQL脚本的文件格式、是否要产生表索引的脚本、是否要产生权限的脚本等。其选项卡画面如图7-4所示,我们可以将它的选项设置区分为:安全性脚本选项、表脚本选项以及文件选项三个类。

“安全性脚本选项”是用来指定在产生的SQL脚本中,要包含创建哪些与用户、权限、角色等有关安全性的数据库对象,可选取的选项说明如表7-2所示。

7-2  选项说明表

 

 

编写数据库脚本

产生可用来创建现有数据库结构描述脚本的SQL语句

编写数据库用户及数据库角色的脚本

产生可用来创建目前可存取数据库的所有用户与角色的SQL语句

指令化 SQL Server 登录脚本

产生用来创建目前可存取服务器的所有登录的SQL语句

编写对象级别权限的脚本

产生为每个选取对象创建所有的授权、取消与拒绝权限的SQL语句

“表脚本选项”是用来指定在产生的SQL脚本中,要包含哪些表设置,可用的选项说明如表7-3所示。

7-3  表脚本选项中各选项说明

 

 

编写索引脚本

产生 Transact-SQL 语句,来创建目前存在于任何选定数据表中的索引。必须在“常规”选项卡中选取一或多个数据表,这个选项才会起作用

编写全文索引脚本

产生 Transact-SQL 语句,来创建全文索引。必须在“常规”选项卡中选取一或多个数据表,这个选项才会有作用

编写触发器脚本

产生Transact-SQL语句,来创建目前存在于任何选定表中的触发器。必须在“常规”选项中选取一或多个数据表,这个选项才会有作用

编写主键、外键、默认值和检查约束脚本

产生 Transact-SQL 语句,来创建目前存在于任何选定数据表中的主键、外键、默认值与检查约束。必须在“常规”选项卡中选取一或多个数据表,这个选项才会有作用

“文件选项”是用来指定产生的SQL脚本输出的方式,在“文件格式”选项上有“MS-DOS文本(OEM)”、“Windows文本(ANSI)”与“国际化文本 (Unicode)”三种格式可以选择,这三种格式的差异说明如表7-4所示。

7-4  文件选项中的各选项说明

选 项

说 明

MS-DOS文本 (OEM)

Transact-SQL 脚本保存为目前 Microsoft Windows 系统字码页 (Code Page) 格式。若要将脚本用于批处理操作,并从使用Isql.exe这类的命令提示中执行它,则选取此选项

Windows文本 (ANSI)

ANSI 格式保存 Transact-SQL 脚本。如果脚本将用于SQL Query Analyzer或别的Windows应用程序,应选取这个选项

国际化文本 (Unicode)

Unicode 格式保存Transact-SQL脚本。如果脚本用到只有Unicode 字形才支持的特殊国际字符,应选取这个选项。这个格式所需的磁盘空间是目前 Windows 字码页或 ANSI 所需空间的两倍

在“生成的文件”选项上有“创建一个文件”与“每个对象创建一个文件”两种产生文件的方式,选择“创建一个文件”选项会将每个选取对象的SQL脚本都存放到同一个文件中;选择“每个对象创建一个文件”选项,则会分别为每个选取的对象创建各自的SQL脚本文件。当我们很确定这些所有选取的对象都要一起创建时,可以选择“创建一个文件”选项。

7-1-2 执行生成SQL脚本

对生成SQL脚本的选项有了初步的了解后,接下来就以“Trade”数据库为例,说明如何利用“生成SQL脚本”功能,将“Trade”数据库内的所有表结构脚本化。

1)在Enterprise Manager控制台中选取“Trade”数据库,然后在菜单上选择“工具”|“生成SQL脚本”命令,打开“生成SQL脚本”对话框。

2)在“常规”选项卡中单击“全部显示”按钮,并选中“全部表”复选框,将“Trade”数据库内所有的三个表都加到“将要写入脚本的对象”列表框中。

3)切换到“设置格式”选项卡,选中“为每个对象产生CREATE<对象>命令”、“为每个对象生成DROP<对象>命令”以及“在脚本文件中包含说明性的标题”三个复选框。

4)切换到“选项”选项卡,选中“编写数据库用户和数据库角色的脚本”、“编写索引脚本”以及“编写主键、外键、默认值和检查约束脚本”三个复选框,然后在文件选项上选择以“国际化文本”格式将产生的SQL脚本写到一个文件中。

5)设置完成后单击“确定”按钮,这时它会要求指定一个文件名称来存放产生出来的SQL语句,指定完成后,开始编写SQL脚本,完成操作。

7-1-3 执行SQL脚本文件

创建好SQL脚本文件之后,就可以利用它来进行重建数据库结构。但我们要如何执行这个创建的SQL脚本文件呢?在SQL Server中,可以利用Query Analysis管理工具来执行,执行的步骤如下:

1)激活Query Analysis程序,并登录联机到要使用SQL脚本文件创建数据库的SQL服务器。

2)在Query Analysis窗口中,选择“文件”|“打开”命令,或单击 按钮,选择打开我们刚创建的SQL脚本文件,这时会将SQL脚本文件的内容加载到查询窗口中。

3)在数据库下拉列表中,选择要将数据库结构重建在哪一个数据库上,然后单击  按钮,或按F5键,开始执行SQL脚本,进行重建数据库结构的操作。

完成上述操作后,可以在“New_Trade”数据库中发现,“币别信息”、“产品基本信息”与“产品类别”三个表,这三个表的结构与索引设置等都与“Trade”数据库的相同。

7-2  收缩数据库

前面曾经介绍过,可以将数据库文件或事务日志文件设置成可以自动增长,一旦指定的空间不足时,就会自动扩增文件的大小。随着数据库的使用,一段时间后数据文件可能已经扩增到非常大。然而我们可能会发现,实际上的数据内容可能并没有那么多,而是占用了许多未使用的磁盘空间,造成磁盘空间的浪费。

SQL Server中提供了一个收缩数据库功能,可以用来控制数据文件的可用空间比率。我们可以在要收缩的数据库上右击鼠标,在打开的快捷菜单中选择“所有任务”|“收缩数据库”命令,这时会打开如图7-11所示的对话框。

在“收缩后文件中的最大可用空间”中可以设置执行完文件收缩后要留下多少比率的可用空间。另外,也可以在这个窗口中选择“根据本调度来收缩数据库”复选框,要求数据库系统自动进行数据库收缩。

在“调度”选项区内单击“更改”按钮,可以另行指定自动进行数据库收缩的时间,图7-12所示为单击“更改”按钮后打开的编辑调度窗口,它提供了四种调度类型可供选择:

·       SQL Server代理启动时自动启动”:表示每当SQL Server Agent服务被启动时,就会自动执行这个收缩数据库操作。

·       “每当CPU闲置时启动”:每当CPU处于闲置状态时,自动执行这个收缩数据库操作。

·       “一次”:在指定的日期和时间执行这个收缩数据库的动作。选择这个调度类型时,必须在后面的“日期”字段与“时间”字段上指定要执行操作的日期时间。

·       “反复出现”:表示要每隔一段周期时间,例如,每个星期一早上十点,自动执行一次数据库收缩操作。

如果要针对个别的数据文件进行收缩,可以在“收缩数据库”窗口的收缩文件区上单击“文件”按钮,这时它会打开如图7-13所示的Shrink File对话框。在这个对话框中,可以在“数据库文件”下拉列表中指定要进行收缩的数据文件;在“收缩操作”选项组中指定进行文件的收缩方式;在“延迟收缩”选项组中设置要立即进行收缩动作,或是指定时间稍后再收缩。

7-5  压缩动作及其说明

 

收缩页面然后从文件中截断可用空间

收缩数据库分页,然后删除由收缩页面所产生的可用空间


续表

 

从文件结尾来截断可用空间

从文件结尾删去可用空间

清空文件 (将数据合并到文件组的其他文件)

清空选取的数据库文件,目前文件中的数据会移到文件组中的其他文件中

将文件收缩为

将文件收缩成指定的大小

7-3  数据库备份与还原

人为操作疏忽、硬件发生故障、数据库文件损坏或者是整个系统毁坏等都有可能造成我们辛苦创建的数据库无法使用。为了能在发生这类问题时,可以尽快将数据库恢复,将损失降到最低,应该定期备份数据库内容,尤其是存放有重要数据的数据库。

使用前面介绍的“生成SQL脚本”功能只能重建数据库的结构,如果希望将整个数据库的内容都备份,就必须使用数据库备份功能。

7-3-1 备份模式

SQL Server中有四种备份模式可供选择,下面分别进行介绍。

1. 完全数据库备份

这是最完整的数据库备份方式,它会将数据库内所有的对象完整地拷贝到指定的设备上。由于它是备份完整内容,因此通常会需要花费较多的时间,同时也会占用较多的空间。对于数据量较少,或者变动较小不需经常备份的数据库而言,可以选择使用这种备份方式。

2. 差异数据库备份

差异数据库备份只会针对自从上次完全备份后有变动的部分进行备份处理,这种备份模式必须搭配完全数据库备份一起使用,最初的备份使用完全备份保存完整的数据库内容,之后则使用差异备份只记录有变动的部分。由于差异数据库备份只备份有变动的部分,因此比起完全数据库备份来说,通常它的备份速度会比较快,占用的空间也会比较少。对于数据量大且需要经常备份的数据库,使用差异备份可以减少数据库备份的负担。

若是使用完全备份搭配差异备份来备份数据库,则在还原数据库的内容时,必须先加载前一个完全备份的内容,然后再加载差异备份的内容。例如,假设我们每天都对数据库“Trade”做备份,其中星期一到星期六做的是差异备份,星期天做完全备份,当星期三发现数据库有问题,需要将数据库还原到星期二的状况时,我们必须先将数据库还原到上星期天完全备份,然后再还原星期二的差异备份。

3. 事务日志备份

事务日志备份与差异数据库备份非常相似,都是备份部分数据内容,只不过事务日志备份是针对自从上次备份后有变动的部分进行备份处理,而不是针对上次完全备份后的变动。

若是使用完全备份配合事务日志来备份数据库,则在还原数据库内容时,必须先加载前一个完全备份的内容,然后再按顺序还原每一个事务日志备份的内容。例如,假设我们每天都对数据库“Trade”进行备份,其中星期一到星期六做的是差异备份,星期天做完全备份,当星期三发现数据库有问题,需要将数据库还原到星期二的状况时,我们必须先将数据库还原到上星期天开始的完整数据库备份,然后再还原星期二的差异备份,接着再还原星期三的事务日志备份。

4. 文件和文件组备份

这种备份模式是以文件和文件组作为备份的对象,可以针对数据库内特定的文件或特定文件组内的所有成员进行数据备份处理。不过在使用这种备份模式时,应该要搭配事务日志备份一起使用,因为当我们在数据库中还原部分的文件或文件组时,也必须还原事务日志,使得该文件能够与其他的文件保持数据一致性。

7-3-2 数据库备份

要在Enterprise Manager管理程序中进行数据库备份,可以在菜单中选择“工具”|“备份数据库”命令,打开如图7-14所示的备份数据库对话框。

1. “常规”选项卡

在“常规”选项卡中主要是设置备份的数据库、备份的模式以及其他执行、写入备份的方式,可用的选项设置说明如下:

·        “数据库”下拉列表:用来指定要进行数据备份的数据库名称。

·        “备份”选项组:指定使用的备份模式,如果数据库是第一次备份,将只会有一个完全备份选项可供选择。

·        “目的”选项组:指定用来存放备份数据的位置,它可以是指定磁盘驱动器上的文件位置,或者是系统上的磁带设备。使用时利用“新建”按钮来新建指定的目的位置。

·        “重写”选项组:指定当指定的备份媒体已经有数据时,写入备份数据的方式,选择“追加至媒体”单选按钮,会将备份数据写到上次备份数据的后面;选择“重写现有媒体”单选按钮,则会直接覆盖现有的数据。

·        “调度”选项组:用来设置执行备份的时间,如果希望在特定的时间或是定期在某个时间执行数据库备份,可以使用这个调度选项来指定时间。

2. “选项”选项卡

备份对话框的“选项”选项卡的画面如图7-15所示,它是用来提供一些额外的选项设置,这些选项的作用说明如表7-6所示。

7-6  “选项”选项卡中的各选项说明

  

  

完成后验证备份

在备份完成时验证备份媒体的内容是否完全

备份后弹出磁带

备份完成后自动弹出备份媒体磁带

删除事务日志中不活地动的条目

在备份完成时,删除所有已完成事务的事务日志

检查媒体集名称和备份集到期时间

在重写媒体前,检查媒体集名称以及备份集日期是否过期

备份集到期时间

设置备份集到期日期。SQL Server只会使用媒体中第一个备份集的备份到期时间信息,来决定是否可重写整个媒体

初始化并标识媒体

Microsoft Tape Format (MTF)前置数据写入媒体的开始位置,它将会删除媒体内的所有内容以及任何前置数据信息,而且在执行时它也不会检查备份集期限与媒体集名称

媒体集名称

将媒体名称写到媒体上作为MTF标题的一部分

媒体集描述

将媒体描述写到媒体上作为MTF标题的一部分

7-3-3 数据库备份设置实例

现在假设我们希望每个星期定期为数据库“Trade”创建完全数据备份,可以按照下列步骤来进行:

1)在Enterprise Manager管理程序的菜单中选择“工具”|“备份数据库”命令,打开备份窗口,如图7-16所示,然后在“数据库”下拉列表中选取要备份的数据库“Trade”,在“备份”选项组中选择“数据库-完全”单选按钮。

2)在“目的”选项组中单击“添加”按钮,然后在打开的“选择备份目的”对话框中选择备份位置,如图7-17所示,在这里选择“文件名”,并在下方的文本框中指定备份文件的路径位置。指定完成后,单击“确定”按钮,切换回备份窗口。

3)在备份窗口中选中“调度”复选框,并单击右方的按钮,然后在打开的“编辑调度”对话框中选择“反复出现”单选按钮,并利用右方的“更改”按钮修改调度的周期及时间,如图7-18所示。

4)设置完成后,回到备份窗口,单击“确定”按钮,即完成定期备份数据库“Trade”的设置动作,如图7-19所示。

1.       在上面的范例中,我们利用调度来指定数据库备份的周期时间,当单击“确定”按钮完成设置时,它并不会立即进行数据库备份的动作,而是要等到指定的时间,才会开始运行。

7-3-4 数据库还原

数据库还原是数据库系统管理的另一项非常重要的工作。就某种意义来说,数据库的还原比数据库的备份更加重要并困难。因为数据库备份是在正常的状态下进行,然而数据库还原则是在非正常的状态下进行,例如硬件故障、系统瘫痪以及操作疏忽等。

数据库还原的动作就是将数据库的备份重新再载回到系统中。在执行数据库还原的动作时,系统首先要进行一些安全性检查。例如:“检查数据库是否存在”、“数据库文件是否兼容”、“是否处于维修模式中”等检查,以确保数据库可以安全、迅速地还原。此外,不同的数据库备份类型,都应该个别采取不同的还原方法。

数据库还原就是把数据库备份载回到系统中,在执行还原数据库时,系统首先要进行一些安全性检查,如检查数据库是否存在、数据库文件是否兼容等,以确保数据库能安全、迅速地复原。另外,不同的数据库备份类型,应该采取不同的还原方法。

在进行数据库还原、日志备份或文件备份时,以下所列的是用户必须要考虑的因素:

·       在进行数据库还原之前,应该取得有关备份的相关信息。

·       如果需要还原最后一次的数据库备份时,则必须要使用RECOVERY选项。

·       如果需要还原附加备份时,则必须使用NORECOVERY选项。

在数据库发生故障之后,数据库管理员应该尽快创建一个事务日志备份,以便取得从上一次备份到数据库故障为止所有的事务信息。管理员在备份事务日志时,应该使用No_Truncate,这样即使数据库处于无法存取的状态,只要事务日志也可以存取,就可以进行事务日志备份。

在使用RESTORE子句进行回存数据库时,系统会先进行安全性检查。在下面几种情况下,系统无法还原数据库:

·        服务器上的数据库文件登录信息和备份登录信息之内,数据库文件组不一致。

·        如果在RESTORE语句中指定的数据库已经存在时,同时该数据库与在备份文件中记录的数据库不同。

·        无法提供还原数据库所需的全部文件或文件组。

前面已经提到过,在还原数据库时,如果不能提供还原该数据库的文件或文件登录信息,即无法进行数据库的还原操作。因此,在进行数据库的还原时,必须要确保数据库的备份文件的有效性;并且在备份文件过程中,必须要包括所有需要还原的内容。在还原数据库的方法上,可以使用以下两种方法来查看数据库备份信息:

·        使用SQL Server Enterprise Manager查看备份信息。

·        使用Transact-SQL查看备份信息。

常用的Transact-SQL指令有:RESTORE HEADERONLYRESTORE FILELISTONLYRESTORE BABELONLYRESTORE VERIFYONLYRESTORE HEADONLY语句可以被用来撷取特定备份设备上所有备份集的所有备份前置数据。执行RESTORE HEADONLY命令,可返回如下信息:

·       备份文件以及备份名称和描述信息。

·       备份所使用的媒体类型。

·       备份方法以及类型。

·       备份的日期以及时间。

·       备份文件的大小以及备份的序号。

您可以使用RESTORE FILELISTONLY语句,来取得备份登录信息内,数据库文件与事务日志文件的文件信息。因此,执行RESTORE FILELISTONLY指令,可返回以下信息:

·        数据库文件和事务日志文件登录信息的逻辑名称。

·        数据库文件和事务日志文件登录信息的实际名称。

·        文件类型。

·        文件组中所包含的成员。

·        备份登录信息的大小(MB)。

·        文件的最大容量(MB)。

同时,您也可以使用RESTORE LABELONLY语句,来取得有关保存备份文件的保存媒体信息。并且,使用RESTORE VERIFYONLY语句,可以用来判断备份登录信息的单一文件是否完全,以及备份文件是否可读。在开始执行还原数据库动作之前,还需要注意以下几个方面:

·       在进行数据库还原之前,应该先将故障的数据库删除,以便中断与对所有故障硬件的引用。关于删除数据库的操作,可以通过SQL Server Enterprise Manager或是使用Transact-SQL指令DROP DATABASE来完成。

·       在进行数据库的还原之前,必须先限制用户对数据库的存取。数据库的还原是属于静态的,应该使用SQL Server Enterprise Manager或者系统保存程序sp_dbotion,将数据库的“dbo use only”选项设置为“True”状态。

接着,将直接使用 SQL Server Enterprise Manager来进行数据库的还原操作;使用SQL Server Enterprise Manager还原数据库的步骤如下:

1)激活SQL Server Enterprise Manager管理程序。

2)在Enterprise Manager窗口中,选择“工具”|“还原数据库”命令。打开如图7-20所示的“还原数据库”对话框。在该对话框中,有两个选项卡:“常规”和“选项”,默认的选项卡是“常规”选项卡。

3)在“常规”选项卡中,可以选择希望还原的数据库以及还原的媒体类型。

4)选择“选项”选项卡,如图7-21所示。在“选项”选项卡中,可以选择在进行还原动作时使用的选项和状态。

5)在选择希望还原的“源文件名称”并且单击“确定”按钮之后,即可开始进行数据库的还原工作,如图7-22所示。

 

7-4  使用权限的管理

SQL Server 中,权限的管理是非常重要的。通过权限的设置,可以在存取数据库对象以及对对象执行的操作上,加以限制。因此,如果特定帐号未被明确赋予对数据库某对象的存取权限时,此特定帐号即无法存取该对象。

SQL数据库中,可以赋予帐号多种不同层次的执行权限。同时也可以对单一的Windows NT用户或者是Windows NT组,分别进行执行权限的设置。但是在进行权限的设置之前,请先了解这些用户(组)在操作 SQL Server方面的需求程度。例如:某些用户仅仅需要具有数据库的查询能力时,就不需要赋予这些用户更改、删除、新建记录的使用权限。以下是各种权限赋予的类型:

·        权限类型

·        验证权限

·        权限许可

·        拒绝权限

·        撤销权限

7-4-1 权限类型

MS-SQL Server系统中,共有三种权限类型:“语句权限”、“对象权限”以及“暗示性权限”。

1. 语句权限

这是SQL Server中,功能最强大的权限管理。语句权限通常是授予那些需要在数据库中创建对象、修改对象、执行数据库以及事务日志备份的用户。如果某个帐号获得了语句权限的授予时,则这个帐号的用户便具有了创建对象的权利,便可以使用以下的语句:

·        CREATE DATABASE:允许用户在服务器上创建数据库。

·        CREATE DEFAULT:允许用户在目前的数据库上创建默认值。

·        CREATE PROCEDURE:允许用户在目前的数据库上创建预储程序。

·        CREATE RULE:允许用户在目前的数据库上创建使用规则。

·        CREATE TABLE:允许用户在目前的数据库上创建表。

·        CREATE VIEW:允许用户在目前的数据库上创建视图。

·        BACKUP DATABASE:允许用户创建数据库的备份。

·        BACKUP LOG:允许用户创建数据库的事务日志备份。

一般来说,在SQL Server中,这些权限的设置都是属于在“服务器规则”的“特权模式”中进行设置的。图7-23是在SQL Server 2000中进行特定用户的权限设置画面。

 

2. 对象权限

一般来说,对象的权限是赋予在数据库的层次上,并且允许用户进行数据库对象的操作以及存取。如果用户并未被授予数据库对象的存取权限时,就无法存取数据库中的任何对象。SQL Server 有如下所示的对象权限:

·        SELECT:授予用户对数据库中的特定表具有记录查询的使用权限。

·        INSERT:授予用户对数据库中的特定表具有新建记录的使用权限。

·        UPDATE:授予用户对数据库中的特定表具有更新记录内容的使用权限。

·        DELETE:授予用户对数据库中的特定表具有删除记录的使用权限。

·        EXECUTE:授予用户对数据库中的特定预储程序的执行权限。

·        REFERENCES:特殊的权限,允许用户使用主索引/外部索引的方式,将两个表关联在一起。在大多数正常情况下,常规的用户是不需要具有这种类型的权限的。

 

3. 权限状态

SQL Server 中,共有三种权限的状态,分别是:“拒绝(DENY)”、“撤销(Revoke)”以及“授权(Grant)”等。以下是这三种状态的详细说明:

·     拒绝权限:这是权限状态中,最高的层级。一旦用户的权限被设置为这种状态时,即使该用户被授与其他层级的存取权限时,该用户仍将无法存取数据库对象。

·     撤销权限:这是一种删除先前在特定权限状态上,对于用户设置权限管理。即为删除用户在目前的级别上,已经定义的“拒绝”或是“授权”状态。但是如果是其他层级上的“拒绝”或是“授权”时,则不受影响,

·     授权权限:可以删除“拒绝”或是“撤销”的权限。如果一个权限在任何其他层级上被“拒绝”时,用户将无法使用这些层级所提供的功能;如果权限在另一层级上被“撤销”时,用户仍然能够使用该层级所提供的功能。

7-4-2 权限验证

对于每一个数据库的用户而言,系统管理员是可以对该用户进行特定权限管理的设置工作。但是如果用户将要对数据库执行某项特定的操作时,系统将会在执行前先检查该用户的使用权限。如果用户在这些特定的操作上不具有使用权限时,系统将不允许该用户继续操作,并且返回错误信息。在权限的验证上,SQL Server 依据如下所示的步骤,逐步验证用户的权限是否有效。

1)当用户将要对表执行某项操作时,该操作所使用的Transact-SQL语句就会被传送到SQL Server上。

2)当SQL Server接收到这些Transact-SQL语句时,将会检查该用户是否具有执行这些 Transact-SQL 语句的权限。

3)如果该用户具有Transact-SQL语句的执行权限时,SQL Server系统将会执行相对应的操作;如果该用户并没有执行Transact -SQL语句的权限时,SQL Server系统将不会执行该项操作,并返回错误信息。

7-4-3 权限授与

上述各项权限的设置,都可以使用SQL ServerEnterprise Mamager管理工具,或者是Transact-SQL语句,来设置权限的授与。但是在进行权限的授与过程中,必须要注意如下所示的注意事项:

·        只能在目前操作的数据库中进行权限的授与。

·        在默认的情况下,属于sysadmindb_ownerdb_securityadmin的成员,以及数据库对象的拥有人,都具有权限授与的能力。

使用SQL Server Enterprise Manager权限授与的操作步骤如下:

1)执行SQL Server Enterprise Manager管理工具,同时,连接到即将要进行权限设置的SQL服务器上,如图7-25所示。

2)展开服务器的树状结构,并且显示服务器上的对象目录。接着选择“数据库”项目左边的“+”,即可打开并且显示服务器上的所有数据库,如图7-26所示。

3)点选“Trade”数据库左边的“+”,将会显示“Trade”数据库的所有对象。接着点选“Tables(表)”左边的“+”,即可显示“Trade”数据库中所有的“表”

4)接着选择“产品基本信息”表并右击鼠标,选择“所有任务”,再选择“管理权限”

打开“产品基本信息”表的“对象属性”窗口

6)如果要设置特定用户的拒绝权限时,可以在相对应权限复选框上双击,即可完成拒绝权限的设置。拒绝权限的表示方式如图7-30所示。

7)完成权限的设置之后,单击“确定”按钮即可开始分配这些权限。

此外,我们也可以在SQL Query Analyzer中,利用SQL语句来设置权限。用于权限设置语句共有:“GRANT”、“DENY”和“REVOKE”,这三种语句的语法如下所示:

GRANT 语句权限的语法如下:

GRANT{ALL | statement[,…n] } TO security_account[,…n]

对象权限的语法如下:

GRANT

{

{ALL [PRIVILEGES] | permission[,…n]}

[(column[,…n])] ON {table | view}

| ON {stored_procedure | extended_procedure}

}

TO security_account[,…n]

[AS {group | role}]

范例程序:EX07-01.sql

GRANT 语句的方式,将“Trade”数据库中的“产品基本信息”表的“Select”权限,授与名为“test”的用户。

程序内容

USE Trade

GO

GRANT SELECT

ON 产品基本信息

TO test

GO

接着,再进入SQL Server Enterprise Manager工具程序中,验证GRANT语句执行的结果

在上述的范例程序中,笔者使用了下一章即将说明的 Query Analyzer,这是一种SQL Server 2000所提供的语句工具程序。在下一章中,将会利用这个工具程序,实际地进行表的存取。

7-4-4 拒绝权限

如果需要限制某些用户或角色的存取权限时,可以使用“拒绝权限”来达成这个目的。拒绝权限相当于:

·         删除先前所授与用户或者角色的权限。

·         禁止从另外一个角色中继承的权限。

·         确保用户或者角色不能从任何其他的角色中继承权限。

·         设置拒绝权限时,需要注意下列两点:

只能在目前的数据库中拒绝权限。

在默认的状况下,属于sysadmindb_ownerdb_ securityadmin的成员以及数据库对象的拥有者都具有拒绝权限的权力。

Query Analyzer中可以使用DENY语句来设置拒绝权限,DENY语句的语法如下:

拒绝语句权限的语法为:

DENY {ALL | statement[,n] | TO security_account[,…n]

拒绝对象权限的语法为:

DENY {ALL[PRIVILEGES] | permission[,…n]}

{[(column[,…n])] ON {table | view}

| ON {table | view } [(column[,…n])]

| {procedure | extended_procdure}}

TO security_account

范例程序:EX07-02.sql

EX07-01.sql指定给“test”帐号具有的“产品基本信息”表的“SELECT”权限,拒绝再让“test”帐号继续使用;程序内容如下所示;执行结果如图7-33所示。

程序内容

USE Trade

GO

DENY SELECT

ON 产品基本信息

TO test

GO

接着,再进入SQL Server Enterprise Manager工具程序中,验证 DENY 语句执行的结果

7-4-5 撤销权限

如同前面两个小节所介绍,可以对特定的帐号,根据表的使用权限设置“拒绝”、“授与”等权限,SQL Server同时也提供了“撤销”这些权限的设置方式。在进行权限“撤销”的同时,需要注意以下几点:

·       只能在目前的数据库中撤销权限。

·       在默认的状况下,sysadmindb_ownerdb_securityadmin的成员和数据库对象的拥有者具有撤销权限的权限。

·       基本上撤销权限就是删除系统表sysprotects中的内容,这部分的内容是由授予权限和拒绝权限所创建的。

Query Analyzer中可以使用REVOKE语句来撤销权限,REVOKE语句的语法如下:

撤销语句权限的语法如下:

REVOKE {ALL | statement[,…n] | FROM security_account[,…n]

撤销对象权限的语法如下:

REVOKE[GRANT OPTION ON]

{ALL [PRIVILEGES] | permission[,…n]|

{

{[(column[,…n])] ON {table | view}

| ON {stored_procedure | extended_procedure}

}

FROM security_account[,…n]

[AS {group | role}]

范例程序:EX07-03.sql

撤销“test”帐号被设置为“拒绝”权限的SELECT权限。

程序内容

USE Trade

GO

REVOKE SELECT

ON 产品基本信息

TO test

GO

接着,再进入SQL Server Enterprise Manager工具程序中,验证 REVOKE 语句执行的结果



打印本文 打印本文  关闭窗口 关闭窗口