SQL Server: как проверить, существует ли пользователь Windows в базе данных, но под другим именем пользователя - PullRequest
7 голосов
/ 02 июня 2011

Я пытаюсь создать пользователя с помощью сценария T-SQL в SQL Server 2005/2008. Я запускаю следующий SQL-запрос, чтобы проверить, существует ли пользователь, и создайте его, если он не существует:

IF NOT EXISTS (SELECT * 
               FROM   sys.database_principals 
               WHERE  name = N'MyDomain\MyUser') 
  BEGIN 
      CREATE USER [MyDomain\MyUser] FOR LOGIN [MyDomain\MyUser] WITH default_schema=[dbo]; 

      SELECT 1; 
  END 
ELSE 
  BEGIN 
      SELECT 0; 
  END  

К сожалению, это не работает, если учетная запись Windows MyDomain \ MyUser уже находится в базе данных, но под другим именем. Примером этого может быть, если MyDomain \ MyUser была учетная запись, которая создала базу данных, то она уже будет в базе данных под пользователем dbo. В этом случае я получаю следующую ошибку:

Сообщение 15063, Уровень 16, Состояние 1, Строка 1 Логин уже имеет учетную запись под другое имя пользователя.

Как я могу проверить, является ли пользователь Windows MyDomain \ MyUser уже пользователем в базе данных, даже если он находится под другим именем пользователя?

1 Ответ

14 голосов
/ 02 июня 2011

Выполните тестирование для пользователя Windows против sys.database_principals, используя SID, а не имя / user_id:

select * from sys.database_principals where sid = SUSER_SID(N'MyDomain\MyUser')

Так как при этом используется SID идентификатора входа, не имеет значения, какое имя онбыл сопоставлен в базе данных.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...