2013-09-18 5 views
35

Я собираюсь получить список всех пользователей, включая пользователей Windows и «sa», которые имеют доступ к определенной базе данных в MS SQL Server. В принципе, я хотел бы, чтобы список выглядел так, как показано в SQL Server Management Studio (т. Е. Список, который отображается при расширении [databse] -> Security -> Users) с одним важным исключением: я не хочу видеть 'dbo' в списке. Скорее, я хотел бы видеть фактического пользователя, которому принадлежит база данных. Так, например, если «sa» - 'dbo', 'sa' должен быть включен в список вместо 'dbo'. Еще одно примечание, которое нельзя упустить, - список в SQL Server Management Studio обычно показывает пользователям Windows в дополнение к пользователям SQL. И я хотел бы, чтобы эти пользователи также были включены.Как получить список всех пользователей базы данных

До сих пор я был в состоянии придумать с помощью следующего запроса:

SELECT * FROM sys.database_principals where (type='S' or type = 'U') 

Этот запрос почти сразу, но проблема в том, что не удовлетворяет условию 'dbo'.

Как я могу изменить этот запрос или использовать другой?

ответ

3
SELECT name FROM sys.database_principals WHERE 
type_desc = 'SQL_USER' AND default_schema_name = 'dbo' 

Это выбирает все пользователи на сервере SQL, который создал администратор!

+1

Работает с базами данных SQL Azure – Philippe

3
EXEC sp_helpuser 

или

SELECT * FROM sysusers 

Оба эти выбора всех пользователей текущей базы данных (а не сервер).

+1

'EXEC sp_helpuser' идеально подходит для RDS, где у меня нет доступа ко всем таблицам sys - спасибо! –

Смежные вопросы