문제

저는 PHP와 MySQL을 사용하여 웹 애플리케이션을 만드는 팀의 일원입니다.애플리케이션에는 서로 다른 역할을 가진 여러 사용자가 있습니다.애플리케이션은 지리적으로 분산된 방식으로도 사용됩니다.

따라서 특정 데이터베이스 레코드에 대한 사용자 권한을 제어하는 ​​액세스 제어 시스템을 만들어야 합니다.특정 레코드만 표시되도록 데이터베이스 쿼리를 수정합니다.예를 들어, 도시 수준 사용자의 경우 사용자의 특정 도시와 관련된 레코드만 표시되어야 하고, 국가 수준 사용자의 경우 해당 국가의 모든 도시에 대한 레코드가 표시되어야 합니다.

SQL 쿼리의 정보를 하드코딩하지 않고 이러한 유형의 정보 검색을 처리할 수 있는 시스템을 설계하는 데 도움이 필요합니다.

어떤 도움이라도 주시면 감사하겠습니다.

미리 감사드립니다

도움이 되었습니까?

해결책

애플리케이션의 디자인은 필요한 보안 요구 사항에 따라 달라집니다.

예를 들어 정보가 여러 데이터베이스에 저장되어 있습니까, 아니면 단일 데이터베이스에 저장되어 있습니까?각 유형의 사용자에게 특정 권한을 나타내는 데이터베이스 스키마를 제공하는 것이 중요합니까?분명히 이러한 질문에 대한 대답은 데이터베이스 액세스를 위해 보다 안전한 시스템이 필요한지 여부를 암시합니다.

그렇게 하려면 시스템에 존재할 각 사용자 유형에 대해 데이터베이스 사용자를 생성하십시오.각 사용자에게 적절한 테이블, 뷰, 프로시저 등에 대한 권한을 제공합니다.사용자가 시스템에 인증되면 해당 사용자의 사용자 유형을 기반으로 조건부 데이터베이스 연결을 생성해야 합니다.

가장 극단적인 방법을 택하려면 저장 프로시저를 통해 엄격하게 데이터베이스에 대한 액세스를 제어하는 ​​것이 적절할 수도 있습니다.그러면 각 데이터베이스 사용자는 필요한 저장 프로시저 세트에만 액세스할 수 있습니다.

데이터베이스에 보안을 구현하는 것은 어려울 수 있으며 애플리케이션의 복잡성과 유지 관리 비용을 증가시키고 애플리케이션 IMO의 전반적인 응집력을 감소시키지만 해킹이나 기타 방법을 원하는 모든 사람에게 매우 엄격한 보안 장벽을 제공합니다. 시스템을 남용합니다.

보안 목적으로 데이터베이스 내에서 무엇을 구현하든 관계없이 현재 인증된 사용자와 해당 유형을 저장하려면 세션 메커니즘을 사용해야 합니다.특정 사용자에 대한 기능을 변경하는 쉬운 방법은 각 사용자가 사용할 수 있는 작업(함수 또는 메서드 읽기)과 해당 속성(또는 속성)을 클래스 내에 캡슐화하여 특정 사용자를 나타내는 것입니다.이렇게 하면 두 사람이 Dashboard.php에 접속하면 그들이 액세스할 수 있는 데이터를 정확하게 볼 수 있습니다.

마지막으로, 정보를 확인해야 하는 도시나 감독하는 사용자와 같이 데이터베이스에 사용자에 대해 저장된 정보를 통해 일부 액세스 제어를 제어할 수 있습니다.그런 다음 해당 정보를 사용하여 사용자별 도메인 개체에서 액세스할 수 있는 개체 컬렉션을 만듭니다.

다른 팁

사용자가 데이터베이스 엔진에 직접 액세스할 수 있나요?가능하다면 피하세요.

전체 애플리케이션에 필요한 권한만 제공하는 전용 사용자 계정을 사용하여 애플리케이션을 데이터베이스에 연결합니다.애플리케이션에서 정의한 사용자 및 역할과 간단한 사용자 정의 API를 기반으로 나머지 보안을 애플리케이션 내부에서 수행합니다.

이러한 사용자가 여러 애플리케이션에 액세스하고 사용해야 하는 경우 사용자를 별도의 공유 데이터베이스에 저장하고 애플리케이션이 공유 사용자 정의 API를 사용하여 이를 참조하도록 하는 것이 좋습니다.

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