Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Felipe Rezende

sp_executesql com sp_msforeachdb

Recommended Posts

Galera,

 

Estou tentando utilizar essas duas procedures juntas para selecionar todas as permissões de um determindado usuário mas não estou conseguindo.

 

Estou fazendo da seguinte forma, porém ocorre o seguinte erro:

 

Server: Msg 170, Level 15, State 1, Line 1

Line 1: Incorrect syntax near ')'.

--CREATE TABLE #TEMPORARY_TABLE (nme_schema NVARCHAR(20), nme_role NVARCHAR(30))DELETE FROM #TEMPORARY_TABLEDECLARE    @nme_login varchar(20) , @string_sql nvarchar(500)SET @nme_login = 'frezende'SELECT @string_sql = 'sp_MSforeachdb''					 INSERT #TEMPORARY_TABLE					 SELECT ''''?'''' AS nme_schema				  , g.NAME	AS nme_role			   FROM ?..sysusers u			  , ?..sysusers g			  , ?..sysmembers ug			  , MASTER..sysdatabases d   			  WHERE u.status = 2			AND g.status = 0			AND ug.memberuid = u.UID 			AND ug.groupuid  = g.UID 			AND d.dbid = db_id()			AND u.NAME = @nme_login'''EXEC SP_EXECUTESQL @string_sql, N'@nme_login'SELECT * FROM #TEMPORARY_TABLE

POR FAVOR ME AJUDEM!!!

 

Valeu!!!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Felipe,

 

A "sp_MSforeachdb" é uma stored procedure não documentada do sql server que permite a execução de qualquer "transact sql" em todos os bancos de uma instância sql server, uu seja, ela "varre" todos os bancos do server e executando os comandos definidos.

 

Abaixo um exemplo simples, onde criei um script para listar todas as "tables" em todos os bancos de dados existentes no server...

 

declare @cmd1 varchar(500)declare @cmd2 varchar(500)set @cmd1 = 'print ''[DB : ? ]'''set @cmd2 = 'select name as Tabela from ?..sysobjects where xtype = ''u'' order by name'exec sp_MSforeachdb @command1=@cmd1,                     @command2=@cmd2

O quê você precisa fazer a partir disto, é incorporar a segunda parte, ou seja... colocar no "@cmd2" a query que vai te permitir listar todas as permissões para um determinado usuário. Quando me sobrar um tempo, tento verificar isto pra você.

 

Até lá, quem sabe, você pode dar uma pesquisada melhor na query pra fazer isto (aquela do teu post tá meio confusa pra mim), ou aparece alguém por aqui com algo pronto.

 

Espero ter ajudado... T+

Compartilhar este post


Link para o post
Compartilhar em outros sites

MisterPe,Estou tentando fazer exatamente isso, porém esta voltando aquele erro que não consigo identificar. Se eu rodar essa query sem passar o parametro @nme_login dentro da string deixando fixo um login na query e retirar o parâmetro da execução da SP_EXECUTESQL funciona, mas não é isso que eu quero, quero uma query dinamica, por login.AND d.dbid = db_id()AND u.NAME = frezende'''EXEC SP_EXECUTESQL @string_sqlVoui tentar fazer algo parecido com o que você colocou e depois eu post novamenteexec sp_MSforeachdb @command1=@cmd1,@command2=@cmd2Valeu!

Compartilhar este post


Link para o post
Compartilhar em outros sites

MisterPe,

 

Dei uma apelada... rsrs

 

Como não vai ser uma procedure que será executada constantimente... Dei uma roubada com o REPLACE

 

você passando o nme_login por parametro funciona direitinho.

 

VALEU A FORÇA!!!

 

DECLARE @nme_login nvarchar(20)DECLARE @string_sql nvarchar(4000)DECLARE @schema varchar(20)SET @nme_login = 'frezende'SELECT @string_sql = 'sp_MSforeachdb''					 INSERT #TEMPORARY_TABLE					 SELECT ''''?'''' AS nme_schema				  , g.NAME	AS nme_role			   FROM ?..sysusers u			  , ?..sysusers g			  , ?..sysmembers ug			  , MASTER..sysdatabases d   			  WHERE u.status = 2			AND g.status = 0			AND ug.memberuid = u.UID 			AND ug.groupuid  = g.UID 			AND d.dbid = db_id()			AND u.NAME = ''''@nme_login'''' '''SELECT @string_sql = REPLACE(@string_sql,'@nme_login',@nme_login)EXEC SP_EXECUTESQL @string_sqlDECLARE c_user_grants CURSOR FOR		SELECT nme_schema 			 , 'SP_DROPROLEMEMBER ' + '''' + nme_role + '''' + ',' + '''' + @nme_login + '''' AS string_sql	  FROM #TEMPORARY_TABLEOPEN c_user_grantsFETCH NEXT FROM c_user_grants INTO @schema, @string_sqlSELECT @string_sql

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.