Chcę napisać skrypt do tworzenia admin
użytkownika (z abcd
hasłem) w SQL Server Express. Chcę również przypisać temu użytkownikowi admin
pełne uprawnienia.
źródło
Chcę napisać skrypt do tworzenia admin
użytkownika (z abcd
hasłem) w SQL Server Express. Chcę również przypisać temu użytkownikowi admin
pełne uprawnienia.
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.
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).
źródło
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)
źródło
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 .
źródło
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
źródło
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
Uruchom ponownie usługę MSSQL. Otóż to! Teraz powinieneś być w stanie zalogować się przy użyciu swojego loginu sieciowego.
źródło