Я хочу написать сценарий для создания admin
пользователя (с abcd
паролем) в SQL Server Express. Также я хочу предоставить этому пользователю admin
полные права.
Ответы:
Основываясь на вашем вопросе, я думаю, что вы можете немного смутить разницу между пользователем и логином . Логин это учетная запись на SQL Server в целом - кто - то , кто способен войти на сервер и который имеет пароль. Пользователь является Войти с доступом к конкретной базе данных.
Создать логин легко и (очевидно) его необходимо сделать до создания учетной записи пользователя для входа в определенную базу данных:
CREATE LOGIN NewAdminName WITH PASSWORD = 'ABCD'
GO
Вот как вы создаете пользователя с привилегиями db_owner, используя только что объявленный логин :
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
Теперь логины немного более плавные, чем я представлял выше. Например, учетная запись для входа автоматически создается (в большинстве установок SQL Server) для учетной записи администратора Windows при установке базы данных. В большинстве случаев я просто использую это, когда администрирую базу данных (у нее есть все привилегии).
Однако, если вы собираетесь обращаться к SQL Server из приложения, вам нужно настроить сервер на «смешанный режим» (как для входа в Windows, так и для входа в SQL) и создать логин, как показано выше. Затем вы «ПРЕДОСТАВЛЯЕТЕ» привилегии этому входу в систему SQL в зависимости от того, что требуется для вашего приложения. См. Здесь для получения дополнительной информации.
ОБНОВЛЕНИЕ: Аарон указывает на использование sp_addsrvrolemember для назначения подготовленной роли вашей учетной записи для входа. Это хорошая идея - быстрее и проще, чем предоставление привилегий вручную. Если вы погуглите, то увидите множество ссылок. Однако вы все равно должны понимать разницу между логином и пользователем.
Полные права администратора для всего сервера или конкретной базы данных? Я думаю, что остальные ответили за базу данных, но за сервер:
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';
Возможно, вам придется не использовать параметры CHECK_ в зависимости от того, какую версию SQL Server Express вы используете (почти всегда полезно включать эту информацию в свой вопрос).
Если вы хотите создать общий сценарий, вы можете сделать это с помощью оператора Execute с заменой на свое имя пользователя и имя базы данных.
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)
Ты можешь использовать:
CREATE LOGIN <login name> WITH PASSWORD = '<password>' ; GO
Чтобы создать логин (см здесь для более подробной информации).
Тогда вам может понадобиться:
CREATE USER user_name
Чтобы создать пользователя, связанного с логином для конкретной базы данных, вы также хотите предоставить им доступ.
(Подробнее см. Здесь )
Вы также можете использовать:
GRANT permission [ ,...n ] ON SCHEMA :: schema_name
Чтобы настроить разрешения для схемы, которой вы назначили пользователей.
(Подробнее см. Здесь )
Две другие команды, которые могут оказаться полезными, - это ALTER USER и 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
это полное пособие для использования в сети:
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
На прошлой неделе я установил Microsoft SQL Server 2014 Developer Edition на свой ящик разработчика и сразу же столкнулся с проблемой, которую никогда раньше не видел.
Я устанавливал различные версии SQL Server бесчисленное количество раз, и обычно это безболезненная процедура. Установите сервер, запустите Консоль управления, все очень просто. Однако после завершения этой установки, когда я попытался войти на сервер с помощью SSMS, я получил ошибку, подобную приведенной ниже:
Ошибка входа в SQL Server 18456 «Не удалось войти в систему для пользователя… (Microsoft SQL Server, Ошибка: 18456)» Я привык видеть эту ошибку, если я ввел неправильный пароль при входе в систему, но это только если я использую смешанный режим ( Windows и проверка подлинности SQL). В этом случае сервер был настроен только с проверкой подлинности Windows, а учетная запись пользователя была моей собственной. Я до сих пор не уверен, почему он не добавил моего пользователя в роль SYSADMIN во время установки; возможно, я пропустил шаг и забыл его добавить. Во всяком случае, не вся надежда была потеряна.
Способ исправить это, если вы не можете войти в систему с какой-либо другой учетной записью на SQL Server, состоит в том, чтобы добавить свой сетевой логин через интерфейс командной строки. Чтобы это работало, вам необходимо быть администратором Windows для ПК, на котором вы вошли.
Остановите службу MSSQL. Откройте командную строку с помощью «Запуск от имени администратора». Перейдите в папку, в которой находится EXE-файл SQL Server; значение по умолчанию для SQL Server 2014 - «C: \ Program Files \ Microsoft SQL Server \ MSSQL12.MSSQLSERVER \ MSSQL \ Binn». Выполните следующую команду: «sqlservr.exe –m». Это запустит SQL Server в однопользовательском режиме. Не закрывая эту командную строку, откройте другую, повторив шаги 2 и 3. Во втором окне командной строки запустите «SQLCMD –S Server_Name \ Instance_Name». В этом окне выполните следующие строки, нажимая Enter после каждой: 1
СОЗДАТЬ ВХОД [имя_домена \ имя_входа] ИЗ WINDOWS 2 GO 3 SP_ADDSRVROLEMEMBER 'LOGIN_NAME', 'SYSADMIN' 4 GO Используйте CTRL + C для завершения обоих процессов в окнах командной строки; вам будет предложено нажать Y, чтобы завершить процесс SQL Server.
Перезапустите службу MSSQL. Это оно! Теперь вы можете войти в систему, используя свой сетевой логин.