Подтвердить что ты не робот

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

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

"СОЗДАТЬ РАЗРЕШЕНИЕ БАЗЫ ДАННЫХ ПОЛОЖЕНИЯ"

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

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

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

4b9b3361

Ответ 1

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

Изменение: Изменена мертвая ссылка, чтобы указать на archive.org. Оригинальный пост здесь

Ответ 2

Откройте окно командной строки. Если у вас уже есть экземпляр 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 только одно соединение SQLCMD (из другого окна командной строки).

sqlservr -m"SQLCMD"

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

sqlcmd

И нажмите enter. Теперь вы можете выполнять инструкции 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 или команда никогда не выполняется.

Ответ 3

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

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

Загрузите ссылку на script

Описание

Эта команда script позволяет вам легко добавить себя в sysadmin роль локального экземпляра SQL Server. Вы должны быть членом Группа локальных администраторов Windows или доступ к учетным данным пользователя. script поддерживает SQL Server 2005 и более поздние версии.

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

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

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

Примечание. Вам нужно будет предоставить 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

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

Ответ 5

У 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". Это должно потребовать разрешения для запуска в качестве администратора, а затем открыть программу Configuration Manager.

Закрыть Management Studio.

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

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

Заметка

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

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

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

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

Заметка

Для более ранних версий Windows параметр "Запуск от имени администратора" отображается как под -m enu.

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

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

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

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

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 = '************';   Warning

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

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

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

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

Заметка

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

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

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

Ответ 6

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

Параметры запуска службы броузера базы данных

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