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 .

Ashish Ashu
fonte

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.

Mark Brittingham
fonte
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).

Aaron Bertrand
fonte
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)
Guish
fonte
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 .

Simon P Stevens
fonte
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
Ali asghar Fendereski
fonte
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.

Mohammad Shahnawaz
fonte