SQL Server Script per creare un nuovo utente


99

Voglio scrivere uno script per creare un adminutente (con abcdpassword) in SQL Server Express. Inoltre voglio assegnare a questo utente adminpieni diritti.

Risposte:


198

Sulla base della tua domanda, penso che potresti essere un po 'confuso sulla differenza tra un utente e un login . Un account di accesso è un account su SQL Server nel suo insieme, qualcuno che è in grado di accedere al server e che ha una password. Un utente è un login con accesso a un database specifico.

Creare un Login è semplice e deve (ovviamente) essere fatto prima di creare un Account Utente per il login in un database specifico:

CREATE LOGIN NewAdminName WITH PASSWORD = 'ABCD'
GO

Ecco come creare un utente con privilegi db_owner utilizzando il login che hai appena dichiarato:

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

Ora, gli accessi sono un po 'più fluidi di quanto sembri sopra. Ad esempio, un account di accesso viene creato automaticamente (nella maggior parte delle installazioni di SQL Server) per l'account amministratore di Windows quando viene installato il database. Nella maggior parte delle situazioni, lo uso solo quando amministro un database (ha tutti i privilegi).

Tuttavia, se si accede a SQL Server da un'applicazione, è necessario impostare il server per la "Modalità mista" (accessi sia Windows che SQL) e creare un account di accesso come mostrato sopra. Potrai quindi "CONCEDERE" i privilegi per l'accesso SQL in base a ciò che è necessario per la tua app. Vedi qui per maggiori informazioni.

AGGIORNAMENTO: Aaron sottolinea l'uso di sp_addsrvrolemember per assegnare un ruolo preparato al tuo account di accesso. Questa è una buona idea: più veloce e più facile che concedere manualmente i privilegi. Se lo cerchi su Google vedrai molti link. Tuttavia, devi comunque comprendere la distinzione tra un login e un utente.


1
Esattamente quello che avevo richiesto, grazie. Non mi aspettavo che fosse così facile e che funzionasse perfettamente !!
Dave

33

Diritti di amministratore completi per l'intero server o un database specifico? Penso che gli altri abbiano risposto per un database, ma per il server:

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';

Potrebbe essere necessario tralasciare i parametri CHECK_ a seconda della versione di SQL Server Express in uso (è quasi sempre utile includere queste informazioni nella domanda).


Esattamente quello che voglio stavo cercando di creare un login con c # utilizzando la classe Microsoft.SqlServer.Management.Smo.Login. ma non ho potuto creare. funziona con un codice semplice in c # grazie
kordiseps

6

Se vuoi creare uno script generico puoi farlo con un'istruzione Execute con una sostituzione con il tuo nome utente e il nome del database

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)

Ho involontariamente svalutato questa risposta, ma ora non posso annullare il mio voto negativo senza modificare. Ho messo del testo spazzatura solo per rimuovere il mio voto negativo ma ora non posso rimuovere né il testo spazzatura né il
voto negativo

4

Puoi usare:

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

Per creare il login (Vedi qui per maggiori dettagli).

Quindi potrebbe essere necessario utilizzare:

CREATE USER user_name 

Per creare l'utente associato al login per il database specifico si desidera concedere l'accesso anche a lui.

(Vedi qui per i dettagli)

Puoi anche usare:

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

Per impostare le autorizzazioni per lo schema a cui hai assegnato gli utenti.

(Vedi qui per i dettagli)

Altri due comandi che potresti trovare utili sono 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

questo ti aiuta completamente per la rete 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

La scorsa settimana ho installato Microsoft SQL Server 2014 Developer Edition sulla mia scatola di sviluppo e mi sono subito imbattuto in un problema che non avevo mai visto prima.

Ho installato innumerevoli volte diverse versioni di SQL Server e di solito è una procedura indolore. Installa il server, esegui la console di gestione, è così semplice. Tuttavia, dopo aver completato questa installazione, quando ho provato ad accedere al server utilizzando SSMS, ho ricevuto un errore come quello seguente:

Errore di accesso a SQL Server 18456 "Accesso non riuscito per l'utente ... (Microsoft SQL Server, errore: 18456)" Sono abituato a vedere questo errore se ho digitato la password sbagliata durante l'accesso, ma solo se utilizzo la modalità mista ( Windows e autenticazione SQL). In questo caso, il server è stato configurato solo con l'autenticazione di Windows e l'account utente era il mio. Non sono ancora sicuro del motivo per cui non ha aggiunto il mio utente al ruolo SYSADMIN durante l'installazione; forse ho saltato un passaggio e ho dimenticato di aggiungerlo. In ogni caso, non tutte le speranze erano perse.

Il modo per risolvere questo problema, se non è possibile accedere con un altro account a SQL Server, consiste nell'aggiungere l'accesso alla rete tramite un'interfaccia della riga di comando. Affinché funzioni, devi essere un amministratore su Windows per il PC a cui hai effettuato l'accesso.

Arresta il servizio MSSQL. Apri un prompt dei comandi utilizzando Esegui come amministratore. Passare alla cartella che contiene il file EXE di SQL Server; l'impostazione predefinita per SQL Server 2014 è "C: \ Programmi \ Microsoft SQL Server \ MSSQL12.MSSQLSERVER \ MSSQL \ Binn". Eseguire il seguente comando: "sqlservr.exe –m". Ciò avvierà SQL Server in modalità utente singolo. Mentre lasci aperto questo prompt dei comandi, aprine un altro, ripetendo i passaggi 2 e 3. Nella seconda finestra del prompt dei comandi, esegui "SQLCMD –S Server_Name \ Instance_Name" In questa finestra, esegui le seguenti righe, premendo Invio dopo ciascuna di esse: 1

CREA LOGIN [domainName \ loginName] DA WINDOWS 2 GO 3 SP_ADDSRVROLEMEMBER "LOGIN_NAME", "SYSADMIN" 4 GO Usa CTRL + C per terminare entrambi i processi nelle finestre del prompt dei comandi; ti verrà chiesto di premere Y per terminare il processo di SQL Server.

Riavvia il servizio MSSQL. Questo è tutto! Ora dovresti essere in grado di accedere utilizzando il tuo login di rete.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.