模拟示例

更新日期: 2005 年 12 月 5 日

模拟示例说明在使用集成安全性时,如何使用模拟来使用客户端传递的凭据以访问受操作系统保护的资源(例如文件)。默认情况下,访问这些类型的资源时,使用运行 SQL Server 的帐户的凭据。

ms160785.note(zh-cn,SQL.90).gif注意:
此形式的模拟不会影响访问受 SQL Server 保护的资源(例如表),除非通过 ADO.NET 对其他数据库服务器(SQL Server 或某些其他类型的数据库服务器)进行数据访问。在这种情况下,应在对连接执行 Open 方法时使用模拟,以便将客户端的凭据传递到远程服务器。在其他 ADO.NET 调用期间,不需要模拟。

此示例也说明了如何使用公共语言运行时 (CLR) 表值函数访问有关包含在目录中的文件的信息。

安装目录:drive:\Program Files\Microsoft SQL Server\90\Samples\Engine\Programmability\CLR\Impersonation\

应用场景

Jane 是 Adventure Works Cycles 的开发人员。她希望使用客户端传递的凭据访问有关服务器上的目录中的文件的信息。

语言

Transact-SQL、Visual C# 和 Visual Basic。

功能

模拟示例将使用 SQL Server 的以下功能。

应用领域 功能

整体

CLR、安全性

必备组件

在运行此示例之前,请确保安装了下列软件:

  • Microsoft Microsoft SQL Server 2005 或 Microsoft SQL Server 2005 Express Edition (SQL Server Express).您可以从 SQL Server 2005 Express Edition 文档和示例网站免费获取 SQL Server Express。
  • SQL Server 2005 附带的 AdventureWorks 数据库还可以从 SQL Server 开发人员中心网站上获取。
  • SQL Server 2005 数据库引擎示例。这些示例包含在 SQL Server 2005 中。您可以从 SQL Server 开发人员中心网站上下载这些示例的最新版本。
  • .NET Framework SDK 2.0 或 Microsoft Visual Studio 2005。您可以免费获取 .NET Framework SDK。请参阅安装 .NET Framework SDK

生成示例

如果尚未创建强名称密钥文件 ExternalSampleKey.snk,则请使用以下说明生成该密钥文件。

生成强名称密钥文件

  1. 打开 Microsoft Visual Studio 2005 命令提示。单击**“开始”,依次指向“所有程序”Microsoft Visual Studio 2005“Visual Studio 工具”,再单击“Visual Studio 2005 命令提示”**。

    - 或者 -

    打开 Microsoft .NET Framework 命令提示。单击**“开始”,依次指向“所有程序”Microsoft .NET Framework SDK 2.0,再单击“SDK 命令提示”**。

  2. 在命令提示符下,使用更改目录 (CD) 命令将命令提示窗口的当前文件夹更改为 Samples 文件夹。

    ms160785.note(zh-cn,SQL.90).gif注意:
    若要确定示例所在的文件夹,请单击“开始”,依次指向“所有程序”Microsoft SQL Server 2005“文档和教程”,然后单击“示例目录”。如果使用了默认安装位置,则示例将位于 <system_drive>:\Program Files\Microsoft SQL Server\90\Samples 中。
  3. 在命令提示符下,运行以下命令以生成密钥文件:

    sn -k ExternalSampleKey.snk

    ms160785.note(zh-cn,SQL.90).gif重要提示:
    有关强名称密钥对的详细信息,请参阅 MSDN 上 .NET 开发中心中的“安全简讯:.NET Framework 中的强名称和安全性”。

生成模拟示例

  1. 通过使用 Visual Studio 2005 和所提供的 Visual Studio 解决方案或通过使用 Microsoft MSBuild(包括在 .NET Framework SDK 2.0 中)来编译示例。在命令提示符下运行与以下命令相似的命令:

    msbuild /nologo /verbosity:quiet /property:Configuration=Debug CS\ Impersonation.sln

  2. 确保安装了 AdventureWorks 数据库。

  3. 如果没有将 SQL Server 引擎示例安装到默认位置,请在 Scripts\InstallCS.sql 和 Scripts\InstallVB.sql 中修改脚本的 CREATE ASSEMBLY 部分中的路径,使其引用示例的安装位置。

  4. 如果您不是要使用的 SQL Server 实例的管理员,则必须让管理员授予您 CreateAssembly 权限,才能完成安装。

  5. 根据编译的是 Visual C# 项目还是 Visual Basic 项目,在 Microsoft SQL Server Management Studio 中打开 Scripts\installCS.sql 或 Scripts\installVB.sql 文件。运行该文件中包含的脚本,或在命令提示符下运行与以下命令相似的命令:

    sqlcmd -E -I -i Scripts\InstallCS.sql

运行示例

运行模拟示例

  1. 在“我的文档”文件夹中,创建名为 Test 的文件夹。

  2. 使用记事本在该文件夹中创建一个空文本文件。

  3. 使用 Windows 资源管理器中的**“属性”**对话框调整该文件夹的安全性。

    1. 使用**“安全”选项卡上的“高级”**按钮禁用从其父级文件夹继承文件夹的安全设置。
    2. 使用**“复制”**选项来复制父级的安全设置。
    3. 将您自己添加为对此文件夹具有完全权限的用户。
    4. 删除所有其他用户。
  4. 在 Management Studio 或记事本中打开 scripts\test.sql 文件。修改此文件,以便不在 SELECT @TestDir 语句中调用 GetEnvironmentVariable 方法,而是为 @TestDir 变量的值指定常量字符串。该代码应与以下代码相似:

    SELECT @TestDir = 'C:\Documents and Settings\username\My Documents\Test\'

    用实际用户名替换 username

在 Management Studio 中运行脚本或在记事本中保存修改的文件,然后在命令提示符下运行以下命令:

sqlcmd -E -I -i Scripts\test.sql

删除示例

删除模拟示例

  1. 在 Management Studio 中打开 scripts\cleanup.sql 文件。运行该文件中包含的脚本,或在命令提示符下运行以下命令:

    sqlcmd -E -I -i Scripts\cleanup.sql

注释

为了使此示例正确运行,必须启用 SQL Server 2005 或 SQL Server Express 的 CLR。

提供的示例仅供教学使用。这些示例不是针对生产环境设计的,也没有在生产环境中进行测试。对于这些示例,Microsoft 不提供相关的技术支持。未经系统管理员允许,不得将示例应用程序和程序集与生产 SQL Server 数据库或报表服务器相连或一起使用。

请参阅

其他资源

The SqlContext Object

帮助和信息

获取 SQL Server 2005 帮助

更改历史记录

发布日期 历史记录

2005 年 12 月 5 日

更改的内容:
  • 更改了有关生成密钥文件的说明,包括密钥文件的名称和位置。