SQL Server Script, aby utworzyć nowego użytkownika

104

Chcę napisać skrypt do tworzenia adminużytkownika (z abcdhasłem) w SQL Server Express. Chcę również przypisać temu użytkownikowi adminpełne uprawnienia.

Ashish Ashu
źródło

Odpowiedzi:

203

Na podstawie twojego pytania myślę, że możesz być nieco zdezorientowany różnicą między użytkownikiem a loginem . Logowanie jest konto na serwerze SQL jako całości - kogoś, kto jest w stanie zalogować się do serwera, a kto ma hasło. Użytkownik jest Logowanie z dostępem do bazy danych konkretnego.

Utworzenie Loginu jest łatwe i musi (oczywiście) zostać wykonane przed utworzeniem konta użytkownika do logowania w określonej bazie danych:

CREATE LOGIN NewAdminName WITH PASSWORD = 'ABCD'
GO

Oto jak tworzysz użytkownika z uprawnieniami db_owner przy użyciu właśnie zadeklarowanego Loginu :

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

Teraz Logins są nieco bardziej płynne niż wydaje mi się powyżej. Na przykład konto logowania jest tworzone automatycznie (w większości instalacji programu SQL Server) dla konta administratora systemu Windows podczas instalacji bazy danych. W większości sytuacji po prostu używam tego, kiedy administruję bazą danych (ma ona wszystkie uprawnienia).

Jeśli jednak zamierzasz uzyskiwać dostęp do serwera SQL z poziomu aplikacji, będziesz chciał ustawić serwer na „tryb mieszany” (zarówno logowania do systemu Windows, jak i SQL) i utworzyć dane logowania, jak pokazano powyżej. Następnie „PRZYZNAJ” uprawnienia do tego Logowania SQL w oparciu o to, co jest potrzebne Twojej aplikacji. Więcej informacji znajdziesz tutaj .

AKTUALIZACJA: Aaron zwraca uwagę na użycie sp_addsrvrolemember do przypisania przygotowanej roli do twojego konta logowania. To dobry pomysł - szybszy i łatwiejszy niż ręczne nadawanie uprawnień. Jeśli wygooglujesz to, zobaczysz wiele linków. Jednak nadal musisz rozumieć różnicę między loginem a użytkownikiem.

Mark Brittingham
źródło
1
Dokładnie to, czego potrzebowałem, dziękuję. Nie spodziewałem się, że będzie to takie łatwe - i że będzie działać idealnie !!
Dave
34

Pełne uprawnienia administratora dla całego serwera czy konkretnej bazy danych? Myślę, że inni odpowiedzieli za bazę danych, ale za serwer:

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

Może być konieczne pominięcie parametrów CHECK_, w zależności od używanej wersji SQL Server Express (prawie zawsze przydatne jest uwzględnienie tych informacji w pytaniu).

Aaron Bertrand
źródło
Dokładnie to, czego chcę, próbowałem utworzyć login z c # przy użyciu klasy Microsoft.SqlServer.Management.Smo.Login. ale nie mogłem stworzyć. działa to z prostym kodem w języku c # dzięki
kordiseps
6

Jeśli chcesz utworzyć ogólny skrypt, możesz to zrobić za pomocą instrukcji Execute ze słowem Replace z nazwą użytkownika i nazwą bazy danych

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
źródło
Nieumyślnie odrzuciłem tę odpowiedź, ale teraz nie mogę cofnąć swojego głosu bez edycji. Umieściłem niechciany tekst tylko po to, aby usunąć mój głos przeciw, ale teraz nie mogę usunąć ani niechcianego tekstu, ani głosu przeciwnego ... Przepraszam
sblandin
4

Możesz użyć:

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

Aby utworzyć login (Zobacz tutaj po więcej szczegółów).

Wtedy może być konieczne użycie:

CREATE USER user_name 

Aby utworzyć użytkownika skojarzonego z loginem do konkretnej bazy danych, chcesz również przyznać im dostęp.

(Zobacz tutaj, aby uzyskać szczegółowe informacje)

Możesz także użyć:

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

Aby skonfigurować uprawnienia do schematu, do którego przypisałeś użytkowników.

(Zobacz tutaj, aby uzyskać szczegółowe informacje)

Dwa inne polecenia, które mogą okazać się przydatne, to ALTER USER i ALTER LOGIN .

Simon P. Stevens
źródło
3
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

ta pełna pomoc przy korzystaniu z sieci:

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
źródło
0

W zeszłym tygodniu zainstalowałem Microsoft SQL Server 2014 Developer Edition na moim urządzeniu deweloperskim i natychmiast napotkałem problem, którego nigdy wcześniej nie widziałem.

Instalowałem różne wersje SQL Server niezliczoną ilość razy i zazwyczaj jest to bezbolesna procedura. Zainstaluj serwer, uruchom konsolę zarządzającą, to takie proste. Jednak po zakończeniu tej instalacji, gdy próbowałem zalogować się do serwera za pomocą SSMS, wyskoczył mi błąd podobny do poniższego:

Błąd logowania SQL Server 18456 „Logowanie nie powiodło się dla użytkownika… (Microsoft SQL Server, błąd: 18456)” Przyzwyczaiłem się do tego błędu, gdy podczas logowania wpisałem nieprawidłowe hasło - ale dzieje się tak tylko wtedy, gdy używam trybu mieszanego ( Uwierzytelnianie Windows i SQL). W tym przypadku serwer został skonfigurowany tylko z uwierzytelnianiem systemu Windows, a konto użytkownika było moje. Nadal nie jestem pewien, dlaczego nie dodał mojego użytkownika do roli SYSADMIN podczas instalacji; być może przegapiłem krok i zapomniałem go dodać. W każdym razie nie cała nadzieja została utracona.

Aby rozwiązać ten problem, jeśli nie możesz zalogować się do programu SQL Server przy użyciu innego konta, należy dodać login sieciowy za pośrednictwem interfejsu wiersza poleceń. Aby to zadziałało, musisz być administratorem w systemie Windows na komputerze, na którym jesteś zalogowany.

Zatrzymaj usługę MSSQL. Otwórz wiersz polecenia za pomocą opcji Uruchom jako administrator. Przejdź do folderu zawierającego plik SQL Server EXE; wartość domyślna dla programu SQL Server 2014 to „C: \ Program Files \ Microsoft SQL Server \ MSSQL12.MSSQLSERVER \ MSSQL \ Binn”. Uruchom następującą komendę: „sqlservr.exe –m”. Spowoduje to uruchomienie programu SQL Server w trybie pojedynczego użytkownika. Pozostawiając ten wiersz polecenia otwarty, otwórz kolejny, powtarzając kroki 2 i 3. W drugim oknie wiersza polecenia uruchom „SQLCMD –S nazwa_serwera \ nazwa_instancji”. W tym oknie uruchom następujące wiersze, naciskając po każdym z nich klawisz Enter: 1

UTWÓRZ LOGIN [nazwa_domeny \ nazwa_logowania] Z WINDOWS 2 GO 3 SP_ADDSRVROLEMBER 'LOGIN_NAME', 'SYSADMIN' 4 GO Użyj CTRL + C, aby zakończyć oba procesy w oknach wiersza polecenia; pojawi się monit o naciśnięcie klawisza Y, aby zakończyć proces programu SQL Server.

Uruchom ponownie usługę MSSQL. Otóż ​​to! Teraz powinieneś być w stanie zalogować się przy użyciu swojego loginu sieciowego.

Mohammad shahnawaz
źródło