Я использую SQL 2000 и SQL 2005.
Я хочу знать, какие логины имеют db_owner или db_accessadmin права на который базы данных.
Я могу нажать на пользователей или роли базы данных в каждой базе данных для наблюдения этого. Это могло быть сделано в более легком способе использовать TSQL?
Заранее спасибо
для SQL 2000 и еще работает для SQL 2005.
SELECT
USER_NAME(memberuid), USER_NAME(groupuid)
FROM
sys.sysmembers
WHERE
USER_NAME(groupuid) IN ('db_owner', 'db_accessadmin')
Не уверены, почему вход или текстовая пара не будет работать; Вы можете рассмотреть вопрос о обработке событий, которые загорелись, когда пользователь вводит данные в текстуарию или вход для достижения вашей цели. Или вы можете посмотреть в редактор WYSIWYG.
-121--3572481- [11172481-Это небрежный, и есть, вероятно, лучше, но это должно сделать это, если это однократное:
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