基于角色的安全性技术示例

更新:2007 年 11 月

本示例说明基于角色的安全性的使用情况。服务器应用程序报告客户端应用程序正在使用哪个用户帐户以及该帐户是否属于管理员的角色。

有关使用这些示例的信息,请参见下面的主题:

使用命令提示生成示例

  1. 打开命令提示窗口,定位到 RoleBasedSecurity 目录下语言特定的子目录之一。

  2. 根据所选的编程语言,在语言特定的子目录之一中键入 msbuild RoleBasedSecurityCS.sln 或 msbuild RoleBasedSecurityVB.sln。

使用 Visual Studio 生成示例

  1. 打开 Windows 资源管理器,定位到 RoleBasedSecurity 目录下语言特定的子目录之一。

  2. 根据所选的编程语言,双击 RoleBasedSecurityCS.sln 或 RoleBasedSecurityVB.sln,在 Visual Studio 中打开该文件。

  3. 在“生成”菜单上单击“生成解决方案”。

运行示例

  1. 使用命令提示或 Windows 资源管理器定位到包含新的可执行文件的目录。

  2. 在命令行中键入 RBSecDemo.exe,或者在 Windows 资源管理器中双击 RBSecDemo.exe 的图标以启动该可执行文件。

  3. 单击标记为“Display Logged On User”(显示已登录用户)的按钮。当前已登录的用户的帐户名应该显示在应用程序窗口中。接下来,单击标记为“Is Caller in Demo Role?”(调用方是否为 Demo 角色?)的按钮 此时应该显示消息“You ARE in RBSecurityDemoRole”(您属于 RBSecurityDemoRole)。

  4. 通过单击“开始”\“管理工具”\“组件服务”,启动组件服务管理工具(也称为“COM+ 资源管理器”)。通过在左侧 COM+ 资源管理器窗格中展开“组件服务”\“计算机”\“我的电脑”\“COM+ 应用程序”来定位 RBSecDemoSvr COM+ 应用程序。接下来,右击 RBSecDemoSvr 应用程序,然后选择“属性”。这将调用该应用程序的“属性”对话框。单击“安全”选项卡。此处的信息对应于 ApplicationAccessControlAttribute 指定的设置。取消选中“对此应用程序强制进行访问检查”复选框。

    9acz169h.alert_caution(zh-cn,VS.90).gif重要说明:

    此操作将对应用程序中包含的所有组件禁用 COM+ 安全。

    单击“确定”关闭该属性对话框。

  5. 返回到 RBSecDemo 客户端应用程序。单击“Display Logged On User”(显示已登录用户)。此时应该显示消息“Unknown caller (Security is not enabled)”(未知调用方(未启用安全设置))。单击“Is Caller In Demo Role?”(调用方是否为 Demo 角色?)。客户端仍会报告该用户属于 RBSecurityDemoRole,因为当禁用了安全设置时,所有对 IsCallerInRole 的调用都将返回 true。

  6. 返回到 COM+ 资源管理器,然后通过右击该应用程序并选择“属性”,再次调用 RBSecDemoSvr 属性页。单击标记为“安全”的选项卡,然后重新选中“对此应用程序强制进行访问权限检查”复选框。这时将重新对该应用程序启用安全设置。单击“确定”关闭该属性对话框。

  7. 通过展开“RBSecDemoSvr”\“Components”来定位 Microsoft.Samples.Technologies.ComponentServices.RoleBasedSecurity.RBSecurityObject 组件。右击“Microsoft.Samples.Technologies.ComponentServices.RoleBasedSecurity.RBSecurityObject”组件,然后从弹出菜单中选择“属性”。

  8. 单击“安全”选项卡。此处的“授权”设置对应于在示例代码中指定的 ComponentAccessControlAttribute。您应该看到标记为“RBSecurityDemoRole”的角色,它将作为与该组件显式关联的角色列出。使用示例代码中的 SecurityRoleAttribute 创建此角色,并将其绑定到示例组件。单击“确定”关闭该属性对话框。

  9. 在 COM+ 资源管理器中,展开位于 RBSecDemoSvr 应用程序下的“Roles”文件夹。您应在此处看到“RBSecurityDemoRole”。展开 RBSecurityDemoRole\Users。您应在“Users”文件夹中看到单个帐户(“Everyone”)。右击“Everyone”,然后从弹出菜单中选择“删除”。在随后的对话框中确认该删除操作。COM+ 可以缓存与角色相关的安全设置,因此您必须先关闭 RBSecDemoSvr 应用程序,然后才能观察到进行此更改的结果。在 COM+ 资源管理器中,右击该应用程序,然后从弹出菜单中选择“关闭”。

  10. 返回到 RBSecDemo 客户端应用程序。在单击任一按钮时,您应看到报告“访问被拒绝”的 MessageBox。由于组件 RBSecurityDemoRole 不包含当前调用方,所以在对象创建时引发了访问被拒绝的安全异常。

卸载示例

  1. 定位到运行 MsBuild Tool 或在 Visual Studio 中启动 .sln 文件时所在的目录。

  2. 根据所选的编程语言,运行 msbuild RoleBasedSecurityVB.sln /t:Clean 或 msbuild RoleBasedSecurityVB.sln /t:Clean。此操作将使用 /u 开关调用 .NET 服务安装工具 (Regsvcs.exe)全局程序集缓存工具 (Gacutil.exe),以便从 COM+ 目录和全局程序集缓存中移除示例文件。

要求

**平台:**Windows 2000、Windows XP、Windows Server 2003

**.NET Framework 版本:**2.0

备注

有关二进制创建和注册步骤示例的更多信息,请参见源代码中的注释。

示例应用程序检索的信息包括:

  • 是否启用了 COM+ 安全。

  • 当前调用方是否为该示例创建的安全角色成员。

  • 当前调用方的帐户名。

在组件服务管理工具中,该组件显示为 Microsoft.Samples.Technologies.ComponentServices.RoleBasedSecurity.RBSecurityObject。

9acz169h.alert_note(zh-cn,VS.90).gif说明:

在运行该示例之前,您必须运行全局程序集缓存工具 (Gacutil.exe) 将 RBSecDemoSvr.dll 程序集安装到全局程序集缓存中。Gacutil.exe 位于 SDK\<版本>\Bin 目录中。例如,对于 Visual Basic 版本,定位到 C:\Documents and Settings\您的用户名\My Documents\Samples\Technologies\ComponentServices\RoleBasedSecurity\VB\bin 目录并键入 gacutil -i RBSecDemoSvr.dll。

该示例还演示如何启用应用程序级或组件级安全设置以及如何通过属性来创建安全角色。

9acz169h.alert_note(zh-cn,VS.90).gif说明:

在 .NET 中为应用程序开发人员提供了 COM+ 安全互操作性,这些开发人员可能希望将托管扩展写入使用 COM+ 1.0 安全服务的现有应用程序中。.NET Framework 提供其自己的基于角色的安全设置。这两种机制相互独立,在单个应用程序中只需使用其中一种。

请参见

参考

ApplicationAccessControlAttribute

ComponentAccessControlAttribute

ContextUtil

SecurityCallContext

SecurityRoleAttribute

ServicedComponent

System.ComponentModel

System.EnterpriseServices

其他资源

基于角色的安全性