Я установил SQL Server 2008 R2 на свой локальный компьютер. Но я не могу создать новую базу данных из-за прав (или их отсутствия).
"РАЗРЕШЕНИЕ НА СОЗДАНИЕ БАЗЫ ДАННЫХ ОТКАЗАНО"
Итак, я попытался назначить права администратора моему текущему логину
«У пользователя нет разрешения на выполнение этого действия».
Я также попытался создать новый логин с правами администратора, но безуспешно. Как мне предоставить права администратора, чтобы я мог создать базу данных? Я могу переустановить, но предпочитаю этого не делать.
sql
sql-server
sql-server-2008
ssms
sqlcmd
SkonJeet
источник
источник
Ответы:
Да - похоже, вы забыли добавить себя к роли sysadmin при установке SQL Server. Если вы являетесь локальным администратором на своем компьютере, это сообщение в блоге может помочь вам использовать SQLCMD для включения вашей учетной записи в группу системных администраторов SQL Server без необходимости переустановки. Если вы спросите меня, это небольшая дыра в безопасности SQL Server, но в этом случае она вам поможет.
источник
Откройте окно командной строки. Если у вас уже запущен экземпляр SQL Server по умолчанию, выполните следующую команду в командной строке, чтобы остановить службу SQL Server:
net stop mssqlserver
Теперь перейдите в каталог, в котором установлен SQL-сервер. Например, каталог может быть одним из следующих:
Выясните свой каталог MSSQL и откройте
CD
его как таковой:Теперь выполните следующую команду, чтобы запустить SQL Server в однопользовательском режиме. Как
SQLCMD
указано,SQLCMD
может быть выполнено только одно соединение (из другого окна командной строки).Теперь откройте другое окно командной строки от имени того же пользователя, который запустил SQL Server в однопользовательском режиме выше, и в нем выполните:
И нажмите ввод. Теперь вы можете выполнять операторы 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
иначе команда никогда не будет выполнена.источник
ALTER SERVER ROLE
. напримерALTER SERVER ROLE [sysadmin] ADD MEMBER [domain\username]
GO;
в концеЯ принял базу данных SQL 2012, в которой я не был системным администратором, а был администратором на машине. Я использовал SSMS с «Запуском от имени администратора», добавил мою учетную запись NT в качестве имени входа SQL и установил роль сервера как sysadmin. Нет проблем.
источник
Вот сценарий, который утверждает, что может это исправить.
Получите права администратора на локальном SQL Server Express с помощью этого простого скрипта
Ссылка на скачивание скрипта
Примечание. Вам нужно будет предоставить BAT-файлу «Имя экземпляра» (возможно, это будет «MSSQLSERVER» - но это может быть не так): вы можете получить значение, сначала запустив следующее в «Microsoft SQL Server Management Console» ":
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
источник
Microsoft ® Windows Based Script Host
сопоставленное с файлом, иначе это вуду не будет работать (у меня было сопоставление с notepad.exe).У 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 предоставляет несколько более подробные инструкции.источник
На самом деле достаточно добавить -m к параметрам запуска в Sql Server Configuration Manager, перезапустить службу, перейти к ssms, добавить флажок sysadmin в вашей учетной записи, затем снова удалить -m restart и использовать как обычно.
Параметры запуска службы ядра СУБД
источник