2011-09-16 2 views
4

SQL Server가 db_accessadmin, db_datareader 등과 같은 초기 DB 역할에 대한 스키마를 만드는 이유는 무엇입니까? 나는 역할이 무엇인지, 왜 존재 하는지를 이해하지만, 데이터베이스가 생성 될 때 왜 스키마가 주어지는 지 이해하지 못한다. 아무도 그들을 사용합니까? Microsoft에서 테이블을 추가 할 것을 권장하지는 않습니다. db_datawriter에 직원 또는 제품 테이블을 추가 할 수 없습니다. 소유 한 숨겨진 시스템 객체가 있습니까?SQL Server가 초기 DB 역할에 대한 스키마를 만드는 이유는 무엇입니까?

+3

하위 호환성? –

답변

3

기타를 사용해야 정말 설명하지 않고.

SQL Server 2005가 도입되었을 때 그들은 user/schema separation을 도입했습니다. 그 전에 각 사용자와 역할에는 암시 적으로 연결된 동일한 이름의 스키마가있었습니다 (사용자 또는 역할을 만드는 것 이외에는 스키마를 만들 수있는 방법이 없었습니다).

따라서 2000 년 (또는 그 이전) 버전의 SQL Server에 있던 역할로 빌드 된 경우 해당 역할과 동일한 이름의 데이터베이스에 항상 "사용 가능한"스키마가있었습니다. 따라서 일부 스키마는 그러한 스키마가 존재한다고 가정하여 작성되었을 수 있습니다. 최신 버전의 SQL Server에서는 이러한 코드가 손상되는 것을 방지하기 위해 여전히 사실임을 확인합니다.

1

레거시.

레거시 고정 데이터베이스 역할을 사용하는 대신 명시 적 GRANT (GRANT ALTER USER TO ...)를 사용해야합니다.

당신은 또한 생성 된 스키마를 얻을 sp_grantdbaccess 사용하는 경우 : 당신이 기존/이전 버전과의 호환성을 말했다 CREATE USER

+0

흠 ... 고정 된 데이터베이스 역할은 유산입니까? 더 이상 사용되지 않는 공식 문서에 대한 링크가 있습니까? –

+0

@Ben Thul : 좋은 지적 사실, 그들은 MSDN에서 더 이상 사용되지 않습니다. 지금 GRANT를 사용하므로 얻을 수있는 것이 더 명확합니다. – gbn

관련 문제