복붙노트

[SQL] 어떻게 자신에게 로컬 SQL Server 인스턴스에 대한 관리자 액세스 권한을 부여합니까?

SQL

어떻게 자신에게 로컬 SQL Server 인스턴스에 대한 관리자 액세스 권한을 부여합니까?

나는 내 로컬 컴퓨터에 SQL 서버 2008 R2를 설치했습니다. 그러나, 나는 때문에 권리의 새 데이터베이스를 만들 (또는 부족) 할 수 없다.

그래서, 나는 나의 현재 로그인에 관리자 권한을 할당하려

나는 또한하지만 운 관리자 권한이 있어야하는 새로운 로그인을 만들려고. 나는 데이터베이스를 만들 수 있도록 어떻게 자신이 관리자 권한을 부여합니까? 나는 재 설치,하지만 난 안함 수 있습니다.

해결법

  1. ==============================

    1.예 - 당신이 SQL Server를 설치할 때 시스템 관리자 역할에 자신을 추가하는 것을 잊었다 나타납니다. 당신이 당신의 컴퓨터의 로컬 관리자 인 경우,이 블로그 게시물은 다시 설치하지 않고도 SQL Server sysadmin 그룹에 계정을 얻기 위해 SQLCMD를 사용 할 수 있습니다. 당신이 저를 요구하는 경우에 그것은 SQL 서버의 보안 구멍의 비트입니다,하지만이 경우에 당신을 도울 것입니다.

    예 - 당신이 SQL Server를 설치할 때 시스템 관리자 역할에 자신을 추가하는 것을 잊었다 나타납니다. 당신이 당신의 컴퓨터의 로컬 관리자 인 경우,이 블로그 게시물은 다시 설치하지 않고도 SQL Server sysadmin 그룹에 계정을 얻기 위해 SQLCMD를 사용 할 수 있습니다. 당신이 저를 요구하는 경우에 그것은 SQL 서버의 보안 구멍의 비트입니다,하지만이 경우에 당신을 도울 것입니다.

  2. ==============================

    2.명령 프롬프트 창을 엽니 다. 당신은 SQL Server의 기본 인스턴스가 이미 실행중인 경우, 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 서버 인스턴스에 대해 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 서버 역할 후 세미콜론 잊지 말고 [시스템 관리자] 추가 MEMBER [<< DOMAIN \ USERNAME >>]; 그리고 GO 또는 전혀 실행되지 명령 후 추가 세미콜론을 추가하지 마십시오.

  3. ==============================

    3.난은 sysadmin 아니었지만 컴퓨터의 관리자이었다 SQL 2012 데이터베이스를 채택했다. 나는 SQL 로그인으로 내 NT 계정을 추가하고 시스템 관리자가 서버 역할을 설정, "관리자 권한으로 실행"을 SSMS를 사용했다. 문제 없어요.

    난은 sysadmin 아니었지만 컴퓨터의 관리자이었다 SQL 2012 데이터베이스를 채택했다. 나는 SQL 로그인으로 내 NT 계정을 추가하고 시스템 관리자가 서버 역할을 설정, "관리자 권한으로 실행"을 SSMS를 사용했다. 문제 없어요.

  4. ==============================

    4.여기에 주장이이 문제를 해결 할 수 있도록하는 스크립트입니다.

    여기에 주장이이 문제를 해결 할 수 있도록하는 스크립트입니다.

    이 간단한 스크립트를 로컬 SQL 서버 익스프레스 관리자 권한을 얻기

    스크립트에 다운로드 링크

    참고 : 당신은 '인스턴스 이름'으로 BAT 파일을 제공해야합니다 (아마 'MSSQLSERVER'될 것 -하지만,하지 않을 수도 있습니다) : 처음은 "Microsoft SQL Server 관리 콘솔에서 다음을 실행하여 값을 얻을 수 있습니다 ":

     SELECT @@servicename
    

    그런 때 'SQL 인스턴스 이름'에 대한 BAT 파일 프롬프트 사용에 결과를 복사합니다.

      @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
    
  5. ==============================

    5.Microsoft는이 문제에 대한 기사가있다. 그것은을 통해 단계별로 모든 단계를 간다.

    Microsoft는이 문제에 대한 기사가있다. 그것은을 통해 단계별로 모든 단계를 간다.

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

    다른 모든 답변을 제안처럼 짧은 그것은 -m과 SQLSERVER의 인스턴스를 시작 포함됩니다. 그러나 마이크로 소프트는 약간 더 자세한 지침을 제공합니다.

  6. ==============================

    6.SQL Server 구성 관리자에서 매개 변수를 시작하지 -m을 추가하기 위해 실제로 충분히 다시 시작 서비스, 다음 -m은 평소와 같이 다시 사용 다시 시작 제거, 귀하의 계정에 추가 확인란의 시스템 관리자를 SSMS로 이동합니다.

    SQL Server 구성 관리자에서 매개 변수를 시작하지 -m을 추가하기 위해 실제로 충분히 다시 시작 서비스, 다음 -m은 평소와 같이 다시 사용 다시 시작 제거, 귀하의 계정에 추가 확인란의 시스템 관리자를 SSMS로 이동합니다.

    데이터베이스 엔진 서비스 시작 옵션

  7. from https://stackoverflow.com/questions/9889334/how-do-i-grant-myself-admin-access-to-a-local-sql-server-instance by cc-by-sa and MIT license