Сценарій SQL Server для створення нового користувача


99

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

Відповіді:


198

Виходячи з вашого запитання, я думаю, що ви можете трохи розгубитися щодо різниці між Користувачем та Логіном . Логін це обліковий запис на 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
Саме те, що я вимагав, дякую. Я не очікував, що це буде так просто - і для того, щоб це працювало ідеально !!
Дейв,

33

Повні права адміністратора для всього сервера або конкретної бази даних? Думаю, інші відповіли за базу даних, а за сервер:

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

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)

Я ненавмисно підтримав цю відповідь, але зараз я не можу скасувати свій голос проти, не редагуючи. Я розмістив сміттєвий текст лише для того, щоб видалити свій голос проти, але зараз я не можу видалити ні сміттєвий текст, ні голос проти ... Пробачте
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 .


2
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. Це воно! Тепер ви зможете ввійти в систему, використовуючи мережевий логін.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.