데이터베이스의 액세스 제어 목록에 대한 보안 설계 제안?
-
05-09-2019 - |
문제
액세스 제어 목록이있는 응용 프로그램에 대한 사용자가 있습니다 (이들은 테이블/스키마/객체입니다). 현재 데이터베이스에서 읽히고 부울 값은보고/조작 할 수있는 내용을 나타내는 데 사용됩니다. 그러나 누구나 여전히 데이터베이스로 가서 데이터를 변경할 수 있습니다. 누군가 내가 어떤 일을 할 수 있는지에 대한 제안을 할 수 있습니까? 사용자 (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에만 해당되지만 아마도 좋은 아이디어를 얻을 수 있습니다. 베일.