로컬 SQL Server 인스턴스에 대한 관리자 액세스 권한을 자신에게 부여하려면 어떻게 해야 합니까?
SQL Server 2008 R2를 로컬 컴퓨터에 설치했습니다.그러나 권한(또는 권한 없음)으로 인해 새 데이터베이스를 만들 수 없습니다.
"데이터베이스 생성 권한이 거부되었습니다."
그래서 현재 로그인에 관리자 권한을 할당하려고 했습니다.
"사용자에게 이 작업을 수행할 수 있는 권한이 없습니다.
또한 관리자 권한을 가지지만 성공하지 못하는 새 로그인을 생성하려고 했습니다.데이터베이스를 작성하기 위해 자신에게 관리자 권한을 부여하려면 어떻게 해야 합니까?재인스톨은 가능하지만, 하고 싶지 않습니다.
명령 프롬프트창을 엽니다SQL Server 기본 인스턴스가 이미 실행 중인 경우 명령 프롬프트에서 다음 명령을 실행하여 SQL Server 서비스를 중지합니다.
net stop mssqlserver
이제 SQL Server가 설치된 디렉토리로 이동합니다.예를 들어 디렉토리는 다음 중 하나입니다.
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
1개만 됩니다.SQLCMD
(다른 명령어프롬프트 창에서) 접속할 수 있습니다.
sqlservr -m"SQLCMD"
이제 위의 단일 사용자 모드에서 SQL Server를 시작한 사용자와 동일한 사용자로 다른 명령 프롬프트 창을 열고 다음 작업을 수행합니다.
sqlcmd
그리고 Enter 키를 누릅니다.이제 단일 사용자 모드에서 실행되는 SQL Server 인스턴스에 대해 SQL 문을 실행할 수 있습니다.
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
그렇지 않으면 명령어가 실행되지 않습니다.
예 - SQL Server 설치 시 sysadmin 역할에 자신을 추가하는 것을 잊은 것 같습니다.머신의 로컬 관리자라면 이 블로그 투고를 통해 SQLCMD를 사용하여 계정을 SQL Server sysadmin 그룹에 재설치하지 않고도 추가할 수 있습니다.SQL Server의 보안 취약점이긴 하지만 이 경우 도움이 될 것입니다.
SQL 2012 데이터베이스를 도입했습니다.이 데이터베이스에서는 sysadmin이 아닌 머신의 관리자였습니다."Run as Administrator"에서 SSMS를 사용하여 내 NT 계정을 SQL 로그인으로 추가하고 서버 역할을 sysadmin으로 설정했습니다.괜찮아요.
여기 이 문제를 해결할 수 있다고 주장하는 스크립트가 있습니다.
이 간단한 스크립트를 사용하여 로컬 SQL Server Express에 대한 관리자 권한을 얻으십시오.
묘사
이 명령어 스크립트를 사용하면 로컬 SQL Server 인스턴스의 sysadmin 역할에 쉽게 자신을 추가할 수 있습니다.Windows 로컬 관리자 그룹의 멤버이거나 사용자의 자격 증명에 액세스할 수 있어야 합니다.이 스크립트는 SQL Server 2005 이후를 지원합니다.
이 스크립트는 다른 사용자가 설치한 SQL Server 2008 Express를 사용하려는 개발자인 경우에 가장 유용합니다.기본적으로는 SQL Server 2008을 설치하는 사용자만 관리자 권한을 부여받기 때문에 이 상황에서는 일반적으로 SQL Server 2008 Express 인스턴스에 대한 관리자 권한이 없습니다.
SQL Server 2008 Express를 설치한 사용자는 SQL Server Management Studio를 사용하여 필요한 권한을 부여할 수 있습니다.그러나 SQL Server Management Studio가 설치되어 있지 않으면 어떻게 됩니까?또는 설치 사용자가 더 이상 사용할 수 없게 되면 더 나빠집니까?
이 스크립트는 몇 번의 클릭만으로 문제를 해결합니다.
주의: 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 에서는, 이 문제에 관한 기사를 게재되어 있습니다.차근차근 진행됩니다.
, 를 "sqlserver"로 입니다.-m
, 더 상세한 하고 있습니다.만만 、 Microsoft 는는더 microsoft microsoft microsoft 。
시작 페이지에서 SQL Server Management Studio를 시작합니다.[보기] 메뉴에서 [등록된 서버]를 선택합니다(서버가 아직 등록되지 않은 경우 [로컬 서버 그룹]을 마우스 오른쪽 버튼으로 누르고 [작업]을 가리킨 다음 [로컬 서버 등록]을 누르십시오).
등록된 서버 영역에서 서버를 마우스 오른쪽 버튼으로 누른 다음 SQL 서버 구성 관리자를 누르십시오.관리자 권한으로 실행할 수 있는지 물어보고 Configuration Manager 프로그램을 엽니다.
Management Studio를 닫습니다.
SQL Server Configuration Manager의 왼쪽 창에서 SQL Server 서비스를 선택합니다.오른쪽 창에서 SQL Server 인스턴스를 찾으십시오(SQL Server의 기본 인스턴스는 시스템 이름 뒤에 (MSSQLSERVER)를 포함합니다).이름 있는 인스턴스는 Registered Servers와 같은 이름으로 대문자로 표시됩니다.)SQL 서버 인스턴스를 마우스 오른쪽 버튼으로 누른 다음 속성을 누르십시오.
시작 매개 변수 탭의 시작 매개 변수 지정 상자에 -m을 입력한 다음 추가를 누르십시오(대시 뒤에 소문자 m이 표시됨).
메모
일부 이전 버전의 SQL Server에는 시작 매개 변수 탭이 없습니다.이 경우 고급 탭에서 시작 매개 변수를 두 번 누르십시오.파라미터는 매우 작은 창에 열립니다.기존 파라미터를 변경하지 않도록 주의하십시오.맨 끝에 새 매개 변수 ;-m을 추가한 다음 확인을 클릭합니다(반콜론 다음에 대시, 소문자 m).
확인을 누른 후 재시작할 메시지가 나타나면 서버 이름을 마우스 오른쪽 버튼으로 누른 후 재시작을 누르십시오.
SQL Server가 재시작되면 서버는 싱글 사용자 모드가 됩니다.SQL Server 에이전트가 실행되고 있지 않은지 확인하십시오.기동하면, 유일한 접속이 필요하게 됩니다.
Windows 8 의 기동 화면에서, Management Studio 의 아이콘을 오른쪽 클릭합니다.화면 하단에서 Run as administrator를 선택합니다.(관리자 credential이 SSMS로 전달됩니다).
메모
이전 버전의 윈도우즈에서는 관리자로 실행 옵션이 하위 메뉴로 표시됩니다.
구성에 따라서는 SSMS가 여러 연결을 시도합니다.SQL Server가 단일 사용자 모드이므로 여러 연결이 실패합니다.수행할 다음 작업 중 하나를 선택할 수 있습니다.다음 중 하나를 수행합니다.
a) Windows 인증(관리자 자격 정보 포함)을 사용하여 오브젝트 탐색기와 연결합니다.[보안(Security)]를 펼쳐 [로그인(Logins)]를 펼쳐 자신의 로그인을 더블 클릭합니다.서버 역할 페이지에서 sysadmin을 선택한 다음 확인을 누르십시오.
b) 오브젝트익스플로러를 사용하여 접속하는 대신 Windows 인증(관리자 자격 정보 포함)을 사용하여 쿼리 창에 접속합니다.(오브젝트 탐색기에 연결하지 않은 경우에만 이 방법으로 연결할 수 있습니다.)다음과 같은 코드를 실행하여 sysadmin 고정 서버 역할의 구성원인 새로운 Windows 인증 로그인을 추가합니다.다음 예제에서는 CONTOSO\PatK라는 도메인 사용자를 추가합니다.
CREATE LOGIN [CONTOSO\PatK] FROM WINDOWS; ALTER SERVER ROLE sysadmin ADD MEMBER [CONTOSO\PatK];
c) SQL Server가 혼합 인증 모드로 실행되고 있는 경우 Windows 인증(관리자 자격 정보 포함)을 사용하여 쿼리 창에 연결합니다.다음과 같은 코드를 실행하여 sysadmin 고정 서버 역할의 구성원인 새 SQL Server 인증 로그인을 만듭니다.
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 Configuration Manager의 왼쪽 창에서 SQL Server 서비스를 선택합니다.오른쪽 창에서 SQL 서버 인스턴스를 마우스 오른쪽 버튼으로 누른 다음 속성을 누르십시오.
시작 매개 변수 탭의 기존 매개 변수 상자에서 -m을 선택한 다음 제거를 누르십시오.
메모
일부 이전 버전의 SQL Server에는 시작 매개 변수 탭이 없습니다.이 경우 고급 탭에서 시작 매개 변수를 두 번 누르십시오.파라미터는 매우 작은 창에 열립니다.이전에 추가한 ;-m을 제거한 다음 확인을 누르십시오.
서버 이름을 마우스 오른쪽 버튼으로 누르고 재시작을 누르십시오.
이제 sysadmin 고정 서버 역할의 멤버가 된 계정 중 하나와 정상적으로 연결할 수 있습니다.
실제로 SQL Server Configuration Manager의 시작 파라미터에 -m을 추가하고 서비스를 재시작한 후 계정의 ssms 및 add sysadmin 체크박스로 이동한 후 다시 -m 재시작을 삭제하고 평소처럼 사용할 수 있습니다.
-m 단일 사용자 모드에서 SQL Server 인스턴스를 시작합니다.
다른 답변은 시각적인 스크린샷에 없습니다.이것은 마이크로소프트의 문서를 간결하게 정리한 버전입니다.
[시작] 메뉴를 열고 [SQL Server Configuration Manager]아이콘을 오른쪽 클릭하여 [관리자로서 실행]를 선택합니다.
SQL 서버 인스턴스를 마우스 오른쪽 버튼으로 누른 다음 속성을 선택하십시오.
- 여기서는 SQL Server를 싱글 사용자 모드로 시작하도록 설정합니다.
[ Startup Parameters ]탭에서 다음 중 하나를 추가합니다.
a) SQL Server를 싱글 사용자 모드로 실행합니다.
-m
b) 싱글 유저 모드로 SQL Server를 실행하고 SSMS를 통한 무제한 접속을 허용합니다.
-m"Microsoft SQL Server Management Studio - Query"
(b)를 강력히 추천합니다.이 기능이 없으면 개체 탐색기를 열고 새 쿼리를 열 수도 없습니다.이는 2개의 접속으로 간주되기 때문에 싱글 유저 모드로 동작하고 있기 때문에 허가되지 않습니다.
-m 옵션 뒤에 응용 프로그램 이름을 추가함으로써 해당 응용 프로그램을 통해 무제한 연결을 허용합니다.
일부 이전 버전의 SQL Server에는 시작 매개 변수 탭이 없습니다.이 경우 고급 탭에서 시작 매개 변수를 두 번 누르십시오.파라미터가 작은 창에 열립니다.기존 파라미터를 변경하지 않도록 주의하십시오.맨 끝에 새 매개 변수 ;-m을 추가한 다음 확인을 선택합니다(반콜론 다음에 대시, 소문자 m).
- 서버명을 오른쪽 클릭하고,[재시작] 을 선택합니다.
- SQL Server가 재시작되면 서버는 단일 사용자 모드가 됩니다.SQL Server 에이전트가 실행되고 있지 않은지 확인하십시오.기동하면, 유일한 접속이 필요하게 됩니다.또한 SQL 보고서 서비스, 분석 서비스, SSIS 및 SQL 서버 엔진을 제외한 모든 기능을 비활성화합니다.
- 윈도우즈 시작 메뉴에서 Management Studio를 마우스 오른쪽 버튼으로 클릭하고 관리자 권한으로 실행을 선택합니다.관리자 자격 증명이 SSMS로 전달됩니다.
a) 오브젝트 탐색기로 연결합니다.[보안(Security)]를 펼쳐 [로그인(Logins)]를 펼쳐 자신의 로그인을 오른쪽 클릭합니다.서버 역할 페이지에서 sysadmin을 선택합니다.
- Management Studio를 닫습니다.
다음 몇 가지 단계를 수행하면 SQL Server가 다시 다중 사용자 모드로 변경됩니다.(3)에서 (5)의 순서를 원래대로 되돌릴 필요가 있습니다.
SQL 서버 구성 관리자의 오른쪽 창에서 SQL 서버 인스턴스를 마우스 오른쪽 버튼으로 누른 다음 속성을 선택하십시오.
시작 매개 변수 탭의 기존 매개 변수 상자에서 -m을 선택한 다음 제거를 선택하십시오.
SQL Server 서비스를 재시작하고 필요에 따라 SQL Server 에이전트, Reporting Services 등을 다시 활성화합니다.
레퍼런스,
버그를 테스트하고 있을 때 MS SQL Server 2019에서 sysadmin 권한을 의도적으로 삭제했습니다.싱글 유저 모드를 사용해 재인스톨 하지 않고 SSMS에 admin으로 로그인 할 수 있었습니다.이 머신의 관리자이기 때문에, 재인스톨 할 수 없습니다.
- SQL Server 2019 Configuration Manager로 이동하여 SQL 인스턴스(노드 SQL Server Services-> SQL Server(your instancename))의 서비스를 중지합니다.
- 속성(노드 SQL Server 서비스 -> SQL Server(yourinstancename) -> 속성 -> 시작 파라미터)에서 다음과 같이 입력합니다.
-m
[Add] 버튼과 [Apply]버튼을 클릭합니다(이 2개의 기호가 있는 행만 표시).-m
[기존 파라미터(Existing parameters)]를 선택합니다). - OK를 눌러 확인합니다.
- 이전에 중지된 서비스를 시작합니다.
- SSMS를 admin으로 기동합니다.
- 사용자에게 sysadmin 권한을 추가합니다(보안 -> 로그인 -> 신규 로그인 -> 서버 역할).
- 이전에 추가한 -m 스타트업 파라미터를 삭제합니다.
- SQL Server 서비스를 재시작합니다.
도메인 사용자를 추가하려는 경우 이 스크립트를 통해 시간을 절약할 수 있습니다.
--
-- 1) CREATE LOGIN domain\USERNAME
--
DECLARE @domain VARCHAR(MAX);
DECLARE @template VARCHAR(MAX)
DECLARE @sql VARCHAR(MAX)
SET @domain = DEFAULT_DOMAIN();
SET @template = 'CREATE LOGIN "{domain}\USERNAME" FROM WINDOWS WITH DEFAULT_DATABASE=[master], DEFAULT_LANGUAGE=[us_english]'
SET @sql = REPLACE(@template, '{domain}', @domain)
EXECUTE (@sql)
--
-- 2) GRANT SYSADMIN server level permission on domain\USERNAME
--
DECLARE @domain VARCHAR(MAX);
DECLARE @template VARCHAR(MAX)
DECLARE @sql VARCHAR(MAX)
SET @domain = DEFAULT_DOMAIN();
SET @template = 'EXEC sp_addsrvrolemember @loginame = N''{domain}\USERNAME '', @rolename = N''sysadmin'''
SET @sql = REPLACE(@template, '{domain}', @domain)
EXECUTE (@sql)
「USERNAME」을 자신의 유저명으로 치환하는 것만으로 끝납니다.DEFAULT_DOMAIN()을 사용하여 동적으로 계산되므로 도메인을 입력할 필요가 없습니다.재미있는 사실: 다른 도메인의 여러 데이터베이스에 동일한 사용자를 빠르게 추가할 수도 있습니다.SSMS의 "여러 데이터베이스에서 쿼리 실행" 기능을 사용하여 이 명령을 실행합니다.
언급URL : https://stackoverflow.com/questions/9889334/how-do-i-grant-myself-admin-access-to-a-local-sql-server-instance
'sourcecode' 카테고리의 다른 글
SQL Server에 Excel 파일을 Import하려면 어떻게 해야 합니까? (0) | 2023.04.09 |
---|---|
xargs를 사용한 호출 셸 함수 (0) | 2023.04.09 |
반응 npm start not work : '사용 가능한 chokidar 버전이 없습니다.' (0) | 2023.04.04 |
react-select에서 기본값을 설정하는 방법 (0) | 2023.04.04 |
angularjs - ng-switch가 ng-model을 바인드하지 않음 (0) | 2023.04.04 |