2011-04-26 4 views
1

데이터베이스의 로그인을 만들려고하는데 Microsoft의 방법을 사용하고 싶지 않습니다. 사용자 이름과 비밀번호로 로그인 한 다음 "tblUsers"테이블에서 해당 정보를 확인하도록하고 싶습니다.암호는 MS Access 2003에서 양식을 보호합니다.

UserID LoginID Level LevelID 
jpurk jack23  admin 3 
krimes kitty  editor 2 
lwalms low34  reader 1 

내가 멀리 "사용자 ID"와 "은 loginid"를 확인하는 등의

Nz(DLookup("[LoginID]", "tblUsers", "[UserID] = '" & Me.txtUserID & "'"), "") 
=Me.txtPassword 

내가 지금 가지고있는 문제를을 DLookup 사용되었다하는 것은 내가 적절한없이 사용자가 사용할 수 메뉴에서 특정 항목을 원하는 것입니다 수평; 그들은 단지 "편집자"또는 "독자"일 뿐인데, 나는 그들이 모든 관리 양식을 배치 한 "관리"버튼에 대한 액세스 권한을 갖길 원하지 않습니다.

dLookup을 사용하여 사용자 이름과 암호를 확인한 후에 어떻게 "레벨"을 찾고 다른 메뉴 항목에 권한을 할당합니까? 고맙습니다.

+1

당신은 이것이 의미있는 보안 수단으로 쓸모 없다는 것을 알고 있습니다. 필자의 견해로는 이런 식으로 사용자를 속이는 것은 매우 잘못입니다. 순진한 사용자에게 시스템이 그렇지 않을 때 시스템이 "안전"하다는 착각을 불러 일으 킵니다. – sqlvogel

답변

2

DLookup에서 기존 LoginID 값을 찾으면 다른 사용자를 사용하여 해당 사용자의 LevelID를 검색 할 수 있습니다. 그런 다음 해당 LevelID를 기반으로 관리 명령 단추를 활성화/비활성화합니다.

나는 양식로드에서 같은 것을 제안합니다 :

Dim lngLevelID As Long 
lngLevelID = DLookup("[LevelID]", "tblUsers", "[LoginID] = " & Me.txtLoginID) 
Me.cmdAdmin.Enabled = (lngLevelID = 3) 

참고 : 그 이전에 txtLoginID라는 텍스트 상자에 사용자의은 loginid 번호를로드 한 가정합니다. txtLoginID는 사용자가 볼 수 없도록 숨길 수 있습니다. 또는 다른 방법으로 LoginID 값을 가져올 수도 있습니다.

Level과 LevelID가 일대일로 일치하는 경우 tblUsers에 두 값을 모두 저장하지 않아도됩니다. UserLevels 조회 테이블을 만들어 둘 다 보유하고 Level1 만 tblUsers에 UserLevels의 적절한 행에 대한 외래 키로 저장할 수 있습니다.

마지막으로 사용중인 전략은 효과가 있지만 보안은 불안정합니다. 기꺼이 규칙을 따르는 사용자에게 "지침"으로, 괜찮습니다. 그러나 단순한 사용자조차도 쉽게 피할 수 있습니다. 보안 요구가 엄격한 경우 다른 접근 방식을 찾으십시오.

+0

감사합니다. HansUp; 당신은 놀라운 교사입니다! 나는 당신의 코드를 시험해 보았지만 효과가 있었지만 내 데이터베이스가 안전하지 않다는 것을 가르쳐 주었고 이제는 msaccess 사용자 레벨 보안 마법사를 사용하여 데이터베이스를보다 안전하게 만드는 방법에 대해 더 배우려하고 있습니다. 고맙습니다! – jen

+0

@jen 관대 한 의견에 감사드립니다. ULS는 "코드 직접"양식 기능보다 우수한 보안 옵션을 제공합니다. 그러나 올바르게 설정하는 것은 어려울 수 있으며 여전히 쉽게 무너질 수 있습니다. 보안 요구 사항에 따라 문제가되지 않을 수도 있습니다. 그러나 그러한 요구가 충분히 엄격한 경우 (예 : "방탄해야 함"과 같이) 액세스를 엔터프라이즈 급 관계형 데이터베이스 관리 시스템에 저장된 데이터의 프론트 엔드로 사용하는 것을 고려하십시오. SQL Server는 종종 Access에서 사용하도록 권장됩니다. 다른 선택들도 많이 있습니다. – HansUp

관련 문제