Please start any new threads on our new site at https://forums.sqlteam.com. We've got lots of great SQL Server experts to answer whatever question you can come up with.

 All Forums
 SQL Server 2000 Forums
 SQL Server Administration (2000)
 Users

Author  Topic 

jimmpy
Starting Member

15 Posts

Posted - 2006-07-05 : 17:37:17
On one of our test servers we have about 1400 users and half of them are not associated to any database. Every time we restore Prod DBs for testing purpose and users get added. Is there any efficient and quickest way of removing which are not associated to any database? Manual way would take too long. Thanks.

SwePeso
Patron Saint of Lost Yaks

30421 Posts

Posted - 2006-07-05 : 18:13:18
Maybe you should look at the MASTER..SYSLOGINS table to start with.
Then look for SYSUSERS in every database and compare all the names that are not present.


Peter Larsson
Helsingborg, Sweden
Go to Top of Page

SwePeso
Patron Saint of Lost Yaks

30421 Posts

Posted - 2006-07-05 : 18:55:03
Maybe something like this?
create table #db (id int identity(0,1), name sysname)

insert #db (name)
select name
from master..sysdatabases
--where sid <> 0x01

create table #logins (name sysname, sid varbinary(85))

insert #logins (name, sid)
select name,
sid
from master..syslogins
where sid <> 0x01

create table #users (dbname sysname null, loginsid varbinary(85), username sysname)

declare @id int,
@sql varchar(1000),
@dbname sysname

select @id = max(id)
from #db

while @id >= 0
begin
select @dbname = name
from #db
where id = @id

select @sql = 'insert #users (loginsid, username) select sid, name from ' + quotename(@dbname) + '..sysusers where sid is not null'
exec (@sql)

update #users set dbname = @dbname where dbname is null

select @id = @id - 1
end

drop table #db

-- Logins that are connected to a database
select #users.dbname 'Database name',
#logins.name 'Login name'
from #users
inner join #logins on #logins.sid = #users.loginsid

-- Logins that are not connected to a database
select #logins.name 'Login name'
from #logins
left join #users on #users.loginsid = #logins.sid
where #users.loginsid is null

-- Users for a database that not have a login
select #users.dbname 'Database name',
#users.username 'User name'
from #users
left join #logins on #logins.sid = #users.loginsid
where #logins.sid is null

drop table #logins
drop table #users



Peter Larsson
Helsingborg, Sweden
Go to Top of Page
   

- Advertisement -