Как мне предоставить администратору доступ к локальному экземпляру SQL Server? - PullRequest
85 голосов
/ 27 марта 2012

Я установил SQL Server 2008 R2 на свой локальный компьютер. Но я не могу создать новую базу данных из-за прав (или отсутствия).

"ОТКАЗ В РАЗРЕШЕНИИ СОЗДАНИЯ БАЗЫ ДАННЫХ"

Итак, я попытался назначить права администратора моему текущему логину

«У пользователя нет прав на выполнение этого действия.»

Я также пытался создать новый логин, который имел бы права администратора, но безуспешно. Как мне предоставить права администратора, чтобы я мог создать базу данных? Я могу переустановить, но я предпочитаю этого не делать.

Ответы [ 6 ]

66 голосов
/ 27 марта 2012

Да - похоже, вы забыли добавить себя в роль sysadmin при установке SQL Server. Если вы являетесь локальным администратором на своем компьютере, эта запись в блоге может помочь вам использовать SQLCMD, чтобы перевести вашу учетную запись в группу системных администраторов SQL Server без необходимости переустановки. Это немного дыра в безопасности в SQL Server, если вы спросите меня, но это поможет вам в этом случае.

64 голосов
/ 27 марта 2012

Открыть окно командной строки. Если у вас уже есть экземпляр SQL Server по умолчанию, выполните следующую команду в командной строке, чтобы остановить службу SQL Server:

net stop mssqlserver

Теперь перейдите в каталог, где установлен SQL-сервер. Каталог, например, может быть одним из следующих:

C:\Program Files\Microsoft SQL Server\MSSQL10_50.MSSQLSERVER\MSSQL\Binn
C:\Program Files\Microsoft SQL Server\MSSQL13.MSSQLSERVER\MSSQL\Binn

Определите ваш каталог MSSQL и CD в него как таковой:

CD C:\Program Files\Microsoft SQL Server\MSSQL10_50.MSSQLSERVER\MSSQL\Binn

Теперь выполните следующую команду, чтобы запустить SQL Server в однопользовательском режиме. Как SQLCMD указывается, может быть установлено только одно SQLCMD соединение (из другого окна командной строки).

sqlservr -m"SQLCMD"

Теперь откройте другое окно командной строки того же пользователя, что и тот, который запускал SQL Server в однопользовательском режиме выше, и в нем запустите:

sqlcmd

и нажмите ввод. Теперь вы можете выполнять операторы SQL для экземпляра SQL Server, работающего в однопользовательском режиме:

create login [<<DOMAIN\USERNAME>>] from windows;

-- For older versions of SQL Server:
EXEC sys.sp_addsrvrolemember @loginame = N'<<DOMAIN\USERNAME>>', @rolename = N'sysadmin';

-- For newer versions of SQL Server:
ALTER SERVER ROLE [sysadmin] ADD MEMBER [<<DOMAIN\USERNAME>>];

GO

Источник .

ОБНОВЛЕНО Не забывайте точку с запятой после ALTER SERVER ROLE [sysadmin] ADD MEMBER [<<DOMAIN\USERNAME>>]; и не добавляйте дополнительную точку с запятой после GO, иначе команда не будет выполнена.

31 голосов
/ 15 августа 2014

Я принял базу данных SQL 2012, где я не был системным администратором, но был администратором на машине.Я использовал SSMS с «Запуск от имени администратора», добавил свою учетную запись NT в качестве имени входа SQL и назначил роль сервера sysadmin.Нет проблем.

29 голосов
/ 27 марта 2012

Вот скрипт, который утверждает, что может это исправить.

Получите права администратора для своего локального SQL Server Express с помощью этого простого сценария

Ссылка для скачивания скрипта

Описание

Этот командный скрипт позволяет легко добавить себя в системный администратор. роль локального экземпляра SQL Server. Вы должны быть членом Локальная группа администраторов Windows, или иметь доступ к учетным данным пользователя, который есть. Сценарий поддерживает SQL Server 2005 и более поздние версии.

Сценарий наиболее полезен, если вы разработчик, пытающийся использовать SQL Server 2008 Express, который был установлен кем-то другим. В этом Ситуация у вас обычно не будет прав администратора на SQL Server 2008 Экспресс-экземпляр, так как по умолчанию только тот, кто устанавливает SQL Server 2008 предоставлены административные привилегии.

Пользователь, установивший SQL Server 2008 Express, может использовать SQL Server. Студия управления предоставит вам необходимые привилегии. Но что если SQL Server Management Studio не был установлен? Или хуже, если Установочный пользователь больше не доступен?

Этот скрипт устраняет проблему всего за несколько кликов!

Примечание. Вам нужно будет предоставить BAT-файл с именем экземпляра (вероятно, это будет «MSSQLSERVER» - но это может быть не так): вы можете получить значение, сначала выполнив следующую команду в «Microsoft SQL» Консоль управления сервером ":

 SELECT @@servicename

Затем скопируйте результат для использования, когда BAT-файл запрашивает «Имя экземпляра SQL».

  @echo off 
    rem 
    rem **************************************************************************** 
    rem 
    rem    Copyright (c) Microsoft Corporation. All rights reserved. 
    rem    This code is licensed under the Microsoft Public License. 
    rem    THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF 
    rem    ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY 
    rem    IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR 
    rem    PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT. 
    rem 
    rem **************************************************************************** 
    rem 
    rem CMD script to add a user to the SQL Server sysadmin role 
    rem 
    rem Input:  %1 specifies the instance name to be modified. Defaults to SQLEXPRESS. 
    rem         %2 specifies the principal identity to be added (in the form "<domain>\<user>"). 
    rem            If omitted, the script will request elevation and add the current user (pre-elevation) to the sysadmin role. 
    rem            If provided explicitly, the script is assumed to be running elevated already. 
    rem 
    rem Method: 1) restart the SQL service with the '-m' option, which allows a single connection from a box admin 
    rem            (the box admin is temporarily added to the sysadmin role with this start option) 
    rem         2) connect to the SQL instance and add the user to the sysadmin role 
    rem         3) restart the SQL service for normal connections 
    rem 
    rem Output: Messages indicating success/failure. 
    rem         Note that if elevation is done by this script, a new command process window is created: the output of this 
    rem         window is not directly accessible to the caller. 
    rem 
    rem 
    setlocal 
    set sqlresult=N/A 
    if .%1 == . (set /P sqlinstance=Enter SQL instance name, or default to SQLEXPRESS: ) else (set sqlinstance=%1) 
    if .%sqlinstance% == . (set sqlinstance=SQLEXPRESS) 
    if /I %sqlinstance% == MSSQLSERVER (set sqlservice=MSSQLSERVER) else (set sqlservice=MSSQL$%sqlinstance%) 
    if .%2 == . (set sqllogin="%USERDOMAIN%\%USERNAME%") else (set sqllogin=%2) 
    rem remove enclosing quotes 
    for %%i in (%sqllogin%) do set sqllogin=%%~i 
    @echo Adding '%sqllogin%' to the 'sysadmin' role on SQL Server instance '%sqlinstance%'. 
    @echo Verify the '%sqlservice%' service exists ... 
    set srvstate=0 
    for /F "usebackq tokens=1,3" %%i in (`sc query %sqlservice%`) do if .%%i == .STATE set srvstate=%%j 
    if .%srvstate% == .0 goto existerror 
    rem 
    rem elevate if <domain/user> was defaulted 
    rem 
    if NOT .%2 == . goto continue 
    echo new ActiveXObject("Shell.Application").ShellExecute("cmd.exe", "/D /Q /C pushd \""+WScript.Arguments(0)+"\" & \""+WScript.Arguments(1)+"\" %sqlinstance% \""+WScript.Arguments(2)+"\"", "", "runas"); >"%TEMP%\addsysadmin{7FC2CAE2-2E9E-47a0-ADE5-C43582022EA8}.js" 
    call "%TEMP%\addsysadmin{7FC2CAE2-2E9E-47a0-ADE5-C43582022EA8}.js" "%cd%" %0 "%sqllogin%" 
    del "%TEMP%\addsysadmin{7FC2CAE2-2E9E-47a0-ADE5-C43582022EA8}.js" 
    goto :EOF 
    :continue 
    rem 
    rem determine if the SQL service is running 
    rem 
    set srvstarted=0 
    set srvstate=0 
    for /F "usebackq tokens=1,3" %%i in (`sc query %sqlservice%`) do if .%%i == .STATE set srvstate=%%j 
    if .%srvstate% == .0 goto queryerror 
    rem 
    rem if required, stop the SQL service 
    rem 
    if .%srvstate% == .1 goto startm 
    set srvstarted=1 
    @echo Stop the '%sqlservice%' service ... 
    net stop %sqlservice% 
    if errorlevel 1 goto stoperror 
    :startm 
    rem 
    rem start the SQL service with the '-m' option (single admin connection) and wait until its STATE is '4' (STARTED) 
    rem also use trace flags as follows: 
    rem     3659 - log all errors to errorlog 
    rem     4010 - enable shared memory only (lpc:) 
    rem     4022 - do not start autoprocs 
    rem 
    @echo Start the '%sqlservice%' service in maintenance mode ... 
    sc start %sqlservice% -m -T3659 -T4010 -T4022 >nul 
    if errorlevel 1 goto startmerror 
    :checkstate1 
    set srvstate=0 
    for /F "usebackq tokens=1,3" %%i in (`sc query %sqlservice%`) do if .%%i == .STATE set srvstate=%%j 
    if .%srvstate% == .0 goto queryerror 
    if .%srvstate% == .1 goto startmerror 
    if NOT .%srvstate% == .4 goto checkstate1 
    rem 
    rem add the specified user to the sysadmin role 
    rem access tempdb to avoid a misleading shutdown error 
    rem 
    @echo Add '%sqllogin%' to the 'sysadmin' role ... 
    for /F "usebackq tokens=1,3" %%i in (`sqlcmd -S np:\\.\pipe\SQLLocal\%sqlinstance% -E -Q "create table #foo (bar int); declare @rc int; execute @rc = sp_addsrvrolemember '$(sqllogin)', 'sysadmin'; print 'RETURN_CODE : '+CAST(@rc as char)"`) do if .%%i == .RETURN_CODE set sqlresult=%%j 
    rem 
    rem stop the SQL service 
    rem 
    @echo Stop the '%sqlservice%' service ... 
    net stop %sqlservice% 
    if errorlevel 1 goto stoperror 
    if .%srvstarted% == .0 goto exit 
    rem 
    rem start the SQL service for normal connections 
    rem 
    net start %sqlservice% 
    if errorlevel 1 goto starterror 
    goto exit 
    rem 
    rem handle unexpected errors 
    rem 
    :existerror 
    sc query %sqlservice% 
    @echo '%sqlservice%' service is invalid 
    goto exit 
    :queryerror 
    @echo 'sc query %sqlservice%' failed 
    goto exit 
    :stoperror 
    @echo 'net stop %sqlservice%' failed 
    goto exit 
    :startmerror 
    @echo 'sc start %sqlservice% -m' failed 
    goto exit 
    :starterror 
    @echo 'net start %sqlservice%' failed 
    goto exit 
    :exit 
    if .%sqlresult% == .0 (@echo '%sqllogin%' was successfully added to the 'sysadmin' role.) else (@echo '%sqllogin%' was NOT added to the 'sysadmin' role: SQL return code is %sqlresult%.) 
    endlocal 
    pause
4 голосов
/ 13 марта 2018

Microsoft имеет статью об этой проблеме. Все это проходит шаг за шагом.

https://docs.microsoft.com/en-us/sql/database-engine/configure-windows/connect-to-sql-server-when-system-administrators-are-locked-out

Короче говоря, это включает запуск экземпляра sqlserver с -m, как и все остальные ответы. Однако Microsoft предоставляет чуть более подробные инструкции.

На начальной странице запустите SQL Server Management Studio. В меню «Вид» выберите «Зарегистрированные серверы». (Если ваш сервер еще не зарегистрирован, щелкните правой кнопкой мыши Группы локальных серверов, выберите Задачи, а затем нажмите Зарегистрировать локальные серверы.)

В области «Зарегистрированные серверы» щелкните правой кнопкой мыши свой сервер, а затем щелкните Диспетчер конфигурации SQL Server. Это должно попросить разрешения запустить от имени администратора, а затем открыть диспетчер конфигурации программа.

Закрыть Management Studio.

В диспетчере конфигурации SQL Server на левой панели выберите SQL Серверные услуги. На правой панели найдите свой экземпляр SQL Server. (Экземпляр SQL Server по умолчанию включает в себя (MSSQLSERVER) после Имя компьютера. Именованные экземпляры отображаются в верхнем регистре с тем же именем что они есть на зарегистрированных серверах.) Щелкните правой кнопкой мыши экземпляр SQL Сервер, а затем нажмите Свойства.

На вкладке Параметры запуска в поле Указать параметры запуска введите -m и нажмите кнопку Добавить. (Это тире, затем строчная буква m.)

Примечание

В некоторых более ранних версиях SQL Server отсутствуют параметры запуска Вкладка. В этом случае на вкладке «Дополнительно» дважды щелкните «Автозагрузка». Параметры. Параметры открываются в очень маленьком окне. Быть осторожен не изменять какие-либо из существующих параметров. В самом конце добавить новый параметр; -m, а затем нажмите кнопку ОК. (Это точка с запятой, затем тире затем строчная буква м.)

Нажмите кнопку ОК, и после сообщения для перезагрузки щелкните правой кнопкой мыши свой сервер. и нажмите «Перезагрузить».

После перезапуска SQL Server ваш сервер будет однопользовательским Режим. Убедитесь, что агент SQL Server не запущен. Если началось, это займет ваше единственное соединение.

На начальном экране Windows 8 щелкните правой кнопкой мыши значок управления Студия. В нижней части экрана выберите «Запуск от имени администратора». (Это передаст ваши учетные данные администратора в SSMS.)

Примечание

Для более ранних версий Windows, опция Запуск от имени администратора отображается как подменю.

В некоторых конфигурациях SSMS пытается установить несколько соединений. Несколько соединений не удастся, потому что SQL Server в однопользовательском Режим. Вы можете выбрать одно из следующих действий для выполнения. Выполните одно следующего.

a) Соединитесь с Object Explorer, используя проверку подлинности Windows (которая включает ваши учетные данные администратора). Развернуть Безопасность, развернуть Авторизуйтесь и дважды щелкните свой логин. На странице Роли сервера выберите системного администратора и нажмите кнопку ОК.

b) Вместо соединения с Object Explorer соединитесь с Query Окно с использованием аутентификации Windows (в том числе вашего администратора полномочия). (Вы можете подключиться таким образом, если вы не подключились с Object Explorer.) Выполните код, такой как следующий, чтобы добавить новый Вход для аутентификации Windows, который является членом фиксированного системного администратора роль сервера. В следующем примере добавляется пользователь домена с именем CONTOSO \ PatK.

CREATE LOGIN [CONTOSO\PatK] FROM WINDOWS;   ALTER SERVER ROLE
sysadmin ADD MEMBER [CONTOSO\PatK];   

в) Если ваш 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 = '************';   Warning

Замените ************ на надежный пароль.

Следующие шаги теперь переводят SQL Server обратно в многопользовательский режим. Закройте SSMS.

В диспетчере конфигурации SQL Server на левой панели выберите SQL Серверные услуги. На правой панели щелкните правой кнопкой мыши экземпляр SQL Сервер, а затем нажмите Свойства.

На вкладке Параметры запуска в поле Существующие параметры выберите и нажмите «Удалить».

Примечание

Для некоторых более ранних версий SQL Server отсутствуют параметры запуска Вкладка. В этом случае на вкладке «Дополнительно» дважды щелкните «Автозагрузка». Параметры. Параметры открываются в очень маленьком окне. Удалить ; -m, который вы добавили ранее, и нажмите кнопку ОК.

Щелкните правой кнопкой мыши имя своего сервера и выберите «Перезагрузить».

Теперь вы сможете нормально подключаться к одной из учетных записей. которая теперь является членом предопределенной роли сервера sysadmin.

2 голосов
/ 06 января 2016

На самом деле этого достаточно, чтобы добавить -m к параметрам запуска в Sql Server Configuration Manager, перезапустить службу, перейти к ssms, добавить флажок sysadmin в своей учетной записи, затем удалить -m перезагрузить и использовать как обычно.

Параметры запуска службы Database Engine

-m Запускает экземпляр SQL Server в однопользовательском режиме.

...