每当您在GUI(SSMS)中“看到”某些东西时,就像“这就是我需要的”一样,您始终可以运行Sql Profiler来查找所使用的查询。
运行Sql Profiler。将它附加到您的数据库中。
然后右键单击GUI(在SSMS中),然后单击“刷新”。
然后去查看Profiler的“捕捉”之处。
当我位于MyDatabase / Security / Users中时,得到以下内容,然后单击“ Users”上的“ refresh”。
同样,我没有提出WHERE子句和LEFT OUTER JOIN,它是SSMS查询的一部分。而且此查询是Microsoft的某人写的(您知道,专家了解内而外的专家,也就是专家),因此他们熟悉数据库中所有奇怪的“标志”。
但是SSMS / GUI-> Sql Profiler技巧可以在许多情况下使用。
SELECT
u.name AS [Name],
'Server[@Name=' + quotename(CAST(
serverproperty(N'Servername')
AS sysname),'''') + ']' + '/Database[@Name=' + quotename(db_name(),'''') + ']' + '/User[@Name=' + quotename(u.name,'''') + ']' AS [Urn],
u.create_date AS [CreateDate],
u.principal_id AS [ID],
CAST(CASE dp.state WHEN N'G' THEN 1 WHEN 'W' THEN 1 ELSE 0 END AS bit) AS [HasDBAccess]
FROM
sys.database_principals AS u
LEFT OUTER JOIN sys.database_permissions AS dp ON dp.grantee_principal_id = u.principal_id and dp.type = 'CO'
WHERE
(u.type in ('U', 'S', 'G', 'C', 'K' ,'E', 'X'))
ORDER BY
[Name] ASC
master.sys.server_principals
产生服务器登录列表,而不是数据库用户列表。