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

기술 자료 번역 기술 자료 번역
기술 자료: 275312 - 이 문서가 적용되는 제품 보기.
이 문서는 이전에 다음 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]
GO

SET QUOTED_IDENTIFIER  OFF    SET ANSI_NULLS  ON 
GO

CREATE proc chObjOwner( @usrName varchar(20), @newUsrName varchar(50))
as
-- @usrName is the current user
-- @newUsrName is the new user

set nocount on
declare @uid int                   -- UID of the user
declare @objName varchar(50)       -- Object name owned by user
declare @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 static
for
select name from sysobjects where uid = @uid

open chObjOwnerCur
if @@cursor_rows = 0
begin
  print 'Error: No objects owned by ' + @usrName
  close chObjOwnerCur
  deallocate chObjOwnerCur
  return 1
end

fetch next from chObjOwnerCur into @objName

while @@fetch_status = 0
begin
  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 @objName
end

close chObjOwnerCur
deallocate chObjOwnerCur
set nocount off
return 0


GO
SET 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 : '데이터베이스의 개체를 소유하고 있으므로 사용자를 삭제할 수 없습니다.'

속성

기술 자료: 275312 - 마지막 검토: 2011년 5월 16일 월요일 - 수정: 4.0
본 문서의 정보는 다음의 제품에 적용됩니다.
  • Microsoft SQL Server 7.0 Standard Edition
  • Microsoft SQL Server 2000 Standard Edition
키워드:?
kbsqlmanagementtools kbcodesnippet kbinfo KB275312

피드백 보내기

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com