Симон Робинсон - C# для профессионалов. Том II
- Название:C# для профессионалов. Том II
- Автор:
- Жанр:
- Издательство:Лори
- Год:2003
- Город:Москва
- ISBN:5-85582-187-0
- Рейтинг:
- Избранное:Добавить в избранное
-
Отзывы:
-
Ваша оценка:
Симон Робинсон - C# для профессионалов. Том II краткое содержание
Платформа .NET предлагает новую среду, в которой можно разрабатывать практически любое приложение, действующее под управлением Windows, а язык C# — новый язык программирования, созданный специально для работы с .NET.
В этой книге представлены все основные концепции языка C# и платформы .NET. Полностью описывается синтаксис C#, приводятся примеры построения различных типов приложений с использованием C# — создание приложений и служб Windows, приложений и служб WWW при помощи ASP.NET, а также элементов управления Windows и WWW Рассматриваются общие библиотеки классов .NET, в частности, доступ к данным с помощью ADO.NET и доступ к службе Active Directory с применением классов DirectoryServices.
Для кого предназначена эта книгаЭта книга предназначена для опытных разработчиков, возможно, имеющих опыт программирования на VB, C++ или Java, но не использовавших ранее в своей работе язык C# и платформу .NET. Программистам, применяющим современные технологии, книга даст полное представление о том, как писать программы на C# для платформы .NET.
Основные темы книги• Все особенности языка C#
• C# и объектно-ориентированное программирование
• Приложения и службы Windows
• Создание web-страниц и web-служб с помощью ASP NET
• Сборки .NET
• Доступ к данным при помощи ADO NET
• Создание распределённых приложений с помощью NET Remoting
• Интеграция с COM, COM+ и службой Active Directory
C# для профессионалов. Том II - читать онлайн бесплатно полную версию (весь текст целиком)
Интервал:
Закладка:
Для работы с группами кода и полномочиями на уровнях пользователя или предприятия с помощью caspol.exe
добавьте либо аргумент enterprise
, либо аргумент user
, чтобы изменить режим команды, caspol.exe
работает по умолчанию на уровне Machine
; таким образом эта утилита до сих пор и использовалась. Просмотрим группы кода, перечисленные на уровне User
:
caspol.exe -user -listgroups
Так выглядит вывод команды при установке по умолчанию:
Security is ON
Execution checking is ON
Policy change prompt is ON
Level = User
Code Groups:
1. All code: FullTrust
Success
Теперь выполним ту же самую команду, но в этот раз, чтобы увидеть группы кода на уровне Enterprise
:
caspol.exe -enterprise -listgroups
Вывод команды выглядит так:
Security is ON
Execution checking is ON
Policy change prompt is ON
Level = Enterprise
Code Groups:
1. All code: FullTrust
Success
Как можно видеть, по умолчанию оба уровня, User
и Enterprise
, конфигурируются с предоставлением FullTrust
для единственной группы кода All Code
. В результате этого настройка по умолчанию для системы безопасности .NET не налагает никаких ограничений на уровне пользователя или предприятия, и реализованная политика диктуется исключительно политикой уровня машины. Например, если требуется применить более строгое полномочие или множество полномочий к уровню пользователя или предприятия, эти ограничения будут налагаться на все полномочия и, возможно, переопределять права на уровне машины. Действующие полномочия являются пересечением, поэтому, например, если необходимо применить FullTrust
к группе кода, это полномочие должно быть присвоено группе кода на каждом из трех уровней политики.
При выполнении caspol.exe
администратором по умолчанию используется уровень машины, но если выйти из системы и зарегистрироваться как пользователь, который не принадлежит группе пользователей Administrator
, caspol.exe
выберет по умолчанию уровень пользователя. Кроме того, caspol.exe
не позволит изменить политику безопасности таким образом, чтобы сделать саму утилиту caspol.exe
неработоспособной.
Теперь мы получили общее представление об архитектуре безопасности в .NET и можем перейти к обсуждению, как получить доступ к ее свойствам программным путем.
Поддержка безопасности в .NET
Чтобы система безопасности .NET работала, программистам необходимо доверить CLR обеспечение политики безопасности. Как это сделать? Когда вызывается метод, требующий специальных полномочий (например, доступ к файлу на локальном диске), CLR будет просматривать стек с целью гарантии того, что участник цепочки вызовов имеет требуемые права.
Слово 'производительность' уже, вероятно, обеспокоило вас в данный момент, и понятно, что ее повышение — это проблема, но чтобы получить преимущества управляемой среды .NET, приходится платить за безопасность. Иначе сборки, не являющиеся полностью надежны ни, могли бы делать обращения к надежным сборкам и система была бы открыта для атаки.
Для справки, наиболее применимыми в этой главе частями библиотеки .NET Framework являются:
□ System.Security.Permissions
□ System.Security.Policy
□ System.Security.Principal
Отметим, что система безопасности доступа к коду на основе свидетельства работает в паре с системой безопасности регистрации в Windows. Если вы захотите выполнить приложение для настольного компьютера .NET, то ему должны быть предоставлены соответствующие полномочия системы безопасности доступа к коду .NET, но регистрирующийся пользователь должен также работать под учетной записью Windows, которая имеет соответствующие права для выполнения кода. В применении к настольным приложениям это означает, что текущему пользователю должны быть предоставлены соответствующие права для доступа к соответствующим файлам сборки на диске. Для приложений Интернета учетная запись, с которой работает Информационный сервер Интернет, должна иметь доступ к файлам сборки.
Требуемые полномочия
Создадим приложение Windows Forms с кнопкой, которая при нажатии будет выполнять действие, обращающееся к диску. Предположим, что если приложение не имеет подходящего полномочия для доступа к локальному диску ( FileIOPermission
), кнопка будет помечаться как недоступная (серым цветом).
В следующем коде представлен конструктор формы, который создает объект FileIOPermission
, вызывает его метод Demand()
и затем обрабатывают результат:
using System;
using System.Drawing;
using System.Collections;
using System.ComponentModel;
using System.Windows.Forms;
using System.Data;
using System.Security;
using System.Security.Permissions;
namespace SecurityApp4 {
public class Form1 : System.Windows.Forms.Form {
private System.Windows.Forms.Button button1;
private System.ComponentModel.Container components;
public Form1() {
InitializeComponent();
try {
FileIOPermission fileioperm = new
FileIOPermission(FileIOPermissionAccess.AllAccess, @"C:\");
fileioperm.Demand();
} catch {
button1.Enabled = false;
}
}
public override void Dispose() {
base.Dispose();
if(component != null) components.Dispose();
}
#region Windows Form Designer generated code
///
/// Требуемый метод для поддержки конструктора — не изменяйте
/// содержимое этого метода с помощью редактора кода.
///
private void InitializeComponent() {
this.button1 = new System.Windows.Forms.Button();
this.SuspendLayout();
//
// button1
//
this.button1.Location = new System.Drawing.Point(48, 104);
this.button1.Name = "button1";
this.button1.Size = new System.Drawing.Size(192, 23);
this.button1.TabIndex = 0;
this.button1.Text = "Button Requires FileIOPermission";
//
// Form1
//
this.AutoScaleBaseSize = new System.Drawing.Size(5, 13);
this.ClientSize = new System.Drawing.Size(292, 273);
this.Controls.AddRange(new System.Windows.Forms.Control[] {this.button1});
this.Name = "Form1";
this.Text = "Form1";
this.ResumeLayout(false);
}
#endregion
///
/// Основная точка входа для приложения.
///
[STAThread]
static void Main() {
Application.Run(new Form1());
}
}
}
Можно заметить, что FileIOPermission
содержится в пространстве имен System.Security.Permissions
, которое имеет все множество полномочий, а также предоставляет классы для декларативных атрибутов полномочий и перечисления параметров, используемых при создании объектов прав (например, при создании FileIOPermission
, определяющего, нужен нам полный доступ или только для чтения).
При выполнении приложения с локального диска, где используемая по умолчанию политика безопасности разрешает доступ к локальной памяти, приложение будет выглядеть следующим образом:
Читать дальшеИнтервал:
Закладка: