Скрипт SQL Server для создания нового пользователя

105

Я хочу написать сценарий для создания adminпользователя (с abcdпаролем) в SQL Server Express. Также я хочу предоставить этому пользователю adminполные права.

Ашиш Ашу
источник

Ответы:

205

Основываясь на вашем вопросе, я думаю, что вы можете немного смутить разницу между пользователем и логином . Логин это учетная запись на 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 для назначения подготовленной роли вашей учетной записи для входа. Это хорошая идея - быстрее и проще, чем предоставление привилегий вручную. Если вы погуглите, то увидите множество ссылок. Однако вы все равно должны понимать разницу между логином и пользователем.

Марк Бриттингем
источник
1
Именно то, что мне нужно, спасибо. Я не ожидал, что это будет так просто - и что все будет работать идеально !!
Дэйв
34

Полные права администратора для всего сервера или конкретной базы данных? Я думаю, что остальные ответили за базу данных, но за сервер:

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 вы используете (почти всегда полезно включать эту информацию в свой вопрос).

Аарон Бертран
источник
Именно то, что я хочу, я пытался создать с помощью C #, используя класс Microsoft.SqlServer.Management.Smo.Login. но я не мог творить. это работает с простым кодом на C #, спасибо
kordiseps 01
6

Если вы хотите создать общий сценарий, вы можете сделать это с помощью оператора 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)
Guish
источник
Я непреднамеренно проголосовал против этого ответа, но теперь я не могу отменить свой голос без редактирования. Я поместил нежелательный текст, чтобы убрать свой голос против, но теперь я не могу удалить ни мусорный текст, ни голос против ... Мне очень жаль,
sblandin
4

Ты можешь использовать:

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

Чтобы создать логин (см здесь для более подробной информации).

Тогда вам может понадобиться:

CREATE USER user_name 

Чтобы создать пользователя, связанного с логином для конкретной базы данных, вы также хотите предоставить им доступ.

(Подробнее см. Здесь )

Вы также можете использовать:

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

Чтобы настроить разрешения для схемы, которой вы назначили пользователей.

(Подробнее см. Здесь )

Две другие команды, которые могут оказаться полезными, - это ALTER USER и ALTER LOGIN .

Саймон П. Стивенс
источник
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

это полное пособие для использования в сети:

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

На прошлой неделе я установил 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. Это оно! Теперь вы можете войти в систему, используя свой сетевой логин.

Мохаммад Шахнаваз
источник