Como é que eu me dou acesso administrativo a uma instância de servidor SQL local?

instalei o servidor SQL 2008 R2 na minha máquina local. Mas, eu não posso criar um novo banco de dados por causa de direitos (ou falta de).

"CRIAR A PERMISSÃO DA BASE DE DADOS NEGADA"

então, tentei atribuir os privilégios de administrador ao meu login actual

" O Utilizador não tem permissão para executar esta acção."

eu também tentei criar um novo login que teria privilégios de administrador, mas sem sorte. Como é que me concedo administrador direitos para que eu possa criar uma base de dados?Posso re-instalar, mas prefiro não o fazer.

Author: Darren, 2012-03-27

6 answers

Sim - parece que se esqueceu de se adicionar ao papel do sysadmin ao instalar o servidor SQL. Se você é um Administrador local na sua máquina, este post pode ajudá-lo a usar o SQLCMD para colocar a sua conta no grupo sysadmin do servidor SQL sem ter de reinstalar. É um buraco de segurança no servidor SQL, se queres saber, mas vai ajudar-te neste caso.

 70
Author: Brian Knight, 2019-05-30 14:52:48

Abra uma janela da linha de comandos. Se tiver uma instância predefinida do servidor de SQL já em execução, execute o seguinte comando na linha de comandos para parar o serviço de servidor de SQL:

net stop mssqlserver

Agora vá para a pasta onde o servidor SQL está instalado. O diretório pode, por exemplo, ser um desses:

C:\Program Files\Microsoft SQL Server\MSSQL10_50.MSSQLSERVER\MSSQL\Binn
C:\Program Files\Microsoft SQL Server\MSSQL13.MSSQLSERVER\MSSQL\Binn

Descubra o seu directório MSSQL e CD nele como tal:

CD C:\Program Files\Microsoft SQL Server\MSSQL10_50.MSSQLSERVER\MSSQL\Binn

Execute agora o seguinte comando para iniciar o servidor de SQL no modo de utilizador único. Como {[7] } está a ser indicado, só pode ser feita uma ligação SQLCMD (a partir de outra janela de prompt de comandos).

sqlservr -m"SQLCMD"

Agora, abra outra janela de prompt de comandos como o mesmo Utilizador que iniciou o servidor de SQL no modo de utilizador único acima, e nela, execute:

sqlcmd
E pressione enter. Agora poderá executar as declarações de SQL com a instância do servidor de SQL em execução no modo de utilizador único:
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

Fonte

actualizado Não se esqueça de um ponto e vírgula após ALTER SERVER ROLE [sysadmin] ADD MEMBER [<<DOMAIN\USERNAME>>]; e não adicionar um ponto-e-vírgula extra após GO ou o comando nunca executar.

 83
Author: Darren, 2018-12-02 03:56:15
Adoptei uma base de dados SQL 2012 onde não era um sysadmin, mas sim um administrador da máquina. Eu usei SSMS com "Run as Administrator", adicionei minha conta NT como um login SQL e configurei o papel do servidor para sysadmin. Problema nenhum.
 40
Author: Vince P., 2014-08-15 01:30:03
Aqui está um guião que diz ser capaz de corrigir isto.

Obter direitos de administração para o seu servidor de SQL local expresso com este programa simples

Transferir a ligação para o programa

Descrição

Este programa de comandos permite-lhe adicionar-se facilmente ao sysadmin papel de uma instância de servidor SQL local. Você deve ser um membro do Windows local Administrators group, ou ter acesso às credenciais de um utilizador que é. O script suporta SQL Server 2005 e mais tarde.

O programa é mais útil se for um programador a tentar usar o SQL Server 2008 Express que foi instalado por outra pessoa. Neste situação você normalmente não terá direitos de administração para o servidor SQL 2008 Exemplo Expresso, uma vez que por omissão apenas a pessoa que instala o SQL Ao servidor 2008 são concedidos privilégios administrativos.

O utilizador que instalou o SQL Server 2008 Express pode usar o SQL Server Estudo de gestão para conceder o privilégios necessários para ti. Mas o quê? se o SQL Server Management Studio não foi instalado? Ou pior se o a instalação do utilizador já não está disponível?

Este script corrige o problema em apenas alguns cliques!

Nota: terá de fornecer ao ficheiro BAT um ' nome de instância '(provavelmente será 'MSSQLSERVER' - mas poderá não ser): poderá obter o valor se executar primeiro o seguinte no "Microsoft SQL Server Management Console":

 SELECT @@servicename

Então copie o resultado a usar quando o ficheiro BAT pedir o 'nome da instância 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
 29
Author: Chris Gessler, 2015-06-09 14:38:56

A Microsoft tem um artigo sobre esta questão. Passa por tudo passo a passo.

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

Em resumo, envolve iniciar a instância de sqlserver com {[[3]} como todas as outras respostas sugerem. No entanto, a Microsoft fornece instruções ligeiramente mais detalhadas.

A partir da página inicial, iniciar a gestão do servidor SQL Estudio. No menu Ver, seleccione os servidores registados. (Se o seu servidor ainda não estiver grupos de Servidores Locais registados, com o clique direito, apontam para tarefas, e depois clique em Registar os servidores locais.)

Na área dos servidores registados, carregue com o botão direito no seu servidor, e depois carregue no Gestor de configuração do servidor SQL. Isto deve pedir permissão. para correr como administrador e, em seguida, abrir o Gestor de configuração programa.

Estúdio De Gestão Fechado.

No servidor SQL Gestor de configuração, na área esquerda, seleccione SQL servidor. Na área da direita, encontre a sua instância do servidor SQL. (A instância por omissão do servidor SQL inclui (MSSQLSERVER) após o nome. Instâncias nomeadas aparecem em maiúsculas com o mesmo nome que têm em servidores registados.) Clique com o botão direito na instância de SQL Servidor, e depois clique em Propriedades.

Na página Parâmetros de arranque, no campo indicar um parâmetro de arranque, escreva-m e depois carregue em Adicionar. (Isso é um traço, em seguida, letra minúscula m.)

Nota

Para algumas versões anteriores do servidor SQL não existem parâmetros de arranque guia. Nesse caso, na página avançada, duplo-click Startup Parametro. Os parâmetros abrem-se numa janela muito pequena. Tem cuidado. não alterar nenhum dos parâmetros existentes. No final, adicione um novo parâmetro; - m e, em seguida, clique em OK. (Isso é um ponto-vírgula, Em seguida, um traço em seguida, letra maiúscula inferior m.)

Clique em OK, e depois do mensagem para reiniciar, carregue com o botão direito no seu servidor nome e, em seguida, clique em Reiniciar.

Depois de o servidor SQL ter reiniciado, o seu servidor ficará num único utilizador modo. Certifique-se de que o agente do servidor SQL não está em execução. Se iniciado, vai levar a tua única ligação.

No ecrã inicial do Windows 8, carregue com o botão direito no ícone para a gestão Estudio. Na parte inferior da tela, selecione Executar como administrador. (Isto vai passar as suas credenciais de administrador para o SSMS.)

Nota

Para as versões anteriores do Windows, a opção Executar como administrador aparece como um sub-menu.

Em algumas configurações, o SSMS tentará fazer várias ligações. Várias ligações irão falhar porque o servidor SQL está num único utilizador modo. Você pode selecionar uma das seguintes ações a realizar. Faz um. do seguinte.

A) Conecte - se com o Explorador de objectos usando a autenticação do Windows (que inclui suas credenciais de administrador). Expandir Segurança, expandir Logins, e faça duplo-click no seu próprio login. Na página de papéis do servidor, seleccione o sysadmin e depois carregue em OK.

B) em vez de se conectar com o Object Explorer, conecte-se com uma consulta Janela que utiliza a autenticação do Windows (que inclui o seu administrador credencial). (Você só pode se conectar desta forma se você não se conectar com o Explorador de objectos.) Executar um código como o seguinte para adicionar um novo Autenticação do Windows que é um membro do 'sysadmin' fixo servidor. O seguinte exemplo adiciona um usuário de domínio chamado CONTOSO\PatK.

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

C) Se o seu servidor SQL estiver a correr em modo de autenticação misto, ligar-se a uma janela de pesquisa com o Windows Autenticação (que inclui as suas credenciais de administrador). Executar um código como o seguinte para criar um novo servidor SQL Autenticação que é um membro do servidor fixo do sysadmin funcao.

CREATE LOGIN TempLogin WITH PASSWORD = '************';   ALTER
SERVER ROLE sysadmin ADD MEMBER TempLogin;   

Aviso:

Substituir ************ com um forte senha.

D) Se o seu servidor de SQL estiver a correr no modo de autenticação mista e você deseja repor a senha da conta sa, ligar-se a uma consulta Janela que utiliza a autenticação do Windows (que inclui o seu administrador credencial). Alterar a senha da conta sa com o seguinte sintaxe.

ALTER LOGIN sa WITH PASSWORD = '************';   Warning

Substituir ************ com uma senha forte.

Os seguintes passos mudam agora o servidor SQL para o modo multi-utilizador. Fechar SSMS.

No Gestor de configuração do servidor SQL, na área esquerda, seleccione SQL servidor. Na área direita, clique com o botão direito na instância de SQL Servidor, e depois clique em Propriedades.

Na página de Parâmetros de arranque, no campo de parâmetros existentes, seleccione - m e depois clique em Remover.

Nota

Para algumas versões anteriores do servidor SQL não existem parâmetros de arranque guia. Nesse caso, na página avançada, duplo-click Startup Parametro. Os parâmetros abrem numa janela muito pequena. Remover o ;- m que você adicionou mais cedo, e em seguida, clique OK.

Carregue com o botão direito no nome do seu servidor e depois carregue em Reiniciar.

Agora você deve ser capaz de se conectar normalmente com uma das contas que agora é um membro do servidor fixo sysadmin.
 6
Author: Yair Halberstadt, 2018-03-13 14:05:45

É de facto suficiente para adicionar-m aos parâmetros de arranque no Gestor de configuração do servidor Sql, reiniciar o serviço, ir para o ssms uma opção adicionar o sysadmin na sua conta, depois remover-m Reiniciar de novo e usar como de costume.

Opções De Arranque Do Serviço Do Motor Da Base De Dados

-m inicia uma instância do servidor SQL no modo de utilizador único.

 2
Author: norbertas.gaulia, 2016-05-02 22:11:11