Quero escrever um script para criar um admin
usuário (com abcd
senha) no SQL Server Express. Também quero atribuir admin
direitos totais a este usuário .
Quero escrever um script para criar um admin
usuário (com abcd
senha) no SQL Server Express. Também quero atribuir admin
direitos totais a este usuário .
Respostas:
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.
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).
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)
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 .
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
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.