여기에 몇 가지 다른 질문이 있으므로 개별적으로 두드립니다.
"Windows 인증을 사용하는 대신 사용자가 sa 로그인을 직접 사용하지 못하게하는 것이 가장 좋습니다."
여기서 SA의 개념과 SQL 인증 및 Windows 인증의 개념을 혼합합니다.
SQL 인증은 모든 SQL Server에 저장되는 사용자 이름 및 암호 목록입니다. 그것이 SQL에 저장되어 있다는 사실이 첫 번째 문제입니다. 로그인 비밀번호를 변경해야하는 경우 모든 서버에서 비밀번호를 변경하거나 다른 서버에서 다른 비밀번호를 유지해야합니다. Windows 인증을 사용하면 로그인을 중앙에서 비활성화하고, 암호를 변경하고, 정책을 설정하는 등의 작업을 할 수 있습니다
SQL 인증을 사용하기로 선택한 경우 SA는 하나의 SQL 인증 로그인입니다. 관리자가 Windows 인증에있는 것처럼 기본 관리자 사용자 이름입니다. 하나의 인스턴스에는 로컬 슈퍼 파워가 있지만 모든 인스턴스에서 글로벌 슈퍼 파워는 아닙니다.
"... 그 계정 (또는 계정 그룹)에 sysadmin 권한을 허용합니다."
어떤 인증 방법을 선택하든 이상적으로는 최소 권한의 원칙을 따르고 자합니다. 즉, 사람들에게 업무를 수행하는 데 필요한 최소한의 권한 만 부여하면됩니다.
그것들을 단순한 로그인이라고 생각하지 마십시오-그들은 당신을 해고 할 수있는 사람들입니다. 데이터베이스를 삭제하거나 실수로 백업 작업을 비활성화하면 기본적으로 SQL은 누가 무엇을했는지 추적하지 않기 때문에 해고되지 않습니다. 당신은 그것이 일어나기 때문에 해고 될 사람이고, 어떤 사람이 그 일을했는지 말할 수 없을 것입니다.
"모범 사례는 어떻게 SQL Server 인스턴스의 보안을 강화합니까?"
두 가지 일을하고 싶습니다 :
- 사람들이 서버를 침입하지 못하도록 차단
- 그들이 서버를 깨뜨릴 때, 누가 그 서버를했는지 정확하게 식별 할 수 있어야합니다
첫 번째는 최소한의 권한으로 사람들에게 필요한 권한 만 부여하고 더 이상 아무것도 제공하지 않는 것입니다.
두 번째는 공유 로그인을 허용하지 않고 (모든 사람이 동일한 사용자 이름 / 비밀번호를 사용하도록 허용하는 것과 같이) 이상적으로 로그인을 감사함으로써 각 사람에게 고유 한 로그인을 제공함으로써 달성됩니다. 아마도 마지막 부분은 고통스럽기 때문에 즉시 수행하지 않을 것입니다.하지만 조각을 먼저 배치하여 누군가 데이터베이스를 삭제하고 나중에 상사가 이유를 알고 싶어하는 경우 나중에 감사를 추가 할 수 있도록하십시오.
귀하의 생각을 알고 있습니다. "하지만 우리는 앱을 코딩하고 있으며 앱에 로그인이 필요합니다." 예, 애플리케이션에 자체 로그인을 제공하면 개발자는 해당 비밀번호를 알아야하지만 해당 로그인에는 올바른 사용 권한을 가진 사람이 없어야하는 권한이 없어야합니다. 예를 들어, db_datareader 및 db_datawriter 역할에만 있어야 할 수도 있습니다. 이렇게하면 데이터를 삽입, 업데이트, 삭제 및 선택할 수 있지만 스키마 변경, 인덱스 추가, 저장 프로 시저 변경 등은 아닙니다.
"이것은 프로덕션 인스턴스 또는 내부 개발 인스턴스에만 적용됩니까?"
나는 사람들이 물건을 깨뜨리는 것에 대해 보통 걱정하기 때문에 개발 인스턴스에도 그와 같이 많이 적용된다고 생각합니다. 사람들은 개발에서 서버를 깨는 것을 좋아합니다. 물론 프로덕션으로 마이그레이션하기 위해 변경 사항 목록을 묶을 때 특정 인덱스가 실제로 앱에 중요한지 또는 일부 헤드가 데이터베이스 튜닝 관리자를 실행하여 모든 변경 사항을 적용하도록 지시했는지 알아야합니다. . 적절한 권한은 그러한 고통을 줄이는 데 도움이됩니다.