로컬 SQL Server 인스턴스에 대한 관리자 액세스 권한을 어떻게 부여합니까?
로컬 컴퓨터에 SQL Server 2008 R2를 설치했습니다. 그러나 권한 (또는 부족)으로 인해 새 데이터베이스를 만들 수 없습니다.
"데이터베이스 생성 권한이 거부되었습니다."
그래서 현재 로그인에 관리자 권한을 부여했습니다.
"사용자 에게이 작업을 수행 할 권한이 없습니다."
또한 관리자 권한이 만들 운이없는 새 로그인을 만들려고했습니다. 데이터베이스를 만들 수있는 권한을 어떻게 부여합니까? 다시 준비합니다.
예 -SQL Server를 사용할 때 sysadmin 역할에 자신을 추가하는 것을 잊은 것입니다. SQLCMD를 통해 컴퓨터의 로컬 관리자 인 경우 블로그 게시물 을 사용하여 다시 설치하지 SQL Server sysadmin 그룹에 계정을 추가 할 수 있습니다. 저에게 물어 보면 SQL Server에 약간의 보안 허점이 있다면 도움이 될 것입니다.
명령 프롬프트 창을 정렬 다. 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
그리고 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
소스 .
UPDATED 는 다음을 잊지 말고 세미콜론을 ALTER SERVER ROLE [sysadmin] ADD MEMBER [<<DOMAIN\USERNAME>>];
추가하지 않고 계속합니다. 않으면 오는가 GO
명령이 실행되지 않습니다.
저는 시스템 관리자가 아니라 SQL 2012 데이터베이스를 채택했습니다. "관리자 권한으로 실행"과 함께 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 관리 콘솔에서 먼저 다음을 실행하여 값을 수 있습니다.":
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에는이 문제에 대한 기사가 있습니다. 모든 단계를 단계별로 진행합니다.
요컨대 -m
다른 모든 답변이 제안하는 것처럼 sqlserver 인스턴스를 시작하는 것이 포함됩니다 . 그러나 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에서는 관리자 권한으로 실행 옵션이 하위 메뉴로 나타납니다.
일부 구성에서 SSMS는 여러 연결을 시도합니다. SQL Server가 단일 사용자 모드이기 때문에 다중 연결이 실패합니다. 수행 할 다음 작업 중 하나를 선택할 수 있습니다. 다음 중 하나를 수행하십시오.
a) Windows 인증 (관리자 자격 증명 포함)을 사용하여 개체 탐색기에 연결합니다. 보안을 확장하고 로그인을 확장 한 다음 자신의 로그인을 두 번 클릭합니다. 서버 역할 페이지에서 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 구성 관리자의 왼쪽 창에서 SQL Server 서비스를 선택합니다. 오른쪽 창에서 SQL Server 인스턴스를 마우스 오른쪽 단추로 클릭 한 다음 속성을 클릭합니다.
시작 매개 변수 탭의 기존 매개 변수 상자에서 -m을 선택한 다음 제거를 클릭합니다.
노트
일부 이전 버전의 SQL Server에는 시작 매개 변수 탭이 없습니다. 이 경우 고급 탭에서 시작 매개 변수를 두 번 클릭합니다. 매개 변수는 매우 작은 창에 열립니다. 이전에 추가 한; -m을 제거한 다음 확인을 클릭합니다.
서버 이름을 마우스 오른쪽 단추로 클릭 한 다음 다시 시작을 클릭합니다.
이제 sysadmin 고정 서버 역할의 구성원 인 계정 중 하나와 정상적으로 연결할 수 있습니다.
실제로 Sql Server Configuration Manager의 시작 매개 변수에 -m을 추가하고 서비스를 다시 시작하고 ssms로 이동하여 계정의 sysadmin 추가 확인란을 선택한 다음 -m restart를 다시 제거하고 평소대로 사용하면 충분합니다.
-m 단일 사용자 모드에서 SQL Server 인스턴스를 시작합니다.
'IT' 카테고리의 다른 글
CSS3 애니메이션 완료시 있습니까? (0) | 2020.09.12 |
---|---|
자바의 큰 숫자 (0) | 2020.09.11 |
명령 줄 도구가 설치되어 있는지 확인하는 방법 (0) | 2020.09.11 |
1.0이 아닌 열거 형 값에 0.0을 할당 할 수있는 이유 (0) | 2020.09.11 |
모든 중첩 된 사전 값을 반복 하시겠습니까? (0) | 2020.09.11 |