Script do SQL Server para criar um novo usuário


98

Quero escrever um script para criar um adminusuário (com abcdsenha) no SQL Server Express. Também quero atribuir admindireitos totais a este usuário .

Respostas:


196

Com base na sua pergunta, acho que você pode estar um pouco confuso sobre a diferença entre um usuário e um login . Um Login é uma conta no SQL Server como um todo - alguém que é capaz de fazer login no servidor e que possui uma senha. Um usuário é um login com acesso a um banco de dados específico.

Criar um Login é fácil e deve (obviamente) ser feito antes de criar uma conta de usuário para o login em um banco de dados específico:

CREATE LOGIN NewAdminName WITH PASSWORD = 'ABCD'
GO

Aqui está como você cria um usuário com privilégios db_owner usando o login que você acabou de declarar:

Use YourDatabase;
GO

IF NOT EXISTS (SELECT * FROM sys.database_principals WHERE name = N'NewAdminName')
BEGIN
    CREATE USER [NewAdminName] FOR LOGIN [NewAdminName]
    EXEC sp_addrolemember N'db_owner', N'NewAdminName'
END;
GO

Agora, Logins são um pouco mais fluidos do que pareço acima. Por exemplo, uma conta de Login é criada automaticamente (na maioria das instalações do SQL Server) para a conta do Administrador do Windows quando o banco de dados é instalado. Na maioria das situações, eu apenas uso isso quando estou administrando um banco de dados (ele tem todos os privilégios).

No entanto, se você for acessar o SQL Server a partir de um aplicativo, deverá configurar o servidor para o "Modo Misto" (logins do Windows e do SQL) e criar um Login conforme mostrado acima. Em seguida, você "GRANT" privilégios para esse login SQL com base no que é necessário para seu aplicativo. Veja aqui para mais informações.

ATUALIZAÇÃO: Aaron aponta o uso de sp_addsrvrolemember para atribuir uma função preparada à sua conta de login. Esta é uma boa ideia - mais rápida e fácil do que conceder privilégios manualmente. Se você pesquisar no Google, verá muitos links. No entanto, você ainda deve entender a diferença entre um login e um usuário.


1
Exatamente o que eu precisava, obrigado. Eu não esperava que fosse tão fácil - e que funcionasse perfeitamente !!
Dave

33

Direitos de administrador totais para todo o servidor ou um banco de dados específico? Acho que os outros responderam por um banco de dados, mas pelo servidor:

USE [master];
GO
CREATE LOGIN MyNewAdminUser 
    WITH PASSWORD    = N'abcd',
    CHECK_POLICY     = OFF,
    CHECK_EXPIRATION = OFF;
GO
EXEC sp_addsrvrolemember 
    @loginame = N'MyNewAdminUser', 
    @rolename = N'sysadmin';

Pode ser necessário deixar de fora os parâmetros CHECK_ dependendo de qual versão do SQL Server Express você está usando (quase sempre é útil incluir essas informações em sua pergunta).


Exatamente o que eu queria estava tentando criar login com c # usando a classe Microsoft.SqlServer.Management.Smo.Login. mas eu não conseguia criar. isso funciona com código simples em c # thanks
kordiseps

6

Se você deseja criar um script genérico, pode fazê-lo com uma instrução Execute com um Replace com seu nome de usuário e nome do banco de dados

Declare @userName as varchar(50); 
Declare @defaultDataBaseName as varchar(50);
Declare @LoginCreationScript as varchar(max);
Declare @UserCreationScript as varchar(max);
Declare @TempUserCreationScript as varchar(max);
set @defaultDataBaseName = 'data1';
set @userName = 'domain\userName';
set @LoginCreationScript ='CREATE LOGIN [{userName}]
FROM WINDOWS 
WITH DEFAULT_DATABASE ={dataBaseName}'

set @UserCreationScript ='
USE {dataBaseName}
CREATE User [{userName}] for LOGIN [{userName}];
EXEC sp_addrolemember ''db_datareader'', ''{userName}'';
EXEC sp_addrolemember ''db_datawriter'', ''{userName}'';
Grant Execute on Schema :: dbo TO [{userName}];'
/*Login creation*/
set @LoginCreationScript=Replace(Replace(@LoginCreationScript, '{userName}', @userName), '{dataBaseName}', @defaultDataBaseName)
set @UserCreationScript =Replace(@UserCreationScript, '{userName}', @userName)
Execute(@LoginCreationScript)

/*User creation and role assignment*/
set @TempUserCreationScript =Replace(@UserCreationScript, '{dataBaseName}', @defaultDataBaseName)
Execute(@TempUserCreationScript)
set @TempUserCreationScript =Replace(@UserCreationScript, '{dataBaseName}', 'db2')
Execute(@TempUserCreationScript)
set @TempUserCreationScript =Replace(@UserCreationScript, '{dataBaseName}', 'db3')
Execute(@TempUserCreationScript)

Eu fiz downvote acidentalmente nesta resposta, mas agora não posso desfazer meu downvote sem editar. Coloquei texto inútil apenas para remover meu downvote, mas agora não consigo remover nem o texto indesejado nem o downvote ... Sinto muito
sbland em

4

Você pode usar:

CREATE LOGIN <login name> WITH PASSWORD = '<password>' ; GO 

Para criar o login (veja aqui para mais detalhes).

Então você pode precisar usar:

CREATE USER user_name 

Para criar o usuário associado ao login para o banco de dados específico, você também deseja conceder acesso a ele.

(Veja aqui para detalhes)

Você também pode usar:

GRANT permission  [ ,...n ] ON SCHEMA :: schema_name

Para configurar as permissões para os esquemas aos quais você atribuiu os usuários.

(Veja aqui para detalhes)

Dois outros comandos que você pode achar úteis são ALTER USER e ALTER LOGIN .


2
CREATE LOGIN AdminLOGIN WITH PASSWORD = 'pass'
GO


Use MyDatabase;
GO

IF NOT EXISTS (SELECT * FROM sys.database_principals WHERE name = N'AdminLOGIN')
BEGIN
    CREATE USER [AdminLOGIN] FOR LOGIN [AdminLOGIN]
    EXEC sp_addrolemember N'db_owner', N'AdminLOGIN'
    EXEC master..sp_addsrvrolemember @loginame = N'adminlogin', @rolename = N'sysadmin'
END;
GO

esta ajuda completa para rede usando:

1- Right-click on SQL Server instance at root of Object Explorer, click on Properties
Select Security from the left pane.

2- Select the SQL Server and Windows Authentication mode radio button, and click OK.

3- Right-click on the SQL Server instance, select Restart (alternatively, open up Services and restart the SQL Server service).

4- Close sql server application and reopen it

5- open 'SQL Server Configuration Manager' and tcp enabled for network

6-Double-click the TCP/IP protocol, go to the IP Addresses tab and scroll down to the IPAll section.

7-Specify the 1433 in the TCP Port field (or another port if 1433 is used by another MSSQL Server) and press the OK 

8-Open in Sql Server: Security And Login  And Right Click on Login Name And Select Peroperties And Select Server Roles And 
  Checked The Sysadmin And Bulkadmin then Ok.
9-firewall: Open cmd as administrator and type: 
      netsh firewall set portopening protocol = TCP port = 1433 name = SQLPort mode = ENABLE scope = SUBNET profile = CURRENT

0

Na semana passada, instalei o Microsoft SQL Server 2014 Developer Edition na minha dev box e imediatamente me deparei com um problema que nunca tinha visto antes.

Eu instalei várias versões do SQL Server inúmeras vezes e geralmente é um procedimento indolor. Instale o servidor, execute o console de gerenciamento, é simples assim. No entanto, após concluir esta instalação, quando tentei fazer login no servidor usando SSMS, recebi um erro como este abaixo:

Erro de login do SQL Server 18456 “Falha de login do usuário ... (Microsoft SQL Server, Erro: 18456)” Estou acostumado a ver esse erro se digitar a senha errada ao fazer login - mas isso só se estiver usando o modo misto ( Autenticação Windows e SQL). Nesse caso, o servidor foi configurado apenas com a autenticação do Windows e a conta do usuário era minha. Ainda não sei por que não adicionei meu usuário à função SYSADMIN durante a configuração; talvez eu tenha perdido uma etapa e esquecido de adicioná-la. De qualquer forma, nem toda esperança foi perdida.

A maneira de corrigir isso, se você não puder fazer logon com nenhuma outra conta no SQL Server, é adicionar seu logon de rede por meio de uma interface de linha de comando. Para que isso funcione, você precisa ser um administrador no Windows para o PC ao qual está conectado.

Pare o serviço MSSQL. Abra um prompt de comando usando Executar como administrador. Mude para a pasta que contém o arquivo EXE do SQL Server; o padrão para o SQL Server 2014 é “C: \ Arquivos de programas \ Microsoft SQL Server \ MSSQL12.MSSQLSERVER \ MSSQL \ Binn”. Execute o seguinte comando: “sqlservr.exe –m”. Isso iniciará o SQL Server no modo de usuário único. Ao deixar este Prompt de Comando aberto, abra outro, repetindo as etapas 2 e 3. Na segunda janela do Prompt de Comando, execute “SQLCMD –S Server_Name \ Instance_Name”. Nesta janela, execute as seguintes linhas, pressionando Enter após cada uma: 1

CREATE LOGIN [domainName \ loginName] FROM WINDOWS 2 GO 3 SP_ADDSRVROLEMEMBER 'LOGIN_NAME', 'SYSADMIN' 4 GO Use CTRL + C para encerrar ambos os processos nas janelas do prompt de comando; você será solicitado a pressionar Y para encerrar o processo do SQL Server.

Reinicie o serviço MSSQL. É isso aí! Agora você deve conseguir fazer login usando seu login de rede.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.