이 검사 목록을 사용하면 조직 내 데이터 액세스 제한 방법을 검토할 수 있습니다. 이 검사 목록을 사용하여 사용자가 SQL Server 데이터베이스 엔진에 저장된 정보에 액세스하는 방법을 정기적으로 감사하십시오.
SQL Server 인스턴스에 액세스
이 항목은 데이터베이스 엔진의 전체 인스턴스와 관련이 있습니다.
|
- Windows 그룹을 통해 대부분의 로그인에 액세스 권한을 부여했습니까?
팁 Windows 그룹을 사용하여 데이터베이스 엔진에 대한 액세스 권한을 구성하면 액세스 권한을 쉽게 유지 관리할 수 있습니다. 로그인에 대한 자세한 내용은 보안 주체(데이터베이스 엔진)를 참조하십시오.
|
|
- 데이터베이스 엔진에서 불필요하거나 사용되지 않는 로그인을 제거했습니까?
팁 이 항목은 정기적으로 직접 검토해야 합니다. 주로 Windows 그룹을 통해 액세스 권한을 부여하면 이러한 태스크를 쉽게 수행할 수 있습니다.
|
|
- 최소 권한의 원칙을 구현했습니까?
팁 보안 주체(로그인, 사용자 및 역할)에 대해서는 작업을 수행하기 위해 액세스해야만 하는 데이터베이스에 대한 사용 권한만 부여되어야 합니다. 일반 사용자가 sa 같은 관리자 계정을 사용하여 접속하지 않도록 하십시오. 또한 웹 페이지, 사용자 지정 응용 프로그램 또는 SSIS 패키지에서 관리자 계정을 사용하여 접속하지 않도록 하십시오.
|
|
- 추가 사용 권한을 부여하지 않고 시스템 메타데이터를 보기 위해 개체, 스키마, 데이터베이스 또는 서버 수준에서 VIEW DEFINITION 권한을 선택적으로 부여했습니까?
팁 자세한 내용은 GRANT(Transact-SQL)를 참조하십시오.
|
|
- 원격 서버를 연결된 서버로 대체했습니까?
팁 자세한 내용은 원격 서버 구성 및 서버 연결을 참조하십시오.
|
|
- 연결된 서버에 대한 통과 인증이 필요할 경우 제한된 위임을 구현했습니까?
팁 자세한 내용은 sp_addlinkedsrvlogin(Transact-SQL)을 참조하십시오.
|
|
- 필요한 경우를 제외하고 서버를 통한 임시 쿼리를 사용하지 않도록 설정했습니까?
팁 자세한 내용은 Ad Hoc Distributed Queries 옵션을 참조하십시오.
|
사용자 ID 관리
다음 항목은 각 데이터베이스의 설정과 관련이 있습니다.
|
- 익명 사용자에게 필요한 경우를 제외하고 guest 사용자 계정을 사용하지 않도록 설정했습니까?
팁 SQL Server Management Studio 또는 Transact-SQL을 사용하여 계정을 사용하지 않도록 설정하십시오.
|
|
- 사용자가 필요한 데이터베이스에 대한 액세스 권한만 가지고 있습니까?
팁 이 항목은 정기적으로 직접 검토해야 합니다. 주로 SQL Server 역할을 통해 액세스 권한을 부여하면 이러한 태스크를 쉽게 수행할 수 있습니다. 자세한 내용은 서버 수준 역할을 참조하십시오.
|
|
- 대부분의 사용자에게 SQL Server 역할을 통해 액세스 권한을 부여했습니까?
팁 서버 및 데이터베이스 역할을 사용하여 액세스 권한을 구성하면 액세스 권한을 쉽게 유지 관리할 수 있습니다. 역할에 대한 자세한 내용은 데이터베이스 수준 역할을 참조하십시오.
|
|
- SQL Server 에이전트 서비스 계정의 권한을 조정하는 대신 SQL Server 에이전트가 자격 증명을 사용하여 특정 권한이 필요한 작업 단계를 실행합니까?
팁 자세한 내용은 자격 증명(데이터베이스 엔진)을 참조하십시오.
|
|
- SQL Server 에이전트 사용자가 다른 Windows 자격 증명이 필요한 작업을 실행해야 할 경우 해당 사용자에게 태스크를 수행하는 데 충분한 권한이 있는 프록시 계정을 할당했습니까?
팁 자세한 내용은 방법: 프록시 만들기(SQL Server Management Studio)를 참조하십시오.
|
|
- 저장 프로시저, 함수, 트리거 또는 어셈블리와 같은 모듈 내의 데이터베이스 개체에 대한 액세스 권한을 캡슐화했습니까?
팁: 미리 정의된 모듈에 대한 액세스를 제한하면 악의적 사용자가 임의의 코드를 실행하는 것을 어렵게 만들 수 있습니다. 자세한 내용은 저장 프로시저 이해를 참조하십시오.
|
|
- 모듈에 기본 컨텍스트를 사용하는 대신 실행 컨텍스트를 명시적으로 설정했습니까?
팁 자세한 내용은 모듈에서 EXECUTE AS 사용을 참조하십시오.
|
|
- 모듈이 변조를 방지하도록 서명되었습니까?
팁 자세한 내용은 모듈 서명(데이터베이스 엔진)을 참조하십시오.
|
|
- 응용 프로그램 역할 대신 USER WITHOUT LOGIN을 사용합니까?
팁 자세한 내용은 SQL Server 2005 보안 최선의 구현 방법 - 운영 및 관리 태스크(SQL Server 2005 Security Best Practices - Operational and Administrative Tasks)를 참조하십시오.
|
|
- SETUSER 대신 EXECUTE AS를 사용합니까?
팁 자세한 내용은 EXECUTE AS와 SETUSER를 참조하십시오.
|
|
- 응용 프로그램 역할을 EXECUTE AS로 대체했습니까?
팁 가능하면 EXECUTE AS … WITH NO REVERT를 사용하십시오. ID 변경 사항을 중첩할 때는 EXECUTE AS … WITH COOKIE 옵션을 사용하십시오. 자세한 내용은 EXECUTE AS(Transact-SQL)를 참조하십시오.
|
개체 액세스
다음 항목은 데이터베이스 개체 액세스와 관련이 있습니다.
|
- public 서버 및 데이터베이스 역할에 매우 제한적인 권한만 부여했습니까?
팁 모든 로그인 및 사용자는 public 역할의 멤버이며 제거할 수 없습니다. 따라서 매우 제한적인 권한만 부여해야 합니다.
|
|
- 유사한 데이터베이스 개체를 동일한 스키마로 그룹화했습니까?
팁 비즈니스 요구에 따라 스키마를 만드십시오. dbo 스키마 대신 이러한 사용자 지정 스키마를 사용하십시오. 자세한 내용은 스키마(데이터베이스 엔진)를 참조하십시오.
|
|
- 스키마 수준에서 소유권과 권한을 설정하여 데이터베이스 개체 보안을 관리합니까?
팁 자세한 내용은 GRANT 스키마 권한(Transact-SQL)을 참조하십시오.
|
|
- dbo가 모든 스키마를 소유하는 대신 스키마별로 소유자를 설정했습니까?
팁 모든 스키마의 소유자가 동일할 경우 소유권 체인에서 필수 권한 확인을 무시할 수 있습니다. 자세한 내용은 소유권 체인을 참조하십시오.
|
|
- 프로시저에 추가적인 권한이 필요할 경우 프로시저 코드에 대한 코드 서명을 사용합니까?
팁 자세한 내용은 모듈 서명(데이터베이스 엔진)을 참조하십시오.
|
|
- TRUSTWORTHY 데이터베이스 옵션을 OFF로 설정했습니까?
팁 ON으로 설정하면 가장 컨텍스트를 사용하는 데이터베이스 모듈(예: 사용자 정의 함수 또는 저장 프로시저)이 데이터베이스 외부의 리소스에 액세스할 수 있습니다. ALTER DATABASE 문을 사용하여 TRUSTWORTHY 설정을 변경하십시오. 자세한 내용은 TRUSTWORTHY 데이터베이스 속성을 참조하십시오.
|
|
- 모듈에서 SQL 삽입을 방지하기 위한 단계를 수행했습니까?
팁: 자세한 내용은 SQL 인젝션을 참조하십시오.
|
|
- 모듈 내에서 액세스를 캡슐화하는 대신 데이터베이스에 대한 임시 액세스가 허용되는 경우 응용 프로그램에서 SQL 삽입을 방지하기 위한 단계를 수행했습니까?
팁 자세한 내용은 다음 링크를 참조하십시오.
|