문제

액세스 제어 목록이있는 응용 프로그램에 대한 사용자가 있습니다 (이들은 테이블/스키마/객체입니다). 현재 데이터베이스에서 읽히고 부울 값은보고/조작 할 수있는 내용을 나타내는 데 사용됩니다. 그러나 누구나 여전히 데이터베이스로 가서 데이터를 변경할 수 있습니다. 누군가 내가 어떤 일을 할 수 있는지에 대한 제안을 할 수 있습니까? 사용자 (Uname + Pass) 및 ACL (Empui_Access, Empdat_Manipulate)이 있다는 것이 분명합니다. 코드 등을 통한 모든 보안 솔루션 ...

도움이 되었습니까?

해결책

같은 것

table users
username: string
password_hash: hex
acl: bit array

사용자 이름은 사용자 이름입니다. Password_hash는 소금 한 덩어리가있는 비밀번호의 해시입니다. 일반 암호를 저장하는 것은 잘못되었지만 이미 알고 있지 않습니까?

ACL은 문자열로 선언되지만 비트 어레이로 사용됩니다. 각 비트는 특정 권한을 나타냅니다. 1은 사용자가 허가를 받았음을 의미합니다. 0은 자신이하지 않는 것을 의미합니다. 특정 비트의 값을 확인하려면 약간 과시와 ACL을 수행합니다. 결과가 0이 아닌 경우 액세스가 부여됩니다. 결과가 0 인 경우 액세스가 거부됩니다.

예를 들어:

// permission to read employee data
public const long READ_EMPL_DATA = 0x01

...
{
    User user = database.GetSomeUser();
    // test for READ_EMPL_DATA permission
    if (0 != (user.ACL & READ_EMPL_DATA)) {
        // access granted
    } else {
        // access denied
    }
    // give READ_EMPL_DATA permission
    if (0 != (user.ACL & READ_EMPL_DATA))
        user.ACL = user.ACL & READ_EMPL_DATA
}

그룹 지원을 추가하려면 몇 개의 테이블을 추가하십시오.

table group
groupname: string
acl: bit array

table user_group
user_id: id
group_id: id

또한 사용자 수준 권한을 테스트하는 것 외에도 사용자가 속한 그룹을 테스트하십시오. 물론, 일부 도우미 기능, 저장된 절차 일 수 있습니다.

나는 이것이 당신이 시작되기를 바랍니다. 그렇지 않은 경우,보다 설명적인 예, 또는 더 실제 코드 또는 기타 도움을 줄 수 있습니다.

다른 팁

이것은 postgresql에만 해당되지만 아마도 좋은 아이디어를 얻을 수 있습니다. 베일.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top