Просто чтобы очистить ветер, я осознаю, что предоставление пользователям sysadmin в T-SQL не очень хорошая вещь, но в соответствии с требованиями клиента это необходимо сделать.
У меня есть это:
public void AddUserToServer(List<string> users, List<string> servers)
{
foreach (var server in servers)
{
setConnection(server);
foreach (var user in users)
{
string sql =
"USE [master]" +
" CREATE LOGIN" + " [TP1\\" + user + "] FROM WINDOWS WITH DEFAULT_DATABASE=[master], " +
"DEFAULT_LANGUAGE=[us_english] " +
"EXEC sys.sp_addsrvrolemember @loginame = N'TP1\\" + user + "', @rolename = N'sysadmin'";
_dbContext.Database.ExecuteSqlCommand(sql);
}
}
}
Я получил вышеуказанный скрипт, создав пользователя вручную в ssms, а затем сгенерировал скрипт.Однако при запуске я получаю эту текущую ошибку:
'Процедура' sys.sp_addsrvrolemember 'не может быть выполнена внутри транзакции.
Поэтому я изменил ее на:
string sql =
"USE [master]" +
" CREATE LOGIN" + " [TP1\\" + user + "] FROM WINDOWS WITH DEFAULT_DATABASE=[master], " +
"DEFAULT_LANGUAGE=[us_english] " +
"GRANT ADMINISTER BULK OPERATIONS TO[TP1\\" + user + "]";
Это создает пользователя НО Я не получаю роль системного администратора.
Как мне решить эту проблему?