Usuário com melhor resposta
Change Object Owner

Pergunta
-
Bom dia Pessoal,
Recebi um backup de um banco de dados de um cliente, mas acontece que as tabelas não foram criadas através do usuário dbo então executei as seguintes query:
Select name, uid from sysobjects where type = 'U'
Exec sp_grantdbaccess agiles, agiles
Go
Exec sp_addrolemember db_ddladmin, agiles
Go
Ai consegui descobrir todas as tabelas e para mudar a permissão em cada tabela utilizei a seguinte query:
Sp_changeobjectowner 'owner.table', 'Login'
Mas acontece que são muitas tabelas, gostaria de saber se há alguma maneira de fazer isso sem todo esse trabalho, de uma maneira mais prática
Muito Obrigadoquarta-feira, 11 de abril de 2007 13:20
Respostas
-
segue
Set NoCount On
Declare @Tabelas Table (Idx Int Identity(1,1), TblName Varchar(100))
Insert into @Tabelas (TblName)Select Table_Schema + '.' + Table_Name From Information_Schema.Tables Where Table_Type = 'Base Table'
Declare @Start Int
Declare @End Int
Declare @Command Varchar(1000)
Select @Start = 1, @end = Max(Idx) From @Tabelas
While @Start <= @End
Begin
Select @Command = 'Sp_changeobjectowner ''' + TblName + ''',''Login''' From @Tabelas Where Idx = @Start
Print @Command
exec(@Command)
Set @Start = @Start + 1
End
agora cuidado pos este select vai ser aplicado a todas as tabelas que estiverem dentro da variavel table que foi alimentada pela information_schemaAbs;
quarta-feira, 11 de abril de 2007 15:58 -
Olá Du_Rodrigues...o script abaixo também pode ser uma ótima alternativa.
Basta executá-lo no banco desejado, pegar o resultado e executar.
--Lista todos os objetos com owner <> de dbo
select
'exec sp_changeobjectowner '''+ b.name+ '.' +a.name +''',''dbo'''from
sysobjects a Join sysusers b on a.uid = b.uid where a.uid <>1Qualquer coisa é só trocar dbo pelo login desejado.
Um abraço
Nilton Pinheiro
www.mcdbabrasil.com.brsegunda-feira, 16 de abril de 2007 17:37Moderador
Todas as Respostas
-
segue
Set NoCount On
Declare @Tabelas Table (Idx Int Identity(1,1), TblName Varchar(100))
Insert into @Tabelas (TblName)Select Table_Schema + '.' + Table_Name From Information_Schema.Tables Where Table_Type = 'Base Table'
Declare @Start Int
Declare @End Int
Declare @Command Varchar(1000)
Select @Start = 1, @end = Max(Idx) From @Tabelas
While @Start <= @End
Begin
Select @Command = 'Sp_changeobjectowner ''' + TblName + ''',''Login''' From @Tabelas Where Idx = @Start
Print @Command
exec(@Command)
Set @Start = @Start + 1
End
agora cuidado pos este select vai ser aplicado a todas as tabelas que estiverem dentro da variavel table que foi alimentada pela information_schemaAbs;
quarta-feira, 11 de abril de 2007 15:58 -
Muito obrigado pela ajuda me ajudou e muitoquarta-feira, 11 de abril de 2007 18:47
-
Olá Du_Rodrigues...o script abaixo também pode ser uma ótima alternativa.
Basta executá-lo no banco desejado, pegar o resultado e executar.
--Lista todos os objetos com owner <> de dbo
select
'exec sp_changeobjectowner '''+ b.name+ '.' +a.name +''',''dbo'''from
sysobjects a Join sysusers b on a.uid = b.uid where a.uid <>1Qualquer coisa é só trocar dbo pelo login desejado.
Um abraço
Nilton Pinheiro
www.mcdbabrasil.com.brsegunda-feira, 16 de abril de 2007 17:37Moderador -
Nilton,
Legal o script pequeno, simples, mas muito prático.
É a cada dia eu aprendo mais nestes fórums.
Valeu.
segunda-feira, 16 de abril de 2007 20:35Moderador -
Olá Du_Rodrigues...o script abaixo também pode ser uma ótima alternativa.
Basta executá-lo no banco desejado, pegar o resultado e executar.
--Lista todos os objetos com owner <> de dbo
select 'exec sp_changeobjectowner ''' + b. name+ '.' + a. name + ''',''dbo'''
from sysobjects a Join sysusers b on a. uid = b. uid where a. uid <> 1
Qualquer coisa é só trocar dbo pelo login desejado.
Um abraço
Nilton Pinheiro
www.mcdbabrasil.com.br
Executei este script em um ambiente de Teste, e obtive 1819 registros de retorno, em um ambiente que tem apenas 2 bases criadas e funcionando.
Pergunta: Alterando todos objetos da instância para terem como owner o "dbo", não corre-se o risco de algum deixar de funcionar, por algum privilégio expecial, que este owner não tenha, ou mesmo, uma view, que teria permissões restritas, passar a ter super privilégios, após esta alteração ???
Muito Obrigado...quarta-feira, 14 de outubro de 2009 19:31