【发布时间】:2011-01-10 03:10:10
【问题描述】:
我正在使用 SQL 2000 和 SQL 2005。
我想知道哪些登录对哪些数据库具有 db_owner 或 db_accessadmin 权限。
我可以单击每个数据库中的用户或数据库角色来查看。 这可以使用 TSQL 以更简单的方式完成吗?
提前致谢
【问题讨论】:
标签: sql-server sql-server-2005 tsql sql-server-2000
我正在使用 SQL 2000 和 SQL 2005。
我想知道哪些登录对哪些数据库具有 db_owner 或 db_accessadmin 权限。
我可以单击每个数据库中的用户或数据库角色来查看。 这可以使用 TSQL 以更简单的方式完成吗?
提前致谢
【问题讨论】:
标签: sql-server sql-server-2005 tsql sql-server-2000
这很草率,可能有更好的方法,但如果这是一次性的事情,这应该可以完成:
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
【讨论】:
对于 SQL 2000 并且仍然适用于 SQL 2005
SELECT
USER_NAME(memberuid), USER_NAME(groupuid)
FROM
sys.sysmembers
WHERE
USER_NAME(groupuid) IN ('db_owner', 'db_accessadmin')
【讨论】: