2011-04-11 2 views
1

SQL Server 2005에서 SQL Server 2008로 마이그레이션하려고합니다. 두 데이터베이스 인스턴스 모두 완전한 사용 권한이없는 타사 공유 서버에서 호스팅됩니다. 그들은 혼합 모드 인증을 사용하고 있습니다.SQL Server의 데이터베이스에 대해 dbo에 로그인하십시오.

이전 데이터베이스와 동일한 방식으로 새 데이터베이스를 설정하는 데 문제가 있습니다. 특히 새 웹 기반 제어판에서는 새 데이터베이스를 만들 때 dbo를 지정할 수 없으며 Red Gate SQL Compare를 사용하여 스키마를 동기화하는 데 문제가 있습니다. 일부 개체 (명시 적으로 지정하지 않은 개체) 스크립트에서 dbo)가 dbo 대신 사용자 계정의 접두어로 생성됩니다.

로그인 "user1"을 "db1"데이터베이스에 대한 dbo로 설정하는 방법을 찾기 위해 문서를 보았습니다. 나는 스크립트는 다음과 같아야합니다 결론에 도달했다 :

ALTER AUTHORIZATION ON DATABASE::db1 TO user1 

이 스크립트를 실행하기 전에 로그인 "USER1는"이미 존재하지만, 데이터베이스 "DB1"에 대한 사용자가 아닙니다. 참고이 스크립트를 실행하려면 호스팅 회사의 지원에이 스크립트를 제출해야했습니다. 호스팅 회사에 따르면 문이 성공적으로 실행되지만 SQL을 사용하여 데이터베이스를 비교할 때 사용자 "user1"은 SQL Server 2005 에서처럼 실제로 데이터베이스에 추가되지 않았습니다. 스크립트를 사용하여 추가 할 때 :

CREATE USER [user1] FOR LOGIN [user1] WITH DEFAULT_SCHEMA=[dbo] 

내가 오류 메시지가 얻을 : 나는 데이터베이스에서 다른 모든 사용자를 삭제 시도

"The login already has an account under a different username" 

,하지만 오류 메시지가 계속 발생 - 나는 이상한 찾을 수있다.

명시 적으로 dbo를 지정하여 스크립트를 수정할 수는 있지만, 필연적으로 dbo를 명시 적으로 지정하지 않은 새 스크립트가 도입되면 동기화 중에 오류가 발생할 수 있기 때문에 필연적으로 시한 폭탄이 사라질 수 있습니다. 스크립트 중 일부는 타사의 스크립트이기 때문에 좋은 해결책은 아닙니다.

그래서 내 질문 : dbo 사용자로 데이터베이스에 "user1"을 추가하려면 실행해야 할 다른 문이 있습니까? 이러한 불일치가 발생할 수있는 SQL Server 2005와 SQL Server 2008 R2 사이의 구현에서 변경된 사항이 있습니까?

테스트 할 다른 SQL Server 2008 데이터베이스가 없기 때문에 유감스럽게도 테스트 할 수 없으며이 데이터베이스에서 원하는 모든 작업을 수행 할 수있는 완전한 액세스 권한이 없기 때문에 두 번째 응답을 찾으려면 테스트 할 수 없습니다.

이전 데이터베이스는 dbo를 강제로 지정하고 새 데이터베이스는 데이터베이스를 만들 때 dbo를 지정할 수 없도록 한 제어판을 통해 생성되었습니다.

+0

그래서 [user1]은 (는) SQL 서버 수준의 로그인이며 master.dbo.syslogins에서 볼 수 있으며 [database] .dbo.sysusers에 동일한 사용자 ID가있는 사용자가 없습니다 – AgentDBA

+0

도움을 제공해 주셔서 감사합니다. 네, 그게 사실입니다. 여기서 어디로 가야합니까? – NightOwl888

+0

그냥 오늘 아침에 다시보고 있었는데 같은 오류를 다시 만들었습니다. 그러나 당신은 이미 당신이 "다른 사용자들을 모두 삭제했다"고 말했습니다 ... 당신은 데이터베이스에 user1을 삭제하고 그것을 다시 만들었습니까?다음 코드를 사용하여 로그인과 사용자 간의 모든 매핑을 확인하십시오 "l.name을 ServerLoginName으로, u.name을 [Database] .dbo.sysusers에서 DatabaseUserName으로 선택하고 master.dbo.syslogins에 u.sid = l.sid를 입력하십시오. " – AgentDBA

답변

3

내가 수집 한 것만 큼 충분해야합니다.

ALTER USER [user1] WITH DEFAULT_SCHEMA=[dbo] 

이미 생성 된대로 작동하지 않습니다.

+0

이것은 내가 이미 가지고있는 것과 어떻게 다른가요? 내 말은, "user1"이 이미 dbo라는 거지, 그렇지? 기본 스키마 dbo를 기능적으로 사용자에게 dbo (객체 생성과 관련하여)를 만드는 것과 동일하게 지정합니까? – NightOwl888

+0

당신이 명시 적으로 dbo. [tablename]을 명시해야만하는 이유 인 user1 스키마 아래에 새로운 테이블/함수가 작성되는 것에 대해 걱정한다는 점을 제외하고는. 기본 스키마를 dbo로 설정하면 구문을 작성하는 데 dbo를 사용하지 않아도됩니다. – AgentDBA

+0

좋습니다. SQL Compare를 사용하여이 방법을 테스트했는데 효과가있었습니다. 실제로 2005 년 서버가 작동하는 이유였습니다. 또한이 방법으로 데이터베이스를 업데이트하면 실행 권한이없는 SQL 스크립트를 실행하기위한 지원 요청이 필요하지 않습니다. – NightOwl888