Мой вопрос: если вы создаете новую учетную запись пользователя домена для каждого из процессов SQL Server, какие разрешения должны быть установлены для каждой учетной записи? Или менеджер конфигурации SQL на самом деле позаботится об этом, и у меня возникла непредвиденная проблема?
Мне довольно часто приходится настраивать Microsoft SQL Server, и я спрашиваю себя, может ли кто-нибудь дать совет по настройке учетных записей, с которыми должны работать службы. ИМО, это было смутно задокументировано Microsoft, хотя они указывают вам правильное направление, мне никогда не удавалось найти какие-либо конкретные примеры.
Подводя итог, что я видел до сих пор:
Для простых развертываний сред разработки можно использовать виртуальную учетную запись по умолчанию, которую использует установщик: например, NT SERVICEMSSQLSERVER
Избегайте использования SYSTEM учетной записи, это не безопасно.
Для производственных и доменных сред рекомендуется использовать либо управляемую учетную запись службы, либо создать учетную запись пользователя домена (не администратора) для каждой службы. Предположительно, если вы используете учетную запись домена во время установки, установщик установит для вас все необходимые разрешения.
Установка Microsoft SQL Server 2019 Express на Windows 10 – пошаговая инструкция для начинающих
При изменении учетной записи службы в существующей установке с виртуальной учетной записи на учетную запись домена рекомендуется использовать диспетчер конфигурации SQL Server для установки новых учетных записей службы. Предположительно, это установит для вас все необходимые разрешения.
Я только что попытался изменить учетную запись службы в существующей установке на учетную запись домена, и это дало бы мне ошибку входа в систему до тех пор, пока я не предоставлю log on as service разрешение учетной записи , что противоречит той части, где диспетчер конфигурации SQL Server установит все необходимые разрешения. (Хотя я не уверен, что GPO мог помешать установке этой локальной политики безопасности)
Microsoft предоставляет список разрешений, которые программа установки SQL Server предоставляет на этой странице .
Но мне неясно, нужно ли это делать вручную для пользователя, которого я создаю для запуска службы, или нужно ли с помощью диспетчера конфигурации SQL автоматически устанавливать эти разрешения.
SQL Server 2014, контроллер домена находится на Windows Server 2008 R2.
Источник: qastack.ru
Получение административных привилегий в Microsoft SQL Server
После смены рабочей станции начал ставить на нее Micorosft SQL Server 2008 R2 и чуть было не натолкнулся на традиционные грабли, связанные с улучшенной безопасностью в этой версии. Если в Microsoft SQL Server 2005 группа локальных администраторов по умолчанию включалась в роль sysadmin на SQL сервере, то в 2008-й в эту роль не включается никто:
Как найти и запустить экземпляр SQL Server
В итоге, в инсталляции по умолчанию получается ситуация, в которой к инстансу не имеет административного доступа никто, то есть сделать с этим инстансом нельзя ничего кроме как периодически перезагружать его. Также такая ситуация возникает, когда тот, кто устанавливал SQL сервер, назначив себя единственным администратором, увольняется — например такая ситуация возникла нашими админами.
Данный пост показывает решение этой проблемы и предоставляет автоматизированное решение этой проблемы в виде скрипта, ровно как и рассказывает историю его написания, иллюстрируя мощь WMI, которая недопустимо замалчивается в литературе и в интернете.
Описание процедуры
- Перезагрузить инстанс в однопользовательский режим (single user mode)
- Добавить нужного пользователя в администраторы сервера из-под любого пользователя из группы локальных администраторов
- Перезагрузить инстанс в нормальный режим
Разжеванное описание процедуры
Перегрузка в однопользовательский режим
- Запускаем оснастку конфигурации SQL сервером и останавливаем нужный инстанс (в моем случае — инстанс по умолчанию):
- Открываем свойства инстанса:
- Переключаемся на вкладку Advanced и прокручиваем свойства к параметру Startup Parameters:
- Добавляем параметр -m; (не забываем точку с запятой!). Этот параметр обозначает загрузку инстанса в однопользовательском режиме (single user mode). В этом режиме любой член группы локальных администраторов имеет привилегии системного администратора на инстансе. Также в этом режиме возможно единственное соединение с сервером, поэтому любые приложения, которые могут хотеть присоединиться к конфигурируемому инстансу, должны быть погашены. Полное описание параметров движка базы можно найти тут:
- Запускаем инстанс:
Установка админских привилегий для пользователя
Тут есть много способов, начиная от присоединения к серверу посредством SQL Server Management Studio и использования графической оснастки для добавления нужных прав и кончая использованием osql. Мы пойдем вторым путем. Запускаем cmd.exe под пользователем из группы локальных администаторов и выполняем сдедующую команду:
osql -E -S .InstanceName -Q «EXEC sp_addsrvrolemember ‘DOMUser’, ‘sysadmin'» , где InstanceName — имя инстанса, а DOMUser — это доменпользователь, которому дается административный доступ к инстансу. В моем случае (с инстансом по умолчанию и для админского пользователя RUventicello) выглядит это так:
Запуск инстанса в обычном режиме
- Останавливаем инстанс
- Удаляем параметр -m;
- Запускаем инстанс
Автоматизация
Хоть процедура и не архисложная и никоим образом не каждодневная, она, если честно, немного занудная и утомительная. Одно количество скриншотов является тому подтверждением. Я же являюсь убежденным апологетом утверждения, что все, что занудно, должно делаться компьютером, а не человеком — на то их и создавали. Поэтому я взял и описал все эти шаги в виде скрипта, предлагаемого вашему вниманию. Чтобы воспользоваться скриптом, его надо запустить из-под пользователя с административными привилегиями на машине с инстансом следующим образом:
cscript /nologo acquire_admin_rights.js [] , где опциональный параметр instance-name обозначает инстанс, к которому надо предоставить админские права для запускающего пользователя. Если пропустить инстанс или задать имя MSSQLSERVER, доступ будет предоставлен к инстансу по умолчанию. Еще раз напоминаю, что надо удостовериться, что в течение процедуры нет никаких приложений, активно соединяющихся с этим инстансом, так как они могут перехватить единственное соединение, предоставляемое однопользовательским режимом.
В процессе работы скрипт честно рассказывает о своих деяниях, поэтому, если что-то пойдет не так, можно понять, в чем причина и в каком состоянии оставлена система:
Детали по скрипту
Когда я начал писать скрипт, у меня уже был некоторый опыт работы с конфигурацией SQL Server через WMI, но именно с параметрам командной строки запуска инстанса работать не приходилось. Именно в этом ключе я и поведу рассказ: что я знал, и как искал то, что мне нужно.
WMI
Вкратце, в контексте нашего повествования, WMI (Windows Management Instrumentation) — это сервис Windows, предоставляющий доступ к конфигурационной информации в унифицированном виде именованных классов, представленных набором свойств. Классы распиханы по пространствам имен (самое популярные из которых — это rootcimv2, в котором живет большинство классов, описывающих систему, и rootdefault, в котором живет класс реестра). На основании класса может существовать один или более экземпляров, обозначающих реальные описываемые объекты. Например, класс Win32_Service — это понятие службы, а каждый экземпляр — это набор свойств, соответствующий реальным службам, установленным на системе.
Microsoft SQL Server в WMI
- rootMicrosoftSqlServerComputerManagement — для SQL Server 2005
- rootMicrosoftSqlServerComputerManagement10 — для SQL Server 2008
wbemtest
wbemtest.exe — это стандартный клиент WMI (настолько стандартный, что присутствует в путях), поставляемый c WMI с первых дней появления этого сервиса аж в Windows 2000. Как следствие, интерфейс у этой утилиты суров, что, однако, не приумаляет его мощь. Выглядит он так:
Пока мы не присоединимся к нужному пространству имен, делать нам в этой утилитке особо нечего. К счастью, мы знаем нужное пространство имен: rootMicrosoftSqlServerComputerManagement10 :

Если с WMI все нормально (а у этого сервиса есть тенденция изредка отваливаться), то соединение будет успешным, приглашая нас к взаимодействию активными кнопками:

Ну все, теперь мы готовы копаться в пространстве имен в поисках нужных классов и свойств.
Поиск нужных свойств
Сначала смотрим, какие классы вообще существуют в этом пространстве имен. Для этого, очевидно, жмем на кнопку Enum Classes и в появившемся не совсем понятном диаложке нажимаем OK. В итоге появляется следующее окно: .
Обычная женская интуиция подсказываем нам, что это, скорее всего, класс SqlServiceAdvancedProperty. Даблкликаем, открывая следующий диалог, показывающий свойства данного класса:
Похоже на правду. Посмотрим на экземпляры этого класса и посмотрим, есть ли там интересующие нас параметры. Для этого нажимаем кнопку Instances и получаем сие окно:

Находим объект SqlServiceAdvancedProperty.PropertyIndex=13,SqlServiceType=1,PropertyName=’STARTUPPARAMETERS’,ServiceName=’MSSQLSERVER’. Вот оно счастье!
Работа с WMI из скрипта
Зная, какие классы и свойства нам нужны, остается только получить к ним доступ из скрипта. Рассматривать будем JScript, потому что распространяется со всеми Windows, да еще и JavaScript. Работа на VBScript или PowerShell ведется аналогично. Работа с WMI в скрипте начинается как и в случае wbemtest с подключения к нужному пространству имен. Делается это следующим кодом:
function LookupInstanceContext(instance, scope) < try < var wmi = GetObject(«WINMGMTS:\\.\root\Microsoft\SqlServer\» + scope); var settings = new Enumerator(wmi.ExecQuery(«SELECT * FROM ServerSettings WHERE InstanceName='» + instance + «‘»)); if (!settings.atEnd()) < return wmi; >> catch (exception) <> return null; >
В качестве scope подается либо «ComputerManagement» либо «ComputerManagement10», в зависимости от того, какой версии SQL Server мы ищем. Примерно таким же кодом мы присоединяемся к пространству имен rootcimv2, посредством которого работаем со службами. Полученный объект wmi реализует интерфейс IWbemServices, но нас интересуют три следующих метода:
- ExecQuery — выполнить запрос на языке WQL и вернуть список результатов
- Get — получить конкретный экземпляр класса по идентификатору
- ExecMethod — вызвать метод на объекте
Чтобы потренироваться в умении делать WQL запросы и смотреть на результаты, нам поможет наш старый друг wbemtest нажатием кнопки Query. на основном окне. Вкратце, WQL (WMI Query Language) — это подмножество SQL в котором в качестве таблицы используется имя класса и выбирать конкретные колонки нельзя — только SELECT * . Например, чтобы найти все экземпляры инстанса сервера с именем MSSQLSERVER, можно написать следующий WQL запрос:
Результат представлен в том же виде, в котором нам возвратились экземпляры класса (это и был результат запроса SELECT * FROM SqlServiceAdvancedProperty ).
Для получения одного объекта по первичного ключу или полному набору свойств (для классов, у которых нет первичных ключей), используется метод Get . Вот функция, которая ответственна за получение строкового значения объекта SqlServiceAdvancedProperty по заданному пути:
function GetPropertyValue(wmi, path)
Изменение значения свойства подразумевает вызов метода SetStringValue (который указан в описании класса SqlServiceAdvancedProperty ). Чтобы его вызвать надо предварительно создать его аргумент, в который установить требуемое значение. Делается это следующей пачкой вызовов:
function SetPropertyValue(wmi, path, value) < var arg = wmi.Get(path).Methods_(«SetStringValue»).inParameters.SpawnInstance_(); arg.Properties_.Item(«StrValue») = value; var result = wmi.ExecMethod(path, «SetStringValue», arg); if (result.ReturnValue != 0) < throw new Error(«Failed to set property ‘» + path + «‘ to value ‘» + value + «‘»); >>
Заключение
В остальном скрипт самодокументирующийся. Все действия записаны в функции с четкими названиями, пригодные для повторного использования в собственных скриптах. Используйте на здоровье!
В данном посте была рассмотрена процедура восстановления административных привилегий на SQL Server, а также проиллюстрирована мощь скриптования средствами WMI, позволившая автоматизировать все действия в виде небольшого скрипта. Перекуем мануалы на скрипты!
Источник: habr.com
Как восстановить права администратора в MS SQL Server
В этой статье описывается, как восстановить доступ к Компонент SQL Server Database Engine в качестве системного администратора, если доступ был заблокирован. Системный администратор может утратить доступ к экземпляру SQL Server по одной из следующих причин:
- по ошибке удалены все члены предопределенной роли сервера sysadmin;
- по ошибке удалены все группы Windows, которые являлись членами предопределенной роли сервера sysadmin;
- имена входа, являющиеся членами предопределенной роли сервера sysadmin, принадлежат лицам, которые покинули компанию или недоступны;
- учетная запись sa отключена, или никто не знает ее пароля.
Решение
Чтобы устранить проблему доступа, рекомендуется запустить экземпляр SQL Server в однопользовательском режиме. Этот режим не позволит устанавливать другие подключений при попытке восстановить доступ. Вы можете подключиться к экземпляру SQL Server и добавить имя входа в роль сервера sysadmin.
Можно запустить экземпляр SQL Server в однопользовательском режиме с параметрами -m или -f из командной строки. Затем любой член локальной группы администраторов на компьютере может подключиться к экземпляру SQL Server в качестве члена предопределенной роли сервера sysadmin.
При запуске экземпляра в однопользовательском режиме сначала нужно остановить службу «Агент SQL Server». В противном случае агент SQL Server может установить соединение первым, заняв единственное доступное подключение к серверу и заблокировав возможность входа.
Кроме того, неизвестное клиентское приложение может воспользоваться единственным доступным подключением, прежде чем вы сможете выполнить вход. Чтобы исключить возникновение этой ситуации, используйте параметр -m , за которым следует имя приложения, что позволит ограничить подключения одним подключением из определенного приложения. Например, запуск SQL Server с помощью -mSQLCMD разрешает только одно соединение, которое должно идентифицироваться как клиентская программа sqlcmd. Для подключения через редактор запросов в Среда Management Studio используйте -m»Microsoft SQL Server Management Studio — Query» .
Важно! Не используйте -m с именем приложения в качестве средства безопасности. Клиентские приложения предоставляют имя приложения в параметрах строки подключения и могут легко указать ложное имя.
В следующей таблице приведены различные способы запуска экземпляра в однопользовательском режиме в командной строке.
-m | Ограничение подключений одним подключением | Если другие пользователи не пытаются подключиться к экземпляру или вы не знаете имя приложения, которое используется для подключения к экземпляру. |
-mSQLCMD | Разрешает только одно соединение, которое должно идентифицироваться как клиентская программа sqlcmd. | Если вы планируете подключиться к экземпляру с помощью sqlcmd и хотите запретить другим приложениям использовать единственное доступное подключение. |
-m»Microsoft SQL Server Management Studio — Query» | Разрешает только одно соединение, которое должно идентифицироваться как приложение Microsoft SQL Server приложении Management Studio — Query. | Если вы планируете подключиться к экземпляру с помощью редактора запросов в Среда Management Studio и хотите запретить другим приложениям использовать единственное доступное подключение. |
-f | Разрешает только одно соединение и запускает экземпляр в минимальной конфигурации. | Когда запуску препятствует какая-либо другая конфигурация. |
Пошаговые инструкции
Далее приводятся пошаговые инструкции по предоставлению системному администратору, доступ которого было по ошибке заблокирован, разрешений для входа в SQL Server.
- SQL Server запущен в Windows 8 или более поздней версии. Небольшие изменения для предыдущих версий SQL Server или Windows приведены там, где применимо.
- На компьютере установлена среда SQL Server Management Studio.
Следуйте этим инструкциям, выполнив вход в систему Windows в качестве члена локальной группы администраторов.
- В меню «Пуск» Windows правой кнопкой мыши щелкните значок диспетчера конфигурации SQL Server и выберите пункт Запуск от имени администратора, чтобы передать учетные данные администратора в диспетчер конфигурации.
- На левой панели диспетчера конфигурации SQL Server выберите Службы SQL Server. На панели справа найдите свой экземпляр SQL Server. (Экземпляр по умолчанию SQL Server включает (MSSQLSERVER) после имени компьютера. Именованные экземпляры появляются в верхнем регистре с тем же названием, что и в списке «зарегистрированные серверы»). Щелкните правой кнопкой мыши экземпляр SQL Server, а затем выберите пункт Свойства.
- На вкладке Параметры запуска в поле Укажите параметр запуска введите параметр -m и нажмите кнопку Добавить. (Это дефис, затем буква «m» в нижнем регистре.)
Примечание. В некоторых предыдущих версиях SQL Server нет вкладки Параметры запуска . В этом случае на вкладке Дополнительно дважды щелкните Параметры запуска. Параметры открываются в очень маленьком окне. Не изменяйте существующие параметры. В самом конце добавьте новый параметр ;-m и нажмите кнопку ОК. (Это точка с запятой, затем дефис, затем буква «m» в нижнем регистре.)
4. Нажмите кнопку ОК, а после сообщения о перезагрузке щелкните правой кнопкой мыши имя сервера и выберите пункт Перезапустить.
5. После перезагрузки SQL Server ваш сервер находится в однопользовательском режиме. Убедитесь, что агент SQL Server не выполняется. Если он был запущен, то он займет ваше единственное соединение.
6. В меню «Пуск» Windows щелкните правой кнопкой мыши значок Среда Management Studio и выберите пункт Запуск от имени администратора. Учетные данные администратора будут переданы в SSMS.
Примечание. В более ранних версиях Windows параметр Запуск от имени администратора появляется в виде подменю.
В некоторых конфигурациях SSMS попытается установить несколько подключений. Многочисленные соединения приведут к ошибке, поскольку SQL Server находится в однопользовательском режиме. Выполните одно из следующих действий, соответствующее вашему сценарию.
a. Подключитесь с помощью обозревателя объектов, используя проверку подлинности Windows (которая включает учетные данные администратора). Разверните Безопасность, затем Имена входа и дважды щелкните имя входа. На странице Роли сервера выберите sysadmin и нажмите ОК.
b. Вместо соединения с помощью обозревателя объектов подключитесь с помощью окна запросов, используя проверку подлинности Windows (которая включает учетные данные администратора). (Подключиться подобным образом можно только в том случае, если подключение не выполнено с помощью обозревателя объектов.) Выполните следующий код, чтобы добавить новое имя входа для проверки подлинности Windows, которое является членом предопределенной роли сервера sysadmin . В следующем примере создается пользователь с именем CONTOSOPatK .
CREATE LOGIN [CONTOSOPatK] FROM WINDOWS; ALTER SERVER ROLE sysadmin ADD MEMBER [CONTOSOPatK];
c. Если экземпляр SQL Server работает в режиме смешанной проверки подлинности, подключитесь к окну запросов при помощи проверки подлинности Windows (которая включает учетные данные администратора). Выполните следующий код, чтобы создать новое имя входа для проверки подлинности в SQL Server, которое является членом предопределенной роли сервера sysadmin.
CREATE LOGIN TempLogin WITH PASSWORD = ‘************’; ALTER SERVER ROLE sysadmin ADD MEMBER TempLogin;
Предупреждение. Замените ************ надежным паролем.
d. Если экземпляр SQL Server работает в режиме смешанной проверки подлинности и требуется изменить пароль для учетной записи sa , подключитесь к окну запросов с использованием проверки подлинности Windows (которая включает учетные данные администратора). Измените пароль учетной записи sa с помощью следующей команды.
ALTER LOGIN sa WITH PASSWORD = ‘************’;
Предупреждение. Замените ************ надежным паролем.
7. Закройте среду Среда Management Studio.
8. Следующие действия позволят переключить SQL Server в многопользовательский режим. На левой панели диспетчера конфигурации SQL Server выберите Службы SQL Server.
9. На правой панели щелкните экземпляр SQL Serverправой кнопкой мыши и выберите пункт Свойства.
10. На вкладке Параметры запуска в поле Существующие параметры выберите -m и нажмите кнопку Удалить.
Примечание. В некоторых предыдущих версиях SQL Server нет вкладки Параметры запуска . В этом случае на вкладке Дополнительно дважды щелкните Параметры запуска. Параметры открываются в очень маленьком окне. Удалите ;-m , добавленный ранее, и нажмите ОК.
11. Щелкните правой кнопкой мыши имя сервера и выберите пункт Перезапустить. Не забудьте запустить агент SQL Server еще раз, если он был остановлен перед запуском SQL Server в однопользовательском режиме.
Теперь можно подключиться к одной из учетных записей, которая является членом предопределенной роли сервера sysadmin .
Источник: bookflow.ru