현재 오프라인 상태입니다. 인터넷에 다시 연결하기를 기다리고 있습니다.

INF: 개체 소유자를 변경하는 SQL Server 프로시저

이 문서는 이전에 다음 ID로 출판되었음: KR275312
요약
때때로 개체의 소유자를 변경해야 할 수 있습니다. 본 문서는 개체 소유자를 변경하는 데 사용할 수 있는 코드 예제를 포함하고 있습니다.
추가 정보
소유자 변경이 필요한 개체가 많으면 다음 SQL Server 저장 프로시저를 사용하여 변경을 쉽게 수행할 수 있습니다.
if exists (select * from sysobjects where id = object_id(N'[dbo].[chObjOwner]') and OBJECTPROPERTY(id, N'IsProcedure') = 1)drop procedure [dbo].[chObjOwner]GOSET QUOTED_IDENTIFIER  OFF    SET ANSI_NULLS  ON GOCREATE proc chObjOwner( @usrName varchar(20), @newUsrName varchar(50))as-- @usrName is the current user-- @newUsrName is the new userset nocount ondeclare @uid int                   -- UID of the userdeclare @objName varchar(50)       -- Object name owned by userdeclare @currObjName varchar(50)   -- Checks for existing object owned by new user declare @outStr varchar(256)       -- SQL command with 'sp_changeobjectowner'set @uid = user_id(@usrName)declare chObjOwnerCur cursor staticforselect name from sysobjects where uid = @uidopen chObjOwnerCurif @@cursor_rows = 0begin  print 'Error: No objects owned by ' + @usrName  close chObjOwnerCur  deallocate chObjOwnerCur  return 1endfetch next from chObjOwnerCur into @objNamewhile @@fetch_status = 0begin  set @currObjName = @newUsrName + "." + @objName  if (object_id(@currObjName) > 0)    print 'WARNING *** ' + @currObjName + ' already exists ***'  set @outStr = "sp_changeobjectowner '" + @usrName + "." + @objName + "','" + @newUsrName + "'"  print @outStr  print 'go'  fetch next from chObjOwnerCur into @objNameendclose chObjOwnerCurdeallocate chObjOwnerCurset nocount offreturn 0GOSET QUOTED_IDENTIFIER  OFF    SET ANSI_NULLS  ON GO

사용 예

사용자 test가 소유한 모든 개체를 dbo로 변경하려면 다음 코드를 실행하십시오.
exec chObjOwner 'test','dbo'
코드는 테스트가 소유한 모든 개체를 찾고 sp_changeobjectowner 저장 프로시저를 사용하여 일련의 SQL 문을 생성합니다. 그런 다음 SQL Server 쿼리 분석기에서 문을 검토하고 실행할 수 있습니다.

새로운 사용자가 현재 사용자와 같은 이름을 가진 개체를 갖고 있는 경우 개체 이름과 함께 경고가 표시됩니다. 예를 들어, test와 dbo 모두 world라는 테이블을 소유하는 경우에는 다음 오류 메시지가 표시됩니다.
경고 *** dbo.world이(가) 이미 있습니다 ***
sp_changeobjectowner 'test.world','dbo'
go
데이터베이스에서 여전히 개체를 소유하는 사용자를 삭제하려고 시도하면 아래와 같은 오류 메시지가 나타나면서 프로세스가 실패합니다.
15183 : '데이터베이스의 개체를 소유하고 있으므로 사용자를 삭제할 수 없습니다.'
alias group role security
속성

문서 ID: 275312 - 마지막 검토: 05/16/2011 16:04:00 - 수정: 4.0

  • Microsoft SQL Server 7.0 Standard Edition
  • Microsoft SQL Server 2000 Standard Edition
  • kbsqlmanagementtools kbcodesnippet kbinfo KB275312
피드백