我使用SQL 2000和SQL 2005TSQL知道数据库角色成员
我想知道哪些登录具有的db_owner或db_accessadmin权利到数据库。
我可以点击每个数据库中的用户或数据库角色来查看。 使用TSQL可以以更简单的方式完成吗?
在此先感谢
我使用SQL 2000和SQL 2005TSQL知道数据库角色成员
我想知道哪些登录具有的db_owner或db_accessadmin权利到数据库。
我可以点击每个数据库中的用户或数据库角色来查看。 使用TSQL可以以更简单的方式完成吗?
在此先感谢
对于SQL 2000和仍然可以工作,2005年太
SELECT
USER_NAME(memberuid), USER_NAME(groupuid)
FROM
sys.sysmembers
WHERE
USER_NAME(groupuid) IN ('db_owner', 'db_accessadmin')
SQL
这是草率的,有可能是一个更好的办法,但如果这是一个一次性的事情这应该完成它:
DECLARE
@db_name SYSNAME,
@sql VARCHAR(1000)
DECLARE db_cursor CURSOR FOR SELECT Name FROM sys.databases
OPEN db_cursor
FETCH NEXT FROM db_cursor INTO @db_name
WHILE (@@FETCH_STATUS = 0)
BEGIN
SET @sql =
'SELECT
''' + @db_name + ''' AS [Database],
USER_NAME(role_principal_id) AS [Role],
USER_NAME(member_principal_id) AS [User]
FROM
' + @db_name + '.sys.database_role_members
WHERE
USER_NAME(role_principal_id) IN (''db_owner'', ''db_accessadmin'')'
EXEC(@sql)
FETCH NEXT FROM db_cursor INTO @db_name
END
CLOSE db_cursor
DEALLOCATE db_cursor
的SQL 2000的版本应该是:
DECLARE
@db_name SYSNAME,
@sql VARCHAR(1000)
DECLARE db_cursor CURSOR FOR SELECT Name FROM master..sysdatabases
OPEN db_cursor
FETCH NEXT FROM db_cursor INTO @db_name
WHILE (@@FETCH_STATUS = 0)
BEGIN
SET @sql =
'SELECT
''' + @db_name + ''' AS [Database],
USER_NAME(memberuid) AS [Role],
USER_NAME(groupuid) AS [User]
FROM
sysmembers
WHERE
USER_NAME(groupuid) IN (''db_owner'', ''db_accessadmin'')'
EXEC(@sql)
FETCH NEXT FROM db_cursor INTO @db_name
END
CLOSE db_cursor
DEALLOCATE db_cursor
非常感谢。并运行它在我做的所有数据库中: EXEC SP_MSFOREACHDB'USE [?]; SELECT \t \t \t \t DB_NAME(),USER_NAME(memberuid),USER_NAME(groupuid) \t \t \t \t FROM \t \t \t \t sysmembers \t \t \t \t WHERE \t \t \t \t USER_NAME(groupuid)IN( '' db_owner'',''db_accessadmin'') \t \t \t \t和user_name(memberuid)不喜欢''%dbo%''' – Manjot
对不起,我在我的本地SQL Server中做了这些,但忘了发布它! – gbn