무거운 개발 작업 사이에서 무언가를 배우는 데 시간이 걸리기 쉽습니다. 컴퓨터에 System.Security 콘텐츠의 몇 가지 예가 있다는 것을 알았습니다. 이전에 이 네임스페이스를 사용한 적이 없어서 이에 대해 알아보기 위해 사용했습니다. 체계적인 연구가 아니기 때문에 정리하기가 쉽지 않습니다. 생각해 본 후 예를 들어 설명하겠습니다.
1. 권한 설정
1[FileIOPermission(SecurityAction.Demand, Write= "C:\temp.txt")]
2공용 클래스 앱: System.Windows.Forms.Form
3{
4 //생략됨
5}
FileIOPermissionAttribute는 System.Security.Permissions에 정의되어 있습니다. SecurityAttribute에서 상속됩니다. 이 예제에서는 App 클래스를 사용할 때 C:temp.txt 파일에 대한 쓰기 권한이 필요합니다.
.net 프레임워크 문서에는 보안 요구 사항에 대해 다음과 같이 설명되어 있습니다. "특정 권한이 부여된 호출자만 코드를 호출할 수 있도록 하려면 코드 호출자에게 특정 권한 또는 권한 집합이 있음을 선언하거나 적용할 수 있습니다. 요구 사항으로 인해 보안 검사를 수행하여 호출 코드에 제한을 적용합니다. 보안 검사 중에 런타임은 호출 스택을 살펴보고 스택에 있는 각 호출자의 권한을 확인하고 요청된 권한이 부여되었는지 여부를 결정합니다. 호출자에게 필요한 권한이 없는 것으로 확인되면 보안 검사가 실패하고
이 예에서는 권한이 선언됩니다. SecurityAction.Demand는 클래스 또는 메서드에 대해 작동할 수 있으며, 이 경우 클래스에 대해 작동합니다. 쓰기는 FileIOPermission의 속성 중 하나입니다. 일반적으로 사용되는 다른 속성으로는 Read, Append, All 등이 있습니다.
또한 어셈블리에 적용되는 SecurityAction 열거형에는 몇 가지 값이 있습니다. 예를 들어 다음 예는 다음과 같습니다.
[어셈블리:SecurityPermission(SecurityAction.RequestMinimum,UnmanagedCode=true)]
SecurityAction.RequestMinimum은 요청을 실행하기 위한 최소 권한입니다. 이 줄을 사용하려면 어셈블리에서 비관리 코드 호출을 허용해야 합니다.
선언적 방식 외에 필수 방식도 사용할 수 있습니다. 다음 코드:
1FileIOPermission filePerm = new FileIOPermission(FileIOPermissionAccess.AllAccess, "C:\temp.txt");
2번 시도
3{
4 파일Perm.Demand();
5
6 // 파일에 액세스하는 코드가 여기에 들어갑니다.
7}
8catch(보안예외 제외)
9{
10 MessageBox.Show(메시지 제외);
11 반환;
12}
13
2. 사용자 역할 관리
사용자 및 해당 역할 관리는 많은 프로그램에서 사용됩니다. 요즘 asp.net 2.0은 이러한 측면을 크게 향상시켰으며 개발자는 기술에 대해 많이 알지 못해도 아주 좋은 응용 프로그램을 만들 수 있습니다. 그러나 Windows Form 응용 프로그램의 경우 여전히 프로그래머가 직접 설정해야 하는 위치가 많습니다.
userName과 이것이 속한 역할을 이미 알고 있다고 가정하면 다음과 같이 현재 스레드의 주체를 설정할 수 있습니다.
1GenericIdentity genIdent = new GenericIdentity(userName);
2GenericPrincipal genPrin = new GenericPrincipal(genIdent, 역할);
3Thread.CurrentPrincipal = genPrin;
4
그런 다음 사용자 역할을 확인하는 세 가지 방법이 있습니다.
첫 번째 방법은 GenericPrincipal.IsInRole 메서드를 사용하는 것입니다.
1GenericPrincipal currentPrin = Thread.CurrentPrincipal as GenericPrincipal;
2
3if (currentPrin != null && currentPrin.IsInRole("관리자"))
4{
5 //생략됨
6}
7
두 번째 방법은 권한 설정의 필수 방법과 유사한 PrincipalPermission 클래스를 사용하는 것입니다.
1PrincipalPermission prinPerm = new PrincipalPermission(null, "Manager");
2
3번 시도
4{
5 prinPerm.Demand();
6
7 //뭔가를 해라
8}
9캐치
10{
11 //오류 처리
12}
세 번째 방법은 권한 설정의 선언 방법과 유사합니다:
1private void DecPermButton_Click(object sender, System.EventArgs e)
2{
3번 시도
4 {
5 수행관리자액션();
6 // 뭔가를 해라
7}
8 캐치
9 {
10 // 오류 처리
11 }
12}
13
14[PrincipalPermission(SecurityAction.Demand, Role="관리자")]
15performManagerAction()을 무효로 합니다.
16{
17}
보안에 있어 또 다른 중요한 점은 암호화입니다. 오늘은 글을 쓸 시간이 없으니 다른 날에 이야기하겠습니다.