많은 다른 유형의 사용 권한을 제공해야하는 다음과 같은 시나리오가 자주 발생합니다. 나는 주로 SQL 서버 2000여러 권한 유형을 처리하는 가장 좋은 방법은 무엇입니까?
시나리오 내가 다른 매개 변수에 사용할 수 있습니다 동적 권한 시스템을 제공 할
와 ASP.NET/VB.NET을 사용합니다. 부서 또는 특정 사람에게 응용 프로그램에 대한 액세스 권한을 부여하려고한다고 가정 해 봅시다. 그리고 우리가 계속 성장하는 수많은 응용 프로그램을 가지고 있다고 가정하십시오.
과거에 저는 이것을하기 위해 다음 두 가지 방법 중 하나를 선택했습니다.
1) 매개 변수를 적용하는 방법을 결정하는 데 사용되는 특수 열이있는 단일 사용 권한 테이블을 사용하십시오. 이 예의 특수 열은 TypeID 및 TypeAuxID입니다. SQL은 다음과 같이 보입니다.
SELECT COUNT(PermissionID)
FROM application_permissions
WHERE
(TypeID = 1 AND TypeAuxID = @UserID) OR
(TypeID = 2 AND TypeAuxID = @DepartmentID)
AND ApplicationID = 1
2)를 모두 함께 참여, 각 권한 유형에 대한 매핑 테이블을 사용합니다.
SELECT COUNT(perm.PermissionID)
FROM application_permissions perm
LEFT JOIN application_UserPermissions emp
ON perm.ApplicationID = emp.ApplicationID
LEFT JOIN application_DepartmentPermissions dept
ON perm.ApplicationID = dept.ApplicationID
WHERE [email protected]
AND ([email protected] OR [email protected] OR
(emp.UserID IS NULL AND dept.DeptID IS NULL)) AND ApplicationID = 1
ORDER BY q.QID ASC
내 생각
내가 예제 이해가 있기를 바랍니다. 나는 그들을 함께 자갈을했다.
첫 번째 예제는 작업량이 적지 만 어느 쪽도 최상의 대답이라고 생각하지 않습니다. 이 문제를 해결할 더 좋은 방법이 있습니까?
이 접근법에서 발견 한 문제는이 접근법을 사용하여 역할이 부족 해지는 것이 쉽다는 것입니다. 당신이 볼 수 있듯이, 6 개의 역할은 2^6 = 64의 가치를 가지며, 31 개의 역할은 2^31 = 2,147,483,647이며, 이는 최대 int 값입니다. 따라서 T-SQL에서 사용할 수있는 가장 큰 데이터 유형은 bigint입니다 (2^63). 물론 varchar 유형을 사용할 수 있지만 많은 역할을 할 때 John Downey의 솔루션을 사용하는 것을 선호합니다. –