Add windows user sql server

logo_sql_2012В данной статье будет подробно, в деталях, рассказано как создать нового пользователя в Microsoft SQL Server 2012 (в более старых редакциях, например в Microsoft SQL Server 2008 R2, набор действий аналогичен).

0. Оглавление

  1. Добавление нового пользователя
  2. Проверка подлинности SQL Server
  3. Проверка подлинности Windows

1. Добавление нового пользователя

Запускаем утилиту «SQL Server Management Studio». В Microsoft Windows server 2012 R2 ее можно найти в списке всех программ.

Ustanovka_SQL_2012_23

В Microsoft Windows Server 2008 R2 в меню «Пуск» (Start) — «Microsoft SQL Server 2012» — «Среда SQL Server Management Studio».

Ustanovka_SQL_2012_23

Вводим имя сервера, данные для авторизации и нажимаем «Соединить» (Connect).

В обозревателе объектов раскрываем вкладку «Безопасность» (Security), кликаем правой кнопкой мыши по вкладке «Имена входа» (Logins) и в контекстном меню выбираем «Создать имя входа…» (New Login…)

Откроется окно создания имени входа (Login — New). Теперь необходимо определиться с вариантом аутентификации нового пользователя. Возможны 2 варианта:

  • Аутентификация с помощью пароля — Проверка подлинности SQL Server (SQL Server Authentication).
  • Доступ для конкретного пользователя Windows — Проверка подлинности Windows (Windows authentication).

2. Проверка подлинности SQL Server

Для начала рассмотрим первый способ аутентификации. Например, создадим пользователя для работы сервера 1С:Предприятие. Укажем имя входа (Login name), выберем «Проверка подлинности SQL Server» (SQL Server Authentication) и введем пароль (Password) пользователя. Далее снимаем / отмечаем галочки у следующих параметров:

  • Требовать использование политики паролей (Enforce password policy)
  • Задать срок окончания действия пароля (Enforce password expiration)
  • Пользователь должен сменить пароль при следующем входе (User must change password at next login)

Для данной задачи оставляем включенным только первый параметр.

Также сразу рекомендую выбрать язык по умолчанию. Если вы используете английскую версию SQL Server, то и служебные сообщения, которые SQL Server будет передавать приложению, подключенному под данным пользователем (в данном случае программе 1С:Предприятие, следовательно и конечному пользователю, работающему в программе) будут передаваться на английском языке. Если язык по умолчанию для пользователя выбрать, например, русский, то и служебные сообщения будут передаваться на русском языке.

Устанавливаем необходимые параметры и переходим на вкладку «Роли сервера» (Server Roles).

Здесь выбираем набор прав добавляемого пользователя. Для этого отмечаем необходимые роли сервера. С полным описанием предопределенных ролей сервера и их возможностями можно ознакомиться здесь. Для текущей задачи выбираем:

  • dbcreator
  • processadmin
  • public

После чего нажимаем «ОК» для сохранения выполненных действий.

3. Проверка подлинности Windows

Теперь добавим администратора SQL Server, выбрав его из текущих пользователей Windows. Для этого создадим нового пользователя и способ аутентификации укажем «Проверка подлинности Windows» (Windows authentication). Далее, чтобы ввести имя входа, нажмем «Найти» (Search…), затем «Дополнительно» (Advanced…), в следующем окне «Поиск» (Find Now) и выбрав необходимого пользователя из списка, закроем все окна нажав на «ОК».

Перейдем на вкладку «Роли сервера» (Server Roles) и в соответствии с поставленной задачей укажем роли:

  • public
  • sysadmin

Нажмем «ОК» для сохранения нового пользователя.

Теперь в списке имен входа среди прочих мы можем увидеть только что созданных пользователей.

  • Posted on July 25, 2009 by

There are two methods to add a user in SQL Server. One way is to do so using code (programmatically), the second way is to use the interface. First we will explore the programmatic way, then we will walk through the interface.

First of all, there are two different ways users can login to SQL Server. One is automatically using their windows accounts or (Windows Authentication), the other is by using SQL Server Authentication. When a user is created in SQL using SQL Authentication, the user will have to type in the username and password manually in order to connect.

  • Windows Authentication – The user will connect to SQL Server automatically using their existing credentials without having to type in their username or password. (More Secure)
  • SQL Authentication – The user will be prompted to type in the username and password manually in order to connect. (Less Secure)

Add User Using Windows Authentication

[cc lang=”sql”]
— Create user windows Authentication
CREATE LOGIN [YourDomainNameJohnJacobs] FROM WINDOWS
WITH DEFAULT_DATABASE = [YourDatabaseHere];
GO
— Now add user to database
USE YourDatabaseHere;
CREATE USER JohnJacobs FOR LOGIN [YourDomainNameJohnJacobs];
— If adding to a second database, do so below:
USE YourSecondDatabaseHere;
CREATE USER JohnJacobs FOR LOGIN [YourDomainNameJohnJacobs];
[/cc]

Add User Using SQL Authentication

[cc lang=”sql”]
— Create user for SQL Authentication
CREATE LOGIN JohnJacobs WITH PASSWORD = ‘JinGleHeimerSchmidt’
,DEFAULT_DATABASE = [YourDatabaseHere]
GO
— Now add user to database
USE YourDatabaseHere;
CREATE USER JohnJacobs FOR LOGIN JohnJacobs;
GO
— If adding to a second database, do so below:
USE YourSecondDatabaseHere;
CREATE USER JohnJacobs FOR LOGIN JohnJacobs;
[/cc]

In order to use SQL Authentication, your SQL Server Instance must be set to Mixed Mode Authentication

The first step of creating a login only gets the user into the front gate of the community of databases. In order to get them into the databases themselves, you must create a user (tied to that login) for each of the databases they will access.

The next step is to add the user to a role.
Or you can view the entire Add User Script.

На первый взгляд, в MS SQL нестандартная система учетных записей. В ней существуют логины и пользователи.

Логины — это понятие всего сервера SQL. У них могут быть права на какие-то административные задачи (например бэкап). Им можно дать права на какие-то действия с базой или таблицой. Для того что бы у логина были права на базу на основе него создается пользователь. Они могут быть как SQL логином, так и созданные на основе  существующих пользователя Windows или AD. Например тот пользователь, который устанавливал MS SQL так же добавился в список логинов. Рекомендуется использовать логины на основе Windows или AD, а не SQL логины.

Пользователи — это понятие в рамках одной базы. Им нельзя дать права по административной части, но можно дать права на работу с базой.

Оба типа учетных записи можно создать как в графике, так и с помощью запроса T-SQL

T-SQL CREATE USER, CREATE LOGIN

Перейдем в базу данных, в которой мы работаем:

USE pubs

Для создания логина SQL выполним:

CREATE LOGIN Anton WITH PASSWORD='Password1910'

Anton — имя логина. Password1910 — пароль. У этого логина уже будут права на вход. 

Посмотреть что этот логин создался можно так:

Как открыть список логинов MS SQL

Под номером 3 — это кнопка обновления. Может понадобится т.к. в графике изменения происходят не моментально.

Для создания пользователя привязанного к логину нужно выполнить:

CREATE USER AntonUser FOR LOGIN Anton

Отмечу, что пользователь создасться в той базе, откуда мы выполняем запрос.

Что бы просто создать пользователя нужно:

CREATE USER JustUser WITHOUT LOGIN

Где JustUser — просто пользователь

Созданных пользователей можно увидеть так:

Список пользователей MS SQL

Пользователи создаются без каких либо прав на базу.

T-SQL GRANT

GRANT в пер. «Разрешение» дает права на какое-то действие.

Что бы дать пользователю право получать данные из какой-то таблицы нужно выполнить:

GRANT SELECT ON dbo.authors TO AntonUser

Если мы хотим зайти под созданным пользователем нам нужно выполнить ряд действий. Дело в том, что по умолчанию аутентификация по логинам SQL отключена (разрешена только Windows). Для этого зайдем в свойства сервера:

Свойства сервера Microsoft SQL

Затем в «Безопасность» и включи аутентификация SQL

Включение аутентификации SQL 

Теперь мы сможем зайти под логином SQL. Для этого сделаем следующее — откроем новое окно запросов Ctr + N или нажмем кнопку:

Кнопка нового запроса MS SQL

Важно сделать так, что бы у нас было 2 окошка для запросов до того как мы сменем пользователя. Благодаря этому у нас каждое окно будет работать под разными пользователями

Затем окно подключения пользователя:

Новое подключение MS SQL

Меняем тип подключени на SQL и вводим логин/пароль. Я создавал логин Anton, с паролем Password1910.

После подключения можем увидеть, что одно окно работает под логином Anton, а другое под учетной записью с помощью которой мы проводили операции выше. Так же обратите внимания, что новые пользователь подключен к другой базе (master).

Пользователь в окне запроса MS SQL

Перейдем к базе, на которую мы давали права. В моем случае это база pubs

USE pubs

Я давал права на SELECT для таблицы dbo.authors. Проверем работу:

SELECT *
FROM dbo.authors

Запрос дожен пройти успешно.

Для другой таблицы, на которую мы не давали прав:

SELECT *
FROM dbo.titles

Получим ошибку

The SELECT permission was denied on the object ‘titles’, database ‘pubs’, schema ‘dbo’.

Что бы отозвать разрешение на SELECT нужно заменить GRANT на REVOKE (не забудьте переключится на окно у которого есть разрешение или переключится на предыдущего пользователя):

REVOKE SELECT ON dbo.authors TO AntonUser

Разрешений, которые мы можем выдать пользователю достаточно много. Это основные:

MS SQL права для пользователей

Мы можем так же явно запретить пользователю выполнять определенные запросы. Для этого есть DENY:

DENY SELECT ON dbo.authors TO AntonUser

Что ба дать разрешение на создание таблиц:

USE Pubs;
GRANT CREATE TABLE TO Anton;

Теперь создадим логин через графический интерфейс. Нажмем следующие кнопки:

Создание логина MS SQL

В новом окне мы должны заполнить логин (1) и пароль (3). Под цифрой 2 мы можем увидеть выбор способа аутентификации. В случае Windows мы должны будем выбрать локального пользователя или пользователя AD. Перейдем на закладку Server Roles (4).

Настройки логина для MS SQL

Перед нами находятся роли уровня сервера. Все эти роли это просто набор прав. В Microsoft SQL мы так же можем создать и свои группы. Public — роль по умолчанию для всех, кому разрешено вход. Из всех созданных ролей только public можно изменять.

Роли уровня сервера MS SQL

Приведу описание самых популярных ролей:

MS SQL роли пользователей

Перейдем на следующую вкладку (2)

На этой закладке можно сразу создать пользователя и привязать его к базе данных. На этой закладке отображаются 4 базы, которые вы скорее всего раньше не видели. Это системные базы данных, которые хранят в себе транзакции, структуру подключенных баз, скрипты агента и т.д. В области 2 можно дать права на выделенную базу данных.

Права пользователя MS SQL

Коротко о нескольких ролях баз данных:

MS SQL права пользователей

Роль public, в отличии от всех остальных, можно изменять. Т.е. можно дать роли public разрешение на SELECT и тогда все пользователи с логином смогут это делать. По умолчанию эта ролько может делать запросы типа:

SELECT 1+1

Теги:

#ms-sql

Abstract

Logins and Users are basic security concepts in SQL Server. They are often, and incorrectly, considered to be pretty much one in the same so it is sometimes confusing to some SQL Server users. Another important security concept tied to a login and user in SQL Server is Security Identifiers (SID). This article will explain these concepts through a step-by-step demonstration. This article will focus on the Windows login and provide some specific usage scenarios.

Login vs User

A login is a security principal at the scope of the SQL Server instance, and a SQL Server instance can contain numerous databases. There are two main types of logins; Windows authenticated login and SQL Server authenticated login. Simply stated, a login allows you to connect to a SQL Server instance.

Once you are connected to SQL Server instance, you will typically need access to a particular database. To allow access to a database, this login must be mapped to a database user. Internally within SQL Server, a login is mapped and identified to a user using security identifier (SID).

With this brief definition of login and user, we will now proceed to our demonstration to learn how these security concepts are connected to each other.

Windows Authenticated Login

In the scenario when a Windows user is created in the Active Directory, it is assigned a security identifier (SID) which is used to access domain resources. SIDs are unique within their scope (domain or local) and are never reused. This domain level SID is then used by SQL Server as source principal for SID. So, we are now talking about two SIDs, one is the domain level SID and the other is the SQL Server SID. The domain level SID representation is in string which looks like GUID (i.e. S-1-5-21-124525095-708259637-1543119021), and SQL Server SID representation is in binary (i.e. 0x010600000000000901000000E286A25BE10CFF1FDF83DB82A0179E302B98EB23).

From the high level, they might seem to be different, but the SID stored in SQL Server is actually a translation from the domain SID. If this statement seems confusing, then the demonstration below would walk you through how they are connected to each other.

The configuration of our demonstration is three SQL Servers 2016 Developer Edition running Windows Server 2012 R2 Data Center. All the servers are joined to the domain controller SQLDC.

Step 1 – Create a Windows user

In Active Directory, we will create a Windows user account u007. We can execute a Windows Management Instrumentation Command-line (WMIC) from a command prompt as below to get the domain level SID for Windows user account u007.

Step 2 – Create User Defined Function

Before proceeding any further, we will execute the script below to create a user defined function ufn_StringToSID on the 3 SQL Server instances – SQLP1, SQLP2 and SQLP3

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

USE tempdb

GO

CREATE FUNCTION dbo.ufn_StringToSID

(

   @strSID VARCHAR(100)

)

RETURNS VARBINARY(100)

AS

BEGIN

   DECLARE @binSID varbinary(100), @i bigint

   SET @binSID = CONVERT(varbinary, CONVERT(tinyint, SUBSTRING(@strSID , 3,1))) + 0x05

   SET @binSID = @binSID + CONVERT(binary(6), CONVERT(tinyint, SUBSTRING(@strSID ,

5,1)))

   SET @strSID = SUBSTRING(@strSID,7,LEN(@strSID)6)

   WHILE CHARINDEX(‘-‘,@strSID) > 0

   BEGIN

  SET @i = CONVERT(bigint, SUBSTRING(@strSID,1,CHARINDEX(‘-‘,@strSID)1))

  SET @binSID = @binSID + CONVERT(varbinary(4), REVERSE(CONVERT(varbinary,

@i)))

      SET @strSID = SUBSTRING(@strSID,CHARINDEX(‘-‘,@strSID)+1,LEN(@strSID))

   END

   SET @i = CONVERT(bigint, @strSID)

   SET @binSID = @binSID + CONVERT(varbinary(4), REVERSE(CONVERT(varbinary, @i)))

   RETURN (@binSID)

END

Step 3 – Add Windows user account to SQL Server

We will now add Windows user u007 into SQLP1.

USE [master]

GO

CREATE LOGIN [SQLDC\u007] FROM WINDOWS WITH DEFAULT_DATABASE=[master],

DEFAULT_LANGUAGE=[us_english]

GO

SQL Server provides an undocumented system function SID_BINARY() which can translate domain level SID into binary SID representation stored in SQL Server.

In this article, we will also use our, previously described, userdefined function ufn_StringToSID to convert the domain level SID into binary SID representation stored in SQL Server. Both functions accept the domain level SID as a parameter and return a binary value output.

One reason to use ufn_StringToSID is to allow an insight into the translation between domain level SID into SQL Server SID representation. SID_BINARY() output would serve as a control output to make sure the user defined function is working as it should.

The binary login SID stored in SQL Server can be retrieved from dynamic view management sys.server_principals. Both function output should match the SID retrieved from sys.server_principals.

Here, you can see that the SID stored in SQL Server is just a binary representation of the domain level SID.

Step 4 – Grant Windows user u007 privilege to a user database

When the login u007 is granted access to a database in SQL Server, it creates a database user which maps back to the instance level login. Internally in SQL Server, the Windows login maps back to the database user using the same SID value.

So, the database user name can pretty much be any name and the permission would still work fine. This is possible because the binary SID value will be the same for both the login at the SQL Server instance level and the user at the database level.

Step 5 – Windows login automatically maps SID

We can now backup and restore the [SQLShack] database to SQLP2. We will add Windows user u007 to SQL Server instance SQLP2. We do not need to grant any additional privilege on the [SQLShack] database. The Windows login will automatically map to the database the user SID in [SQLShack] database and all privileges will be maintained the same as [SQLShack] database on SQLP1.

Step 6 – Domain level SID do not change

Since the domain level SID did not change, the binary SID value in SQL Server sys.server_principals will remain the same. If we check the domain level SID and the SID stored in SQL Server on SQLP2, they would produce the same output as on SQLP1 for both the login and the database user.

If we execute a create table DDL on SQLP2, db_owner permission would allow the table to be created successfully.

Step 7 – New Windows user with same name

In some organizations, Windows user accounts are created in an incrementalnumbering fashion. A user account is dropped when an employee leaves the organization, and the same number sometimes gets re-used over time.

What happens when the user account is dropped from Active Directory and the same Windows user name is created?

Well, the Windows user will be assigned a new SID by the Active Directory. The new SID gets the next numbering and incremented by 1.

The repercussion is that the new Windows user u007 SID will not be able to connect to SQL Server SQLP1 and SQLP2 because the binary SID value stored in SQL Server would not match.

Step 8 – Restore user database and add new login on SQLP3

Now we restore SQLShack database to SQLP3 and add the new Windows user u007 here.

In this scenario, we have a mismat in SID value stored in SQL server SQLP3 between the login and the database user. A SID mismatch can happen for Windows login similarly to SQL Server login. The SID for the Windows login u007 has incremented by 1, and the database user SID value reflects the point in time when the database backup was taken on SQLP1 as indicated in the red box below.

Because the SQLP3 Windows authenticated login SID reflects the new Windows user u007, we can connect to SQL Server SQLP3. But the Windows login would not allow access to the user database. This situation sometimes provides problems when the database user name is the same as the login because SQL Server would then prompt, with an error, that the user name already exists when you try to grant privilege to the database.

The solution to fix this issue is to drop the database user from the database. Then grant the Windows login again access to the database either using T-SQL or SSMS.

Conclusion

SQL Server logins can be assigned server level permissions, and database users can be assigned database level permissions. Logins and users are mapped to each other when the SID values are identical.

A significant benefit of using a Windows user in SQL Server is the automatic mapping of SID to allow access to resources, since the SID is always the same on the scope of domain or local.

Beware of dropping and recreating a domain user account with the same account name. This could cause the unexpected issues such as mismatched SIDs in SQL Server. The best practice is not to reuse the domain user account with the same name.

  • Author
  • Recent Posts

Simon Liew

Simon Liew an independent SQL Server Consultant with deep understanding of Microsoft SQL Server technology with focus on delivering business solutions. He loves exploring data and passionate about sharing his knowledge.

Simon has over 15+ years of database design, implementation, administration and development in SQL Server. He is a Microsoft Certified Master for SQL Server 2008 and holds a Master’s Degree in Distributed Computing. Achieving Microsoft masters-level certifications validate the deepest level of product expertise, as well as the ability to design and build the most innovative solutions for complex on-premises, off-premises, and hybrid enterprise environments using Microsoft technologies.

View all posts by Simon Liew

Simon Liew

Managing SQL Server security is a critical part of maintaining your SQL Server environment. In this article, let us take a step-by-step approach to create a new database User and grant permissions to the User.

In SQL Server, a Login is created for the server instance whereas a User is created for a database. A Login has to be mapped to a User to connect to a database. A login can be mapped to only one user for any database. The scope of a User is the database

There are two ways to create a new User or to grant user permissions:

  • Using Microsoft SQL Server Management Studio
  • Using T-SQL

Create New User using SSMS

Open SQL Server management studio. In the Object Explorer, expand the Databases node.

Here, we are going to create a new user for the HR database. So, expand the HR database.

Expand the Security folder of the database and right click on User and select New User, as shown below.

Create a New User and Grant Permissions in SQL Server 2019

In the Database User — New dialog box, on the General tab page, User type drop down lists the following types:

  • SQL user with login
  • SQL user with password
  • SQL user without login
  • User mapped to a certificate
  • User mapped to an asymmetric key
  • Windows user

Select the User type as «SQL User with login» from the drop-down.

Under User name, enter a new user name. Here, we will enter ‘Steve’ as a user name.

Create a New User and Grant Permissions in SQL Server 2019

Under Login name, type the previously created login i.e., Steve. Alternately click on the ellipsis ... button to open the Select – Login dialog box.

Create a New User and Grant Permissions in SQL Server 2019

Click on Browse button and select an existing login name to map with this user, as shown below. Select login ‘Steve’. Click the OK button to proceed.

Create a New User and Grant Permissions in SQL Server 2019

The Owned Schema page lists all the available schemas in the database. To add schemas to the user, select the check box next to the schema name.

Create a New User and Grant Permissions in SQL Server 2019

The Membership page lists all the possible membership roles that can be owned by the database user being created. To add membership roles, select the check-box next to the roles.

Create a New User and Grant Permissions in SQL Server 2019

The Securables page lists all the securables and permissions that can be granted to the user. We will look at how to grant permissions to the User later in the article under User Permissions.

Create a New User and Grant Permissions in SQL Server 2019

The Extended Properties page allows custom properties to be added to database users.

This page displays the name of the selected database and the collation used which are read-only fields. The page also has an option to view or specify the extended properties for the object.

Create a New User

Click OK to create this user.

Create a New User using T-SQL

USE <database-name>
CREATE USER <user-name> FOR LOGIN <login-name> 

The following creates a new user Steve in the HR database:

USE HR 
GO 
    CREATE USER 'Steve' FOR LOGIN 'Steve' 
GO

Want to check how much you know SQL Server?

  • Add java to path windows 10
  • Adblocker ultimate for windows лицензионный ключ
  • Adi 1988a b audio driver windows 10 64 bit
  • Add gradle to path windows
  • Adb не запускается на windows 10