SQL Server Script для создания нового пользователя - PullRequest
82 голосов
/ 21 октября 2009

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

Ответы [ 6 ]

167 голосов
/ 21 октября 2009

Исходя из вашего вопроса, я думаю, что вы можете быть немного смущены разницей между Пользователь и Логин . Login - это учетная запись на SQL Server в целом - тот, кто может войти на сервер и у кого есть пароль. A Пользователь - это Логин с доступом к определенной базе данных.

Создание логина легко и должно (очевидно) быть выполнено перед созданием пользователя учетной записи для входа в конкретную базу данных:

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) и создать имя входа, как показано выше. Затем вы будете «GRANT» привязаны к этой учетной записи SQL на основе того, что необходимо для вашего приложения. См. здесь для получения дополнительной информации.

ОБНОВЛЕНИЕ: Аарон указывает на использование sp_addsrvrolemember для назначения подготовленной роли вашей учетной записи для входа. Это хорошая идея - быстрее и проще, чем предоставление привилегий вручную. Если вы воспользуетесь Google, вы увидите множество ссылок. Однако вы все равно должны понимать разницу между логином и пользователем.

28 голосов
/ 21 октября 2009

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

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

6 голосов
/ 28 мая 2015

Если вы хотите создать универсальный скрипт, вы можете сделать это с помощью оператора 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)
4 голосов
/ 21 октября 2009

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

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

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

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

CREATE USER user_name 

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

(подробности см. здесь )

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

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

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

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

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

0 голосов
/ 11 марта 2019
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 голосов
/ 03 октября 2017

На прошлой неделе я установил 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

СОЗДАТЬ ВХОД [domainName \ loginName] ИЗ WINDOWS 2 ИДТИ 3 SP_ADDSRVROLEMEMBER 'LOGIN_NAME', 'SYSADMIN' 4 ИДТИ Используйте CTRL + C, чтобы завершить оба процесса в окнах командной строки; Вам будет предложено нажать Y, чтобы завершить процесс SQL Server.

Перезапустите службу MSSQL. Это оно! Теперь вы можете войти в систему, используя сетевой вход.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...