Tsql SQL Server-从孤立用户SID获取数据库角色成员身份
我目前正在SQL Server 2005中使用以下代码来获取孤立用户SID的数据,这很有效,但我确实需要获取每个孤立用户SID的角色成员身份信息,这是否可行?如果可能,我如何为此编写查询Tsql SQL Server-从孤立用户SID获取数据库角色成员身份,tsql,sql-server-2005,Tsql,Sql Server 2005,我目前正在SQL Server 2005中使用以下代码来获取孤立用户SID的数据,这很有效,但我确实需要获取每个孤立用户SID的角色成员身份信息,这是否可行?如果可能,我如何为此编写查询 DECLARE cur CURSOR FAST_FORWARD FOR SELECT name FROM sys.databases WHERE database_id > 4 OPEN cur DECLARE @SQL NVARCHAR(MAX), @DBName SYSNAME DEC
DECLARE cur CURSOR FAST_FORWARD FOR
SELECT name FROM sys.databases
WHERE database_id > 4
OPEN cur
DECLARE @SQL NVARCHAR(MAX), @DBName SYSNAME
DECLARE @Results TABLE (DBName SYSNAME, UserName SYSNAME, UserSID VARBINARY(MAX))
FETCH NEXT FROM cur into @DBName
WHILE @@FETCH_STATUS = 0
BEGIN
SET @SQL = 'USE ' + @DBName + ';SELECT ''' + @DBName + ''' AS DBName,
UserName = name, UserSID = sid from sysusers
WHERE issqluser = 1 AND
(sid IS NOT NULL AND sid <> 0x0) AND
(LEN(sid) <= 16) AND SUSER_SNAME(sid) IS NULL'
INSERT INTO @Results
EXEC(@SQL)
FETCH NEXT FROM cur into @DBName
END
CLOSE cur
DEALLOCATE cur
SELECT * FROM @Results
它选择用户成员资格
select case when SUSER_SNAME( dp.sid ) is null then dp.name else SUSER_SNAME( dp.sid ) end 'dbUser',
dp2.name 'dbRole', dp.type_desc uDesc
from sys.database_principals dp left join sys.database_role_members dr
on dr.member_principal_id = dp.principal_id
left join sys.database_principals dp2 on dr.role_principal_id = dp2.principal_id
where dp.type_desc <> 'DATABASE_ROLE'
and case when SUSER_SNAME( dp.sid ) is null then dp.name else SUSER_SNAME( dp.sid ) end
not in ('sys', 'INFORMATION_SCHEMA', 'guest')
order by 1
我想我就快到了,我已经建立了相关的查询,希望能把相关的ID和角色拉过来。
select case when SUSER_SNAME( dp.sid ) is null then dp.name else SUSER_SNAME( dp.sid ) end 'dbUser',
dp2.name 'dbRole', dp.type_desc uDesc
from sys.database_principals dp left join sys.database_role_members dr
on dr.member_principal_id = dp.principal_id
left join sys.database_principals dp2 on dr.role_principal_id = dp2.principal_id
where dp.type_desc <> 'DATABASE_ROLE'
and case when SUSER_SNAME( dp.sid ) is null then dp.name else SUSER_SNAME( dp.sid ) end
not in ('sys', 'INFORMATION_SCHEMA', 'guest')
order by 1
select u.name, *
from sys.sysusers u left join sys.syslogins l on UPPER(u.sid) = UPPER(l.sid)
where u.uid > 4 and u.issqlrole = 0
and l.name is null
order by u.name