我想列出特定数据库中的所有用户。
当我使用sys.server_principals或sys.sysmembers系统视图时,它不会列出安全性下显示的所有用户 - >用户在SQL Server Management Studio的对象浏览器中列出。
以下是我的尝试:
USE [Database_Name];
SELECT user_name([memberuid]) as [Username]
FROM [sys].[sysmembers];
USE [Database_Name];
SELECT [name]
FROM [sys].[server_principals];
谢谢!
答案 0 :(得分:2)
您不应该使用sysmembers
或sysusers
- 所有sys___
视图都是向后兼容性视图,(a)将在某个时候从产品中删除( b)不一定包含当前信息。
如果您正在寻找数据库主体,请不要查看sys.server_principals
,请查看sys.database_principals
。
USE your_database;
GO
SELECT name, create_date, type_desc
FROM sys.database_principals
WHERE is_fixed_role = 0;
这将包括guest
,INFORMATION_SCHEMA
,dbo
,public
和sys
等内容。但是,它不会包含sa
之类的帐户,这些帐户对数据库具有固有的权限,而无需定义明确的主体。