복붙노트

[SQL] 웹 애플리케이션에 대한 SQL 서버의 사용자 / 역할에 대한 모범 사례

SQL

웹 애플리케이션에 대한 SQL 서버의 사용자 / 역할에 대한 모범 사례

나는 온라인으로 조금 검색 정말 자리를 못을 박았다 방법 또는 데이터베이스에서 사용자 / 역할 설정에 대한 이동하는 기지를 덮여 아무것도 찾을 수 없습니다.

기본적으로, (A (삭제, 선택, 삽입, 업데이트) 일반 데이터베이스 작업에 대한 데이터베이스에 대한 액세스 권한이 필요합니다 응용 프로그램 (이 경우 웹 응용 프로그램)에서 데이터베이스에 액세스하는 데 사용되는 사용자와 실행 저장 프로 시저가있을 것입니다 ) 다른 저장 프로 시저 / UDF의 내 저장 프로 시저를 실행하는 간부와.

그런 다음, 우리는 또한 주요 관리 될 사용자를 것이다 (이것은 간단한 충분하다).

나는 현재 우리가 정말 (이 인트라넷 응용 프로그램입니다하지만 응용 프로그램이 db_owner 역할이있는 사용자를 사용) 제 생각에 너무 잘 보안을 관리하지 않는 개발 환경을 가지고있다. 이 인트라넷 응용 프로그램입니다하더라도, 우리는 여전히 보안을 염두에 있고 이러한 유형의 환경에 대한 사용자 / 역할을 설정하는 방법 개발자의 일부를 어떤보고 싶습니다.

편집 : 별도의 시스템에 웹 응용 프로그램과 SQL 서버 상주합니다.

편집 : ORM 직접 읽기 / 쓰기 액세스를 필요가 사용된다는 것을 언급하는 것을 잊었다.

질문: 응용 프로그램 액세스에 대한 사용자 설정의 "모범 사례"는 무엇입니까? 어떤 역할을 적용 할과 어획량의 일부를 무엇입니까?

해결법

  1. ==============================

    1.첫째, 데이터베이스 역할의 권한을 캡슐화보다는 단일 사용자 주체에 첨부하는 경향이있다. 큰 승리는 여기 그래서 당신은 완전히 스크립트 보안이 다음에 "사용자를 추가하고이 역할에 추가하여"배치 유형을 알 수 있습니다 그들은 SQL 권한 boogeymen 싸우는되지 않습니다 역할이 데이터베이스의 일부입니다. 당신이 연주처럼뿐만 아니라 연습과 일반적으로 어떤 문제를 방지 - 또한,이 것들을 당신이 대한 db_owner 모드 개발을 방지하고 더 나은 자신에 대해 많이 느낄 수있는 깨끗하고 충분히 유지합니다.

    첫째, 데이터베이스 역할의 권한을 캡슐화보다는 단일 사용자 주체에 첨부하는 경향이있다. 큰 승리는 여기 그래서 당신은 완전히 스크립트 보안이 다음에 "사용자를 추가하고이 역할에 추가하여"배치 유형을 알 수 있습니다 그들은 SQL 권한 boogeymen 싸우는되지 않습니다 역할이 데이터베이스의 일부입니다. 당신이 연주처럼뿐만 아니라 연습과 일반적으로 어떤 문제를 방지 - 또한,이 것들을 당신이 대한 db_owner 모드 개발을 방지하고 더 나은 자신에 대해 많이 느낄 수있는 깨끗하고 충분히 유지합니다.

    한으로 ORMs를 사용하여 응용 프로그램을 통해 보안을 처리 특히 한, 그 역할에 대한 권한을 적용, 나는이 요즘 더 넓은 그물을 던져하는 경향이있다. T-SQL의 관점에서, 그것은 다음과 같습니다 :

    GRANT SELECT, UPDATE, INSERT, DELETE, EXECUTE on SCHEMA::DBO to [My DB Role]
    

    이것은 처음에는 조금 무서운 보일 수도 있지만, 정말 아니다 - 그 역할은 데이터를 조작 이외의 아무것도 할 수 없습니다. 테이블이나 절차를 추가하는 등의 - - 그래서 당신이 그 스키마 내에 남아 더 이상 보안 작업이 필요없는 등 다른 큰 장점 확장 발동 또는 시스템 발동 또는 부여 사용자 액세스에 대한 액세스는 스키마를 변경하는 것이 없다.

    SQL 2005 + 개체의 보안 그룹에 데이터베이스 스키마를 사용하는 것입니다에 대한 또 다른 것은 고려합니다. 이제, 여기에 큰 트릭은 많은으로 ORMs 및 마이그레이션 도구는 그들처럼하지 않는 것입니다,하지만 당신은 응용 프로그램에 기본 스키마 [DBO] 렌더링, 당신은 특별한 보안 물건에 대한 대안 스키마를 사용할 수 있습니다. 예는 - 수동으로 관리자로 실행해야합니다 특별 잔인한 데이터베이스 정리 절차에 대한 ADMIN 스키마를 만들 수 있습니다. 아니면 특별한 심지어 별도의 스키마가 높은 응용 프로그램의 일부를 확보 요구에보다 세분화 된 DB 권한이.

    한, 심지어는 (통합 인증은 SQL Server의 측면에서) Windows 인증을 사용할 수있는 도메인 않고, 별도의 상자를 가진 사용자에 배선있다. 그냥 두 상자에 동일한 자격 증명 (사용자 / 패스 콤보)이있는 사용자를 확인합니다. 설정 앱 도메인은 웹 상자와 설정은 SQL 상자와 이익에 그 교장의 지원은 SQL Server 사용자에 해당 사용자로 실행합니다. 즉, 배포 유형은 SQL 사용자를 생성하고 필요에 따라 연결 문자열을 수정 처리 할 수 ​​있어야로이 결정에서 데이터베이스 역할을 할 수있는 거의 이혼을 사용했다.

  2. ==============================

    2.오랜 시간 동안 데이터베이스에 대한 애플리케이션 액세스를 위해 SQL 서버 지침은 스키마에 저장 프로 시저, 그룹 절차로 데이터를 분리 접근했다 및 응용 프로그램에서 사용하는 교장 스키마에서 실행 부여합니다. 소유권 체인은 프로 시저 호출자에게 데이터 액세스를 보장 할 것입니다. 액세스는 저장 프로 시저를 검사하여 검토 할 수 있습니다. 이 설계, 구축 및 관리, 이해하기 쉽게 간단한 모델이다. 저장 프로 시저 캔의 활용 코드 서명, 가장 세부 및 강력한 액세스 제어 방법 및 (서명 절차가 변경되면 손실) 변조 분명 단 하나의 사용.

    오랜 시간 동안 데이터베이스에 대한 애플리케이션 액세스를 위해 SQL 서버 지침은 스키마에 저장 프로 시저, 그룹 절차로 데이터를 분리 접근했다 및 응용 프로그램에서 사용하는 교장 스키마에서 실행 부여합니다. 소유권 체인은 프로 시저 호출자에게 데이터 액세스를 보장 할 것입니다. 액세스는 저장 프로 시저를 검사하여 검토 할 수 있습니다. 이 설계, 구축 및 관리, 이해하기 쉽게 간단한 모델이다. 저장 프로 시저 캔의 활용 코드 서명, 가장 세부 및 강력한 액세스 제어 방법 및 (서명 절차가 변경되면 손실) 변조 분명 단 하나의 사용.

    문제는 비주얼 스튜디오에서 밖으로 오는 기술의 모든 비트는이 권고의 얼굴에 파리를 디자이너이다. 개발자는 단지 어려운 저장 프로 시저를 독점적으로 사용하는 모델되게됩니다. 개발자는 먼저 자신의 클래스 모델을 설계하고 논리적 모델에서 테이블 구조를 생성하기 위해 사랑 해요. 응용 프로그램의 첫 번째 줄에 기록되기 전에 먼저 존재하고,이 때문에 현대 개발의 반복적 인 방식으로 개발에 실제로 문제가되는 절차를 기반으로 지침의 절차를 reuire. 이 한 팀 리더십 문제와 주소를 알고있는 한, 해결 못하는되지 않습니다 (예. 심지어 망신 시켰습니다, dev에 사이클을 시작으로, 절차를 준비).

  3. ==============================

    3.웹 응용 프로그램을 사용하는 사용자 'WEBUSER'를 만듭니다.

    웹 응용 프로그램을 사용하는 사용자 'WEBUSER'를 만듭니다.

    만 PROC이 사용자에게 실행 권한을 저장 부여합니다. 허용하지 않는 직접 테이블은 읽기 / 쓰기를. 당신이 테이블에서 뭔가를 읽어해야하는 경우, 발동 물품. 당신이 쓰기 데이터가 필요한 경우, 다른 시저를 작성합니다.

    이 방법의 모든 것이 좋은 간단한 유지됩니다. 단지 관련 권한을 가진 하나의 응용 프로그램 사용자. 보안이 손상되면, 모든 할 수있는 침입자가 발동 실행됩니다.

  4. from https://stackoverflow.com/questions/1395278/best-practice-on-users-roles-on-sql-server-for-a-web-application by cc-by-sa and MIT license