Sql Query

di il
8 risposte

Sql Query

Buonasera,

io vorrei estrapolare gli utenti abilitati in un certo Database. In questo caso il percorso è Database/Sicurezza/Utenti.

Quindi vorrei estrapolare tutti gli utenti per ogni database in un file, o in un nuovo Database in una nuova TABELLA.

Ho provato ad eseguire questo script:

use master
go

if db_id('dbTemp1') is not null
begin
alter database dbTemp set single_user with rollback immediate
drop database dbTemp
end
go

create database dbTemp
go

use dbTemp
go

create table infos
(
dbName varchar(100) not null,
info varchar(100) null
)
go


alter table infos add constraint PK_infos
primary key (dbName)
go

declare @crs cursor, @dbName varchar(100), @cmd nvarchar(max)

set @crs=cursor for
select name as dbName from sys.databases
where (name not in ('master','tempdb','model','msdb','dbTemp'))
order by name
open @crs
fetch next from @crs into @dbName
while (@@fetch_status=0)
begin
set @cmd='
use ['+@dbName+']
insert into dbTemp.dbo.infos (dbName,info)
SELECT DB_NAME() AS [Current Database],name
FROM sysusers'

exec sp_executesql @cmd
fetch next from @crs into @dbName
end
close @crs;deallocate @crs

Ma non riesco ad estrapolare i valori e mi da un errore :

(1 riga interessata)
Messaggio 2627, livello 14, stato 1, riga 30
Violation of PRIMARY KEY constraint 'PK_infos'. Cannot insert duplicate key in object 'dbo.infos'. The duplicate key value is ...

Grazie.

8 Risposte

  • Re: Sql Query

    Salve,
    passavo per caso, ma mi pare che gli oggetti referenziati e la sintassi indichino piuttosto un'istanza SQL Server e non MySQL, ma forse mi sbaglio perche' NON conosco MySQL...
    detto cio', la chiave primaria definita sicuramente viene violata in quanto e' plausibile che per ogni db venga restituita piu' di una riga...

    comunque, sempre che il contesto sia SQL Server e non MySQL, puoi vedere ad esempio https://www.sqlservercentral.com/scripts/list-all-usernames-roles-for-all-the-databases...

    mi scuso invece se il contesto e' davvero MySQL...
    salutoni
    --
    Andrea
  • Re: Sql Query

    Buongiorno,
    si in effetti è un istanza Sql Server, ho aperto il Ticket nel reparto errato deduco. Mi scuso.
    Lo script funziona perfettamente, volevo sapere se è possibile escludere quelli con la 'x' come da foto in allegato.

    Grazie e saluti
    Allegati:
    28735_6263c6751d41f7b7d401c3214a646870.png
    28735_6263c6751d41f7b7d401c3214a646870.png
  • Re: Sql Query

    Salve,
    provo ad indicare ad un admin di spostare il thread come necessario..

    puoi aggiungere un filtro sia "DOPO", filtrando quindi il result finale nella proiezione della temp table, oppure puoi aggiungere al codice dinamico generato, dopo la clausola WHERE (sia in entrambi i branches di codice), il filtro addizionale
    
    WHERE .... -- questo filtro dipende dalla versione dell'engine
    		AND u.name NOT IN (''INFORMATION_SCHEMA'', ''guest'') -- <- aggiungi questo filtro di esclusione
    	   /*and u.name like ''tester''*/
    ORDER BY u.name
    
    il commento dell'autore nel codice a spiegazione dello stesso era in grado di fornirti da solo la risposta
    salutoni
    --
    Andrea
  • Re: Sql Query

    Buongiorno,
    il mio obbiettivo però non è quello.

    u.name NOT IN (''INFORMATION_SCHEMA'', ''guest'')

    Questo esclude solo quei due campi, ma io voglio escludere tutti i campi con la 'x'.
    Esempio ci può essere un utente test, ma con la 'x' inclusa, e con quella specifica istruzione la visualizzo comunque.

    La mia domanda era se c'era un modo per differenziare gli utenti con la 'x' e non.
    Anche perchè non so cosa significhi, dato che ho iniziato da poco la programmazione a livello Sql Server.

    Grazie e cordiali saluti.
  • Re: Sql Query

    Salve,
    ah, ho capito ora cosa intendi, ma pensavo che le X le avessi messe tu... e non sono "campi", ma in questo caso sono "righe"
    al di la' di cio', ti chiedo dove hai ottenuto quell'immagine con le X, in quanto ad esempio l'ambiente di query per eccellenza, SQL Server Management Studio, ovviamente non indica la risposta con un'immagine... per questo ti chiedo "cosa significhi per te" quella X
    salutoni
    --
    Andrea
  • Re: Sql Query

    Forse ho capito cosa intendi,
    modifica il filtro where del branch >= 9,
    
    	 WHERE u.TYPE <> ''R''
    	 	--AND u.name NOT IN (''INFORMATION_SCHEMA'', ''guest'')
    		AND r.principal_id IS NOT NULL
    		AND r.name NOT IN (''PolicyAdministratorRole'', ''SQLAgentUserRole'')
    	   /*and u.name like ''tester''*/
    	 order by u.name
    
    
    salutoni
    --
    Andrea
  • Re: Sql Query

    Ho provato ad inserire la clausola, ma il risultato non cambia.
    Vedo sempre gli utenti con la 'x' rossa.

    Saluti
  • Re: Sql Query

    Quei campi sono semplicemente gli utenti che possono accedere a quel Database tramite un apposito Software,
    ma quella 'x' che vede nell'immagine, penso sia una cosa più legata o al sistema operativo stesso, o a SSMS.

    Cordiali saluti
    Allegati:
    28735_e278e06a18876a664800ec0e0fdadbae.png
    28735_e278e06a18876a664800ec0e0fdadbae.png
Devi accedere o registrarti per scrivere nel forum
8 risposte