Как добавить пользователя в sql
Перейти к содержимому

Как добавить пользователя в sql

  • автор:

Как добавить пользователя в MS SQL: пошаговая инструкция

Замените [имя_пользователя] на имя пользователя, которое вы хотите создать, и ‘пароль’ на пароль для этого пользователя. После создания логина, вы также можете добавить этого пользователя как пользователя базы данных, используя команду CREATE USER.

 USE [имя_базы_данных]; CREATE USER [имя_пользователя] FOR LOGIN [имя_пользователя]; 

Замените [имя_базы_данных] на имя базы данных, в которой вы хотите добавить пользователя. Теперь пользователь добавлен в MS SQL и готов к использованию.

Детальный ответ

Как добавить пользователя в MS SQL

Добро пожаловать в увлекательный мир баз данных! В этой статье мы рассмотрим, как добавить пользователя в MS SQL. Для этого мы будем использовать SQL Server Management Studio (SSMS). Это мощный инструмент, который поможет нам управлять базами данных и пользователями.

Шаг 1: Откройте SQL Server Management Studio

Первым шагом откройте SQL Server Management Studio и подключитесь к вашему серверу баз данных.

Шаг 2: Откройте окно «Security»

После успешного подключения к серверу баз данных, найдите и откройте раздел «Security» в дереве объектов слева. В этом разделе вы найдете информацию о пользователях, ролях и других элементах безопасности.

Шаг 3: Нажмите правой кнопкой мыши на папке «Logins» и выберите «New Login»

Нажмите правой кнопкой мыши на папке «Logins» в разделе «Security» и выберите пункт «New Login». Это откроет окно для создания нового пользователя.

Шаг 4: Введите имя пользователя и выберите тип аутентификации

В окне «New Login» введите необходимое имя пользователя в поле «Login name». Затем выберите тип аутентификации в разделе «Authentication». В зависимости от вашего случая, вы можете использовать «Windows Authentication» или «SQL Server Authentication».

Шаг 5: Установите пароль (только для SQL Server Authentication)

Если вы выбрали «SQL Server Authentication», установите пароль для нового пользователя в поле «Password». Убедитесь, что пароль надежный и надежно хранится.

Шаг 6: Настройте другие параметры пользователя (по желанию)

В разделе «Default Database» вы можете выбрать базу данных, к которой новый пользователь будет иметь доступ по умолчанию. Также вы можете настроить другие параметры, такие как разрешения, роли, проверку политик паролей и т. д.

Шаг 7: Нажмите «OK», чтобы создать пользователя

После заполнения всех необходимых полей, нажмите кнопку «OK», чтобы создать нового пользователя. Если все данные заполнены корректно, пользователь будет создан и отображаться в папке «Logins» в разделе «Security».

Пример кода

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

 USE [master] GO CREATE LOGIN [имя пользователя] WITH PASSWORD=N'ваш_пароль', DEFAULT_DATABASE=[ваша_база_данных], CHECK_EXPIRATION=OFF, CHECK_POLICY=OFF GO ALTER SERVER ROLE [имя_роли] ADD MEMBER [имя пользователя] GO 

Замените «[имя пользователя]», «[ваш_пароль]», «[ваша_база_данных]» и «[имя_роли]» соответствующими значениями вашего пользователя. Теперь вы знаете, как добавить пользователя в MS SQL с помощью SQL Server Management Studio. Не забывайте, что правильная учетная запись пользователя и безопасность баз данных являются важным аспектом в разработке и управлении базами данных. Удачи в изучении баз данных!

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

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

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

Что означает выделенный текст

В этом руководстве любые строки, которые пользователь должен ввести или изменить, будут выделены цветом ! Весь остальной текст можно просто скопировать и вставить.

Создание нового пользователя

В части 1 руководства по работе с MySQL мы воспользовались всеми возможностями для редактирования в MySQL с помощью пользователя с правами root, обладающего полным доступом ко всем базам данных. Однако для тех случаев, когда нам могут потребоваться дополнительные ограничения, существует возможность создания пользователей с настраиваемыми правами.

Давайте начнем с создания нового пользователя внутри оболочки MySQL:

Примечание: при добавлении пользователей в оболочке MySQL в данном руководстве мы будем в качестве хоста пользователя использовать localhost , а не IP-адрес сервера. localhost — это имя хоста, которое означает «этот компьютер», и MySQL работает с этим именем хоста особенным образом: когда пользователь на данном хосте выполняет вход в MySQL, СУБД будет пытаться подключиться к локальному серверу, используя файл сокета Unix. Таким образом, localhost обычно используется, если вы планируете подключение к вашему серверу через SSH или если вы запускаете локальный клиент mysql для подключения к локальному серверу MySQL.

В данный момент newuser не имеет прав на выполнение каких-либо действий с базами данных. Фактически, даже если newuser попытается выполнить вход (с помощью пароля password ), он не сможет получить доступ к оболочке MySQL.

Таким образом, первое, что необходимо сделать, — это предоставить пользователю доступ к необходимой ему информации.

Звездочки в этой команде обозначают базу данных и таблицу (соответственно), к которым пользователь может получить доступ. Эта конкретная команда позволяет пользователю читать, редактировать, запускать и выполнять любые задачи для всех баз данных и таблиц.

Обратите внимание, что в этом примере мы предоставляем newuser полный корневой доступ ко всему содержанию нашей базы данных. Хотя это может быть полезно для объяснения некоторых концепций MySQL, в большинстве случаев это может быть нецелесообразно и может отрицательно сказаться на безопасности вашей базы данных.

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

После этого внесенные вами изменения вступят в силу.

Предоставление пользователю различных прав

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

  • ALL PRIVILEGES — как мы уже увидели ранее, данный набор прав предоставляет пользователю MySQL полный доступ к определенной базе данных (если не выбрана ни одна база данных, предоставляется глобальный доступ к системе)
  • CREATE — позволяет пользователю создавать новые таблицы или базы данных
  • DROP — позволяет пользователю удалять таблицы или базы данных
  • DELETE — позволяет пользователю удалять строки из таблиц
  • INSERT — позволяет пользователю вставлять строки в таблицы
  • SELECT — позволяет пользователю выполнять команду SELECT для чтения данных из базы
  • UPDATE — позволяет пользователю обновлять строки таблицы
  • GRANT OPTION — позволяет пользователю предоставлять или отзывать права других пользователей

Чтобы предоставить конкретному пользователю какое-либо право, вы можете использовать следующую структуру команды:

Если вы хотите предоставить пользователю доступ к любой базе данных или любой таблице, необходимо поместить звездочку (*) на место имени базы данных или имени таблицы.

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

Если вам требуется отозвать какое-либо право, структура команды будет практически идентична структуре команды, используемой для предоставления права:

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

Вы можете просмотреть текущие права пользователя с помощью следующей команды:

Так же как вы можете удалять базы данных с помощью DROP, вы можете использовать DROP для полного удаления пользователя:

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

а затем войдите снова, введя следующую команду в терминале:

Заключение

После прохождения этого руководства у вас должно появиться понимание того, как добавлять новых пользователей и предоставлять им различные права для работы с базой данных MySQL. Теперь вы можете продолжать изучение и эксперименты с различными конфигурациями прав для вашей базы данных или узнать больше о некоторых продвинутых конфигурациях MySQL.

Если вы хотите узнать больше об основах работы с MySQL, мы рекомендуем вам ознакомиться со следующими обучающими материалами:

  • Создание баз данных и управление ими в MySQL и MariaDB на облачном сервере
  • Импорт и экспорт баз данных и сброс корневого пароля в MySQL
  • Миграция базы данных MySQL между двумя серверами
  • Настройка репликации master–slave в MySQL

Thanks for learning with the DigitalOcean Community. Check out our offerings for compute, storage, networking, and managed databases.

CREATE LOGIN (Transact-SQL)

Создает имя входа для баз данных SQL Server, База данных SQL Azure, Управляемый экземпляр SQL Azure, Azure Synapse Analytics или System Analytics. Выберите одну из следующих вкладок для синтаксиса, аргументов, примечаний, разрешений и примеров для конкретной версии.

CREATE LOGIN участвует в транзакциях. Если откат транзакции CREATE LOGIN выполняется в рамках транзакции, для создания имени для входа также выполняется откат. При выполнении в транзакции созданное имя входа не может использоваться до фиксации транзакции.

Идентификатор Microsoft Entra ранее был известен как Azure Active Directory (Azure AD).

Дополнительные сведения о соглашениях о синтаксисе см. в статье Соглашения о синтаксисе в Transact-SQL.

Выбор продукта

В следующей строке выберите название нужного продукта, и отобразится информация только об этом продукте.

* SQL Server *

SQL Server

Синтаксис

-- Syntax for SQL Server CREATE LOGIN login_name < WITH | FROM > ::= PASSWORD = < 'password' | hashed_password HASHED >[ MUST_CHANGE ] [ , [ . ] ] ::= SID = sid | DEFAULT_DATABASE = database | DEFAULT_LANGUAGE = language | CHECK_EXPIRATION = < ON | OFF>| CHECK_POLICY = < ON | OFF>| CREDENTIAL = credential_name ::= WINDOWS [ WITH [ . ] ] | EXTERNAL PROVIDER | CERTIFICATE certname | ASYMMETRIC KEY asym_key_name ::= DEFAULT_DATABASE = database | DEFAULT_LANGUAGE = language 

Аргументы

login_name

Указывает имя пользователя для создаваемого имени входа. Существует пять типов имен входа: имена входа SQL Server, имена входа Windows, имена входа Microsoft Entra, имена входа, сопоставленные с сертификатом, и асимметричные имена входа, сопоставленные с ключом.

При создании имен входа, сопоставленных с учетной записью домена Windows, необходимо использовать имя входа в формате [\]. Нельзя использовать имя участника-участника в формате login_name@DomainName. Пример E см. далее в этой статье. Имена входа проверки подлинности — это имя sysname и должны соответствовать правилам идентификаторов и не могут содержать обратную косую черту (). Имена входа Windows могут содержать символы «\». Имена входа на основе пользователей Active Directory ограничены именами менее 21 символов.

При использовании предложения FROM EXTERNAL PROVIDER имя входа должно соответствовать отображаемого имени существующего субъекта Microsoft Entra в том же клиенте, на котором включен экземпляр SQL. Пользователи, группы и приложения Microsoft Entra можно использовать для создания имен входа.

PASSWORD =’password

Применяется только к именам входа SQL Server. Задает пароль для создаваемого имени входа. Выбирайте надежные пароли. Дополнительные сведения см. в статьях Надежные пароли и Политика паролей. Начиная с SQL Server 2012 (11.x), сохраненные сведения о пароле вычисляются с помощью SHA-512 «соленого» пароля.

В паролях учитывается регистр символов. Пароли всегда должны содержать не менее восьми символов и не могут превышать 128 символов. Пароли могут содержать символы a-z, A-Z, 0-9 и большинство небуквенно-цифровых символов. Пароли не могут содержать одинарные кавычки или login_name.

PASSWORD = hashed_password

Применимо только к ключевому слову HASHED. Указывает хэшированное значение пароля для создаваемого имени входа.

HASHED

Применяется только к именам входа SQL Server. Указывает, что пароль, введенный после аргумента PASSWORD, уже хэширован. Если этот параметр не выбран, строка, введенная как пароль, будет хэширована перед сохранением в базе данных. Данный параметр может быть применен только для миграции баз данных с одного сервера на другой. Не используйте параметр HASHED для создания новых имен входа. Параметр HASHED нельзя использовать с хэшами, созданными SQL 7 или более ранней версией.

MUST_CHANGE

Применяется только к именам входа SQL Server. Если этот параметр задан, то при первом использовании нового имени входа SQL Server запрашивает новый пароль.

CREDENTIAL =credential_name

Имя учетных данных для сопоставления с новым именем входа SQL Server. Учетные данные уже должны существовать на сервере. В настоящее время этот параметр только связывает учетные данные с именем входа. Учетные данные нельзя сопоставить с именем входа System Администратор istrator (sa).

SID = sid

Используется для повторного создания имени входа. Применяется только к именам входа проверки подлинности SQL Server, но не относится к именам входа проверки подлинности Windows. Указывает идентификатор SID нового имени входа проверки подлинности SQL Server. Если этот параметр не используется, SQL Server назначает идентификатор SID автоматически. Структура идентификатора SID зависит от версии SQL Server. Идентификатор SID имени входа SQL Server: 16-байтовое (binary(16)) литеральное значение, основанное на GUID. Например, SID = 0x14585E90117152449347750164BA00A7 .

DEFAULT_DATABASE =база данных

База данных по умолчанию, связываемая с именем входа. Если этот параметр не включен, для базы данных по умолчанию задано значение master .

DEFAULT_LANGUAGE =language

Язык по умолчанию, назначаемый имени входа. Если этот параметр не включен, язык по умолчанию устанавливается на текущий язык по умолчанию сервера. При смене языка по умолчанию для сервера язык по умолчанию имени входа не меняется.

CHECK_EXPIRATION =

Применяется только к именам входа SQL Server. Указывает, должна ли политика истечения срока действия паролей принудительно применяться к этому имени входа. Значение по умолчанию — OFF.

CHECK_POLICY =

Применяется только к именам входа SQL Server. Указывает, что политики паролей Windows компьютера, на котором работает SQL Server, должны принудительно применяться к этому имени входа. Значение по умолчанию — ON.

Если политика Windows требует надежных паролей, то пароль должен обладать по крайней мере тремя из следующих четырех качеств:

  • Наличие символов верхнего регистра (A-Z).
  • Наличие строчных символов (a-z).
  • Числа (0-9).
  • Один из неэлементных символов, таких как пробел, _, @, @, ^, %, !, $, #или &.
ОКНА

Имя входа сопоставлено с именем входа Windows.

FROM EXTERNAL PROVIDER

Указывает, что имя входа сопоставляется с субъектом Microsoft Entra. Этот параметр доступен для SQL Server 2022 с поддержкой Arc и более поздних версий. Дополнительные сведения см. в разделе проверки подлинности Microsoft Entra для SQL Server

CERTIFICATE certname

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

ASYMMETRIC KEY asym_key_name

Имя асимметричного ключа, связываемого с данным именем входа. Этот ключ уже должен происходить в master базе данных.

Замечания

  • В паролях учитывается регистр символов.
  • Предварительное кэширование паролей поддерживается только при создании имен входа SQL Server.
  • Если MUST_CHANGE задано, необходимо задать ON значение CHECK_EXPIRATION и CHECK_POLICY. В противном случае выполнение инструкции приведет к ошибке.
  • Сочетание CHECK_POLICY = OFF и CHECK_EXPIRATION = ON не поддерживается.
  • Если для CHECK_POLICY задано OFF значение , lockout_time сбрасывается и CHECK_EXPIRATION имеет OFF значение .

CHECK_EXPIRATION и CHECK_POLICY применяются только в Windows Server 2003 и более поздних версиях. Дополнительные сведения см. в разделе Политика паролей.

  • Имена входа, созданные из сертификатов или асимметричных ключей, используются только для подписи кода. Их нельзя использовать для подключения к SQL Server. Вы можете создать имя входа из сертификата или асимметричного ключа только в том случае, если сертификат или асимметричный ключ уже существует master .
  • Скрипт для передачи имен входа см. в разделе Способы передачи имен входа и паролей между экземплярами SQL Server 2005 и SQL Server 2008.
  • При создании имени входа оно автоматически включается, и ему предоставляется разрешение CONNECT SQL уровня сервера.
  • Для разрешения доступа режим проверки подлинности сервера должен соответствовать типу имени входа.
  • Сведения о проектировании системы разрешений см. в статье Getting Started with Database Engine Permissions.

Разрешения

  • Создавать имена входа могут только пользователи с разрешением ALTER ANY LOGIN на сервере или имеющие членство в предопределенной роли сервера securityadmin. Дополнительные сведения см. в разделах Роли уровня сервера и ALTER SERVER ROLE.
  • Если используется параметр CREDENTIAL , также необходимо разрешение ALTER ANY CREDENTIAL на сервере.

Разрешения для SQL Server 2022 и более поздних версий

Требуется разрешение CREATE LOGIN на сервере или членство в предопределенных роли сервера ##MS_LoginManager## .

После создания имени входа

Созданное имя входа может подключаться к SQL Server, но имеет разрешения только для роли public. Попробуйте выполнить некоторые из приведенных ниже действий.

  • Чтобы подключиться к базе данных, создайте пользователя базы данных для имени входа. Дополнительные сведения можно найти в статье CREATE USER (Transact-SQL).
  • Создайте определяемую пользователем роль сервера с помощью CREATE SERVER ROLE. Используйте ALTER SERVER ROLE . ADD MEMBER для добавления нового имени входа в определяемую пользователем роль сервера. Дополнительные сведения см. в статьях CREATE SERVER ROLE и ALTER SERVER ROLE.
  • Используйте sp_addsrvrolemember для добавления имени входа в фиксированную роль сервера. Дополнительные сведения см. в разделе Роли уровня сервера и sp_addsrvrolemember.
  • Воспользуйтесь инструкцией GRANT, чтобы предоставить разрешения уровня сервера новому имени входа или роли, содержащей это имя входа. Дополнительные сведения см. в статье GRANT.

Примеры

А. Создание имени входа с паролем

В следующем примере создается имя входа для конкретного пользователя и назначается пароль.

CREATE LOGIN WITH PASSWORD = ''; GO 

B. Создание имени входа с паролем, который необходимо изменить

В следующем примере создается имя входа для конкретного пользователя и назначается пароль. Параметр MUST_CHANGE требует, чтобы пользователь изменил этот пароль при первом подключении к серверу.

Область применения: SQL Server 2008 (10.0.x) и более поздних версий.

CREATE LOGIN WITH PASSWORD = '' MUST_CHANGE, CHECK_EXPIRATION = ON; GO 

Невозможно использовать параметр MUST_CHANGE, если параметр CHECK_EXPIRATION имеет значение OFF.

C. Создание имени входа, сопоставленного с учетными данными

В следующем примере создается имя входа для конкретного пользователя с использованием идентификатора пользователя. Это имя входа сопоставляется с учетными данными.

Область применения: SQL Server 2008 (10.0.x) и более поздних версий.

CREATE LOGIN WITH PASSWORD = '', CREDENTIAL = ; GO 

D. Создание имени входа из сертификата

В следующем примере создается имя входа для конкретного пользователя из сертификата master .

Область применения: SQL Server 2008 (10.0.x) и более поздних версий.

USE MASTER; CREATE CERTIFICATE WITH SUBJECT = ' certificate in master database', EXPIRY_DATE = '12/05/2025'; GO CREATE LOGIN FROM CERTIFICATE ; GO 

Е. Создание имени входа из учетной записи домена Windows

В следующем примере имя входа создается на основе учетной записи домена Windows.

Область применения: SQL Server 2008 (10.0.x) и более поздних версий.

CREATE LOGIN [\] FROM WINDOWS; GO 

F. Создание имени входа из идентификатора безопасности

В следующем примере создается имя входа с проверкой подлинности SQL Server и определяется его SID.

CREATE LOGIN TestLogin WITH PASSWORD = 'SuperSecret52&&'; SELECT name, sid FROM sys.sql_logins WHERE name = 'TestLogin'; GO 

Наш запрос возвращает идентификатор SID 0x241C11948AEEB749B0D22646DB1A19F2. Ваш запрос вернет другое значение. Следующие выражения удаляют имя входа, а затем повторно создают имя входа. Используйте SID из предыдущего запроса.

DROP LOGIN TestLogin; GO CREATE LOGIN TestLogin WITH PASSWORD = 'SuperSecret52&&', SID = 0x241C11948AEEB749B0D22646DB1A19F2; SELECT * FROM sys.sql_logins WHERE name = 'TestLogin'; GO 

G. Создание имени входа с несколькими аргументами

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

CREATE LOGIN [MyUser] WITH PASSWORD = 'MyPassword', DEFAULT_DATABASE = MyDatabase, CHECK_POLICY = OFF, CHECK_EXPIRATION = OFF ; 

H. Создание имени входа SQL с хэшированных паролем

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

-- run this to retrieve the password hash for an individual Login: SELECT LOGINPROPERTY('Andreas','PASSWORDHASH') AS password_hash; -- as an alternative, the catalog view sys.sql_logins can be used to retrieve the password hashes for multiple accounts at once. (This could be used to create a dynamic sql statemnt from the result set) SELECT name, password_hash FROM sys.sql_logins WHERE principal_id > 1 -- excluding sa AND name NOT LIKE '##MS_%##' -- excluding special MS system accounts -- create the new SQL Login on the new database server using the hash of the source server CREATE LOGIN Andreas WITH PASSWORD = 0x02000A1A89CD6C6E4C8B30A282354C8EA0860719D5D3AD05E0CAE1952A1C6107A4ED26BEBA2A13B12FAB5093B3CC2A1055910CC0F4B9686A358604E99BB9933C75B4EA48FDEA HASHED; 

I. Создание имени входа для пользователя Microsoft Entra

В следующем примере создается имя входа для учетной записи joe@contoso.onmicrosoft.com Microsoft Entra, которая существует в клиенте Microsoft Entra с именем contoso.

CREATE LOGIN [joe@contoso.onmicrosoft.com] FROM EXTERNAL PROVIDER GO 

J. Создание имени входа для федеративной учетной записи Microsoft Entra

В следующем примере создается имя входа для федеративной учетной записи bob@contoso.com Microsoft Entra, которая существует в клиенте с именем contoso. Пользователь Боб также может быть гостем.

CREATE LOGIN [bob@contoso.com] FROM EXTERNAL PROVIDER GO 

K. Создание имени входа для группы Microsoft Entra

В следующем примере создается имя входа для группы Microsoft Entra group mygroup , которая существует в клиенте contoso.

CREATE LOGIN [mygroup] FROM EXTERNAL PROVIDER GO 

L. Создание имени входа для приложения Microsoft Entra

В следующем примере создается имя входа для приложения Microsoft Entra myapp , существующего в клиенте contoso.

CREATE LOGIN [myapp] FROM EXTERNAL PROVIDER 

Связанный контент

  • Приступая к работе с разрешениями Database Engine
  • Субъекты
  • Политика паролей
  • ALTER LOGIN
  • DROP LOGIN
  • EVENTDATA
  • Создание имени входа

* База данных SQL Azure *

База данных SQL

Дополнительные сведения о подключении и авторизации к База данных SQL Azure см. в следующем разделе:

  • параметры Подключение параметров База данных SQL Azure
  • Авторизация доступа к Базе данных SQL, Управляемому экземпляру SQL и Azure Synapse Analytics

Синтаксис

-- Syntax for Azure SQL Database CREATE LOGIN login_name < FROM EXTERNAL PROVIDER [WITH OBJECT_ID = 'objectid'] | WITH [. ] > ::= PASSWORD = < 'password' >[ , SID = sid ] 

Аргументы

login_name

Субъекты сервера Microsoft Entra (имена входа) в настоящее время находятся в общедоступной предварительной версии для База данных SQL Azure.

При использовании с предложением FROM EXTERNAL PROVIDER имя входа указывает субъект Microsoft Entra, который является пользователем, группой или приложением Microsoft Entra. В противном случае оно представляет созданное имя входа SQL.

Пользователи и субъекты-службы Microsoft Entra, которые являются членами более 2048 групп безопасности Microsoft Entra, не поддерживаются для входа в базу данных в База данных SQL, Управляемый экземпляр SQL или Azure Synapse.

FROM EXTERNAL PROVIDER

Указывает, что имя входа предназначено для проверки подлинности Microsoft Entra.

WITH OBJECT_ID = objectid

Указывает идентификатор объекта Microsoft Entra. OBJECT_ID Если задано, login_name не требуется для сопоставления отображаемого имени Microsoft Entra. Login_name должно быть уникальным именем в sys.server_principals представлении и соответствовать всем другим sysname ограничениям. Дополнительные сведения об использовании WITH OBJECT_ID параметра см. в разделе «Имена входа Microsoft Entra» и пользователей с неуникными отображаемыми именами.

Если отображаемое имя субъекта-службы не является дубликатом, следует использовать значение по умолчанию или CREATE USER инструкции CREATE LOGIN . Расширение WITH OBJECT_ID находится в общедоступной предварительной версии и является элементом устранения неполадок, реализованным для использования с неуникными субъектами-службами. Использование его с уникальным субъектом-службой не рекомендуется. WITH OBJECT_ID Использование расширения для субъекта-службы без добавления суффикса будет выполнено успешно, но не будет очевидно, какой субъект-служба создан для входа или пользователя. Рекомендуется создать псевдоним с помощью суффикса для уникальной идентификации субъекта-службы. Расширение WITH OBJECT_ID не поддерживается для SQL Server.

PASSWORD =»пароль»

Указывает пароль для создаваемого имени входа SQL. Выбирайте надежные пароли. Дополнительные сведения см. в статьях Надежные пароли и Политика паролей. Начиная с SQL Server 2012 (11.x), сохраненные сведения о пароле вычисляются с помощью SHA-512 «соленого» пароля.

В паролях учитывается регистр символов. Пароли всегда должны содержать не менее восьми символов и не могут превышать 128 символов. Пароли могут содержать символы a-z, A-Z, 0-9 и большинство небуквенно-цифровых символов. Пароли не могут содержать одинарные кавычки или login_name.

SID = sid

Используется для повторного создания имени входа. Применяется только к именам входа проверки подлинности SQL Server, но не относится к именам входа проверки подлинности Windows. Указывает идентификатор SID нового имени входа проверки подлинности SQL Server. Если этот параметр не используется, SQL Server автоматически назначает идентификатор безопасности. Структура идентификатора SID зависит от версии SQL Server. Для базы данных SQL это 32-байтовый (binary(32)) литерал, состоящий из 0x01060000000000640000000000000000 плюс 16 байт, представляющих GUID. Например, SID = 0x0106000000000064000000000000000014585E90117152449347750164BA00A7 .

Замечания

  • В паролях учитывается регистр символов.
  • При создании имени входа оно автоматически включается, и ему предоставляется разрешение CONNECT SQL уровня сервера.

Сведения о работе с именами входа и пользователями в базе данных SQL Azure см. в статье Управление именами входа в базе данных SQL Azure.

Имя входа

имена входа База данных SQL

Инструкция CREATE LOGIN должна быть единственной инструкцией в пакете.

В некоторых методах подключения к базе данных SQL, например sqlcmd, необходимо добавить имя сервера базы данных SQL к имени входа в строке подключения с помощью нотации @ . Например, если имя входа — login1 , а полное имя сервера базы данных SQL — servername.database.windows.net , то параметр username в строке подключения должен иметь вид login1@servername . Так как общая длина параметра username составляет 128 символов, длина имени login_name ограничена до 127 символов минус длина имени сервера. В примере login_name может иметь длину не более 117 символов, поскольку servername имеет длину 10 символов.

В База данных SQL необходимо подключиться к master базе данных с соответствующими разрешениями для создания имени входа. Дополнительные сведения см. в разделе Создание дополнительных имен входа и пользователей с правами администратора.

Правила SQL Server позволяют создать имя входа проверки подлинности SQL Server в формате @. Если сервер Базы данных SQL — myazureserver, а имя входа — myemail@contoso.com, то необходимо указать имя входа в виде myemail@contoso.com@myazureserver.

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

Разрешения

Только имя входа на уровне сервера (созданное процессом подготовки) или члены loginmanager роли базы данных в master базе данных могут создавать новые имена входа. Дополнительные сведения см. в разделе Создание дополнительных имен входа и пользователей с правами администратора.

Примеры

А. Создание имени входа с паролем

В следующем примере создается имя входа для конкретного пользователя и назначается пароль. Подключение к базам master данных, а затем используйте следующий пример кода.

CREATE LOGIN WITH PASSWORD = ''; GO 

B. Создание имени входа из идентификатора безопасности

В следующем примере создается имя входа с проверкой подлинности SQL Server и определяется его SID. Подключение к базам master данных, а затем используйте следующий пример кода.

CREATE LOGIN TestLogin WITH PASSWORD = 'SuperSecret52&&'; SELECT name, sid FROM sys.sql_logins WHERE name = 'TestLogin'; GO 

Наш запрос возвращает идентификатор SID 0x241C11948AEEB749B0D22646DB1A19F2. Ваш запрос вернет другое значение. Следующие выражения удаляют имя входа, а затем повторно создают имя входа. Используйте SID из предыдущего запроса.

DROP LOGIN TestLogin; GO CREATE LOGIN TestLogin WITH PASSWORD = 'SuperSecret52&&', SID = 0x241C11948AEEB749B0D22646DB1A19F2; SELECT * FROM sys.sql_logins WHERE name = 'TestLogin'; GO 

C. Создание имени входа с помощью учетной записи Microsoft Entra

В этом примере создается имя входа на логическом сервере SQL Azure с помощью учетных данных пользователя bob@contoso.com , существующего в домене contoso Microsoft Entra. Подключение к базам master данных, а затем используйте следующий пример кода.

CREATE LOGIN [bob@contoso.com] FROM EXTERNAL PROVIDER; GO 

D. Создание имени входа с псевдонимом с помощью идентификатора объекта

Псевдоним для login_name можно создать, указав идентификатор объекта субъекта-службы Microsoft Entra или группы. Подключение к базам master данных, а затем используйте следующий пример кода.

CREATE LOGIN [myapp4466e] FROM EXTERNAL PROVIDER WITH OBJECT_ID='4466e2f8-0fea-4c61-a470-xxxxxxxxxxxx'; 

Дополнительные сведения о получении идентификатора объекта субъекта-службы см. в разделе «Объекты субъекта-службы» в идентификаторе Microsoft Entra.

Связанный контент

  • Приступая к работе с разрешениями Database Engine
  • Субъекты
  • Политика паролей
  • ALTER LOGIN
  • DROP LOGIN
  • EVENTDATA
  • Создание имени входа

* Azure SQL
Управляемый экземпляр *

Управляемый экземпляр SQL Azure

Синтаксис

-- Syntax for Azure SQL Managed Instance CREATE LOGIN login_name [FROM EXTERNAL PROVIDER [WITH OBJECT_ID = 'objectid'] ] < WITH [. ]> ::= PASSWORD = | SID = sid | DEFAULT_DATABASE = database | DEFAULT_LANGUAGE = language 

Аргументы

login_name

При использовании с предложением FROM EXTERNAL PROVIDER имя входа указывает субъект Microsoft Entra, который является пользователем, группой или приложением Microsoft Entra. В противном случае оно представляет созданное имя входа SQL.

Пользователи и субъекты-службы Microsoft Entra, которые являются членами более 2048 групп безопасности Microsoft Entra, не поддерживаются для входа в базы данных в База данных SQL Azure, Управляемый экземпляр SQL Azure или Azure Synapse.

FROM EXTERNAL PROVIDER

Указывает, что имя входа предназначено для проверки подлинности Microsoft Entra.

WITH OBJECT_ID = objectid

Указывает идентификатор объекта Microsoft Entra. OBJECT_ID Если задано, login_name может быть пользовательским псевдонимом, сформированным из исходного отображаемого имени субъекта с добавленным суффиксом. Login_name должно быть уникальным именем в sys.server_principals представлении и соответствовать всем другим sysname ограничениям. Дополнительные сведения об использовании WITH OBJECT_ID параметра см. в разделе «Имена входа Microsoft Entra» и пользователей с неуникными отображаемыми именами.

Если отображаемое имя субъекта-службы не является дубликатом, следует использовать значение по умолчанию или CREATE USER инструкции CREATE LOGIN . Расширение WITH OBJECT_ID находится в общедоступной предварительной версии и является элементом устранения неполадок, реализованным для использования с неуникными субъектами-службами. Использование его с уникальным субъектом-службой не требуется. WITH OBJECT_ID Использование расширения для субъекта-службы без добавления суффикса будет выполнено успешно, но не будет очевидно, какой субъект-служба создан для входа или пользователя. Рекомендуется создать псевдоним с помощью суффикса для уникальной идентификации субъекта-службы. Расширение WITH OBJECT_ID не поддерживается для SQL Server.

PASSWORD = ‘password

Указывает пароль для создаваемого имени входа SQL. Выбирайте надежные пароли. Дополнительные сведения см. в статьях Надежные пароли и Политика паролей. Начиная с SQL Server 2012 (11.x), сохраненные сведения о пароле вычисляются с помощью SHA-512 «соленого» пароля.

В паролях учитывается регистр символов. Пароли всегда должны содержать не менее 10 символов и не могут превышать 128 символов. Пароли могут содержать символы a-z, A-Z, 0-9 и большинство небуквенно-цифровых символов. Пароли не могут содержать одинарные кавычки или login_name.

SID = sid

Используется для повторного создания имени входа. Применяется только для имен входа с проверкой подлинности SQL Server. Указывает идентификатор SID нового имени входа проверки подлинности SQL Server. Если этот параметр не используется, SQL Server автоматически назначает идентификатор безопасности. Структура идентификатора SID зависит от версии SQL Server. Для базы данных SQL это 32-байтовый (binary(32)) литерал, состоящий из 0x01060000000000640000000000000000 плюс 16 байт, представляющих GUID. Например, SID = 0x0106000000000064000000000000000014585E90117152449347750164BA00A7 .

Замечания

  • Синтаксис FROM EXTERNAL PROVIDER создает субъекты уровня сервера, сопоставленные с учетными записями Microsoft Entra
  • Если FROM EXTERNAL PROVIDER задано:
    • Login_name должен представлять существующую учетную запись Microsoft Entra (пользователя, группу или приложение), доступную в идентификаторе Microsoft Entra с помощью текущего Управляемый экземпляр SQL Azure. Для субъектов Microsoft Entra требуется синтаксис CREATE LOGIN:
      • UserPrincipalName объекта Microsoft Entra для пользователей Microsoft Entra.
      • DisplayName объекта Microsoft Entra для групп и приложений Microsoft Entra.

      Сведения о работе с именами входа и пользователями в базе данных SQL Azure см. в статье Управление именами входа в базе данных SQL Azure.

      Имена входа и разрешения

      Только имя входа на уровне сервера (созданное процессом подготовки) или члены securityadmin sysadmin роли базы данных в master базе данных могут создавать новые имена входа. Дополнительные сведения см. в разделах Роли уровня сервера и ALTER SERVER ROLE.

      По умолчанию стандартное разрешение, предоставленное только что созданному имени входа master Microsoft Entra: CONNECT SQL и VIEW ANY DATABASE.

      имена входа Управляемый экземпляр SQL

      • Требуется разрешение ALTER ANY LOGIN на сервере или членство в предопределенной роли сервера securityadmin или sysadmin . Только учетная запись Microsoft Entra с разрешением ALTER ANY LOGIN на сервере или членстве в одной из этих ролей может выполнить команду создания.
      • Если имя входа является субъектом SQL, только имена входа, которые являются частью sysadmin роли, могут использовать команду create для создания имен входа для учетной записи Microsoft Entra.
      • Должен быть членом того же клиента Microsoft Entra, что и Управляемый экземпляр SQL Azure.

      После создания имени входа

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

      • Сведения о создании пользователя из имени входа Microsoft Entra см. в статье CREATE USER.
      • Чтобы предоставить пользователю в базе данных разрешения, используйте ALTER SERVER ROLE . ADD MEMBER инструкцию, чтобы добавить пользователя в одну из встроенных ролей базы данных или настраиваемую роль, или предоставить пользователю разрешения непосредственно с помощью инструкции GRANT . Дополнительные сведения см. в разделах Пользователи без прав администратора, Дополнительные административные роли на уровне сервера, ALTER SERVER ROLE и GRANT.
      • Чтобы предоставить разрешения на уровне сервера, создайте пользователя базы данных в master базе данных и используйте инструкцию ALTER SERVER ROLE . ADD MEMBER , чтобы добавить пользователя в одну из ролей административного сервера. Дополнительные сведения см. в разделах Роли уровня сервера, ALTER SERVER ROLE и Роли сервера.
        • Используйте следующую команду, чтобы добавить sysadmin роль в имя входа Microsoft Entra: ALTER SERVER ROLE sysadmin ADD MEMBER [MS_Entra_login]

        Ограничения

        • Установка имени входа Microsoft Entra, сопоставленного с группой Microsoft Entra, так как владелец базы данных не поддерживается.
        • Олицетворение имен входа Microsoft Entra с помощью других субъектов Microsoft Entra поддерживается, например предложение EXECUTE AS .
        • Только субъекты-серверы (имена входа), которые являются частью sysadmin роли, могут выполнять следующие операции, предназначенные для субъектов Microsoft Entra:
          • EXECUTE AS USER;
          • EXECUTE AS LOGIN.
          -- Code to create login on the secondary instance CREATE LOGIN foo WITH PASSWORD = '', SID = ; 

          Примеры

          А. Создание имени входа с паролем

          В следующем примере создается имя входа для конкретного пользователя и назначается пароль.

          CREATE LOGIN WITH PASSWORD = ''; GO 

          B. Создание имени входа из идентификатора безопасности

          В следующем примере создается имя входа с проверкой подлинности SQL Server и определяется его SID.

          CREATE LOGIN TestLogin WITH PASSWORD = 'SuperSecret52&&'; SELECT name, sid FROM sys.sql_logins WHERE name = 'TestLogin'; GO 

          Наш запрос возвращает идентификатор SID 0x241C11948AEEB749B0D22646DB1A19F2. Ваш запрос вернет другое значение. Следующие выражения удаляют имя входа, а затем повторно создают имя входа. Используйте SID из предыдущего запроса.

          DROP LOGIN TestLogin; GO CREATE LOGIN TestLogin WITH PASSWORD = 'SuperSecret52&&', SID = 0x241C11948AEEB749B0D22646DB1A19F2; SELECT * FROM sys.sql_logins WHERE name = 'TestLogin'; GO 

          C. Создание имени входа для пользователя Microsoft Entra

          В следующем примере создается имя входа для учетной записи joe@contoso.onmicrosoft.com Microsoft Entra, которая существует в клиенте с именем contoso.

          CREATE LOGIN [joe@contoso.onmicrosoft.com] FROM EXTERNAL PROVIDER GO 

          D. Создание имени входа для федеративной учетной записи Microsoft Entra

          В следующем примере создается имя входа для федеративной учетной записи bob@contoso.com Microsoft Entra, которая существует в клиенте с именем contoso. Пользователь Боб также может быть гостем.

          CREATE LOGIN [bob@contoso.com] FROM EXTERNAL PROVIDER GO 

          Е. Создание имени входа для группы Microsoft Entra

          В следующем примере создается имя входа для группы Microsoft Entra group mygroup , которая существует в клиенте contoso.

          CREATE LOGIN [mygroup] FROM EXTERNAL PROVIDER GO 

          F. Создание имени входа для приложения Microsoft Entra

          В следующем примере создается имя входа для приложения Microsoft Entra myapp , существующего в клиенте contoso.

          CREATE LOGIN [myapp] FROM EXTERNAL PROVIDER 

          G. Проверка новых имен входа

          Чтобы проверить вновь добавленное имя входа, выполните следующую команду T-SQL:

          SELECT * FROM sys.server_principals; GO 

          Связанный контент

          • Приступая к работе с разрешениями Database Engine
          • Субъекты
          • Политика паролей
          • ALTER LOGIN
          • DROP LOGIN
          • EVENTDATA
          • Создание имени входа

          * Azure Synapse
          Analytics *

          Azure Synapse Analytics

          Синтаксис

          -- Syntax for Azure Synapse Analytics CREATE LOGIN login_name < FROM EXTERNAL PROVIDER | WITH [. ] > ::= PASSWORD = < 'password' >[ , SID = sid ] 

          Аргументы

          Субъекты сервера Microsoft Entra (имена входа) в настоящее время находятся в предварительной версии.

          При использовании с предложением FROM EXTERNAL PROVIDER имя входа указывает субъект Microsoft Entra, который является пользователем, группой или приложением Microsoft Entra. В противном случае оно представляет созданное имя входа SQL.

          Пользователи и субъекты-службы Майкрософт (приложения Microsoft Entra), которые являются членами более 2048 групп безопасности Microsoft Entra, не поддерживаются для входа в базу данных в База данных SQL, Управляемый экземпляр SQL или Azure Synapse.

          FROM EXTERNAL PROVIDER

          Указывает, что имя входа предназначено для проверки подлинности Microsoft Entra.

          login_name

          Указывает имя пользователя для создаваемого имени входа. SQL Analytics в Azure Synapse поддерживает имена входа только для SQL. Чтобы создать учетные записи для пользователей Microsoft Entra, используйте инструкцию CREATE USER .

          PASSWORD =»пароль»

          Указывает пароль для создаваемого имени входа SQL. Выбирайте надежные пароли. Дополнительные сведения см. в статьях Надежные пароли и Политика паролей. Начиная с SQL Server 2012 (11.x), сохраненные сведения о пароле вычисляются с помощью SHA-512 «соленого» пароля.

          В паролях учитывается регистр символов. Пароли всегда должны содержать не менее восьми символов и не могут превышать 128 символов. Пароли могут содержать символы a-z, A-Z, 0-9 и большинство небуквенно-цифровых символов. Пароли не могут содержать одинарные кавычки или login_name.

          SID = sid

          Используется для повторного создания имени входа. Применяется только к именам входа проверки подлинности SQL Server, но не относится к именам входа проверки подлинности Windows. Указывает идентификатор SID нового имени входа проверки подлинности SQL Server. Если этот параметр не используется, SQL Server автоматически назначает идентификатор безопасности. Структура идентификатора SID зависит от версии SQL Server. Для SQL Analytics это 32-байтовый (binary(32)) литерал, состоящий из 0x01060000000000640000000000000000 плюс 16 байт, представляющих GUID. Например, SID = 0x0106000000000064000000000000000014585E90117152449347750164BA00A7 .

          Замечания

          • В паролях учитывается регистр символов.
          • Скрипт для передачи имен входа см. в разделе Способы передачи имен входа и паролей между экземплярами SQL Server 2005 и SQL Server 2008.
          • При создании имени входа оно автоматически включается, и ему предоставляется разрешение CONNECT SQL уровня сервера.
          • Для разрешения доступа режим проверки подлинности сервера должен соответствовать типу имени входа.
          • Сведения о проектировании системы разрешений см. в статье Getting Started with Database Engine Permissions.

          Имена входа

          Инструкция CREATE LOGIN должна быть единственной инструкцией в пакете.

          При подключении к Azure Synapse с помощью таких инструментов, как sqlcmd, необходимо добавить имя сервера SQL Analytics к имени входа в строке подключения в виде @ . Например, если имя входа — login1 , а полное имя SQL Analytics — servername.database.windows.net , то параметр username в строке подключения должен иметь вид login1@servername . Так как общая длина параметра username составляет 128 символов, длина имени login_name ограничена до 127 символов минус длина имени сервера. В примере login_name может иметь длину не более 117 символов, поскольку servername имеет длину 10 символов.

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

          Правила SQL Server позволяют создать имя входа проверки подлинности SQL Server в формате @. Если сервер Базы данных SQL — myazureserver, а имя входа — myemail@contoso.com, то необходимо указать имя входа в виде myemail@contoso.com@myazureserver.

          Данные имени входа необходимы для проверки подлинности подключения, и правила брандмауэра на уровне сервера временно кэшируются в каждой базе данных. Этот кэш периодически обновляется. Чтобы принудительно обновить кэш проверки подлинности и убедиться в том, что база данных содержит последнюю версию таблицы имен входа, выполните инструкцию DBCC FLUSHAUTHCACHE.

          Дополнительные сведения об именах входа служб см. в разделе Управление базами данных и именами входа.

          Разрешения

          Только имя входа на уровне сервера (созданное процессом подготовки) или члены loginmanager роли базы данных в master базе данных могут создавать новые имена входа. Дополнительные сведения см. в разделах Роли уровня сервера и ALTER SERVER ROLE.

          После создания имени входа

          Созданное имя входа может подключаться к Azure Synapse, но имеет разрешения только для роли public. Попробуйте выполнить некоторые из приведенных ниже действий.

          • Чтобы подключиться к базе данных, создайте пользователя базы данных для имени входа. Дополнительные сведения можно найти в статье CREATE USER (Transact-SQL).
          • Чтобы предоставить пользователю в базе данных разрешения, используйте ALTER SERVER ROLE . ADD MEMBER инструкцию, чтобы добавить пользователя в одну из встроенных ролей базы данных или настраиваемую роль, или предоставить пользователю разрешения непосредственно с помощью инструкции GRANT . Дополнительные сведения см. в разделах Пользователи без прав администратора, Дополнительные административные роли на уровне сервера, ALTER SERVER ROLE и GRANT.
          • Чтобы предоставить разрешения на уровне сервера, создайте пользователя базы данных в master базе данных и используйте инструкцию ALTER SERVER ROLE . ADD MEMBER , чтобы добавить пользователя в одну из ролей административного сервера. Дополнительные сведения см. в разделах Роли уровня сервера, ALTER SERVER ROLE и Роли сервера.
          • Воспользуйтесь инструкцией GRANT, чтобы предоставить разрешения уровня сервера новому имени входа или роли, содержащей это имя входа. Дополнительные сведения см. в статье GRANT.

          Примеры

          А. Создание имени входа с паролем

          В следующем примере создается имя входа для конкретного пользователя и назначается пароль.

          CREATE LOGIN WITH PASSWORD = ''; GO 

          B. Создание имени входа из идентификатора безопасности

          В следующем примере создается имя входа с проверкой подлинности SQL Server и определяется его SID.

          CREATE LOGIN TestLogin WITH PASSWORD = 'SuperSecret52&&'; SELECT name, sid FROM sys.sql_logins WHERE name = 'TestLogin'; GO 

          Наш запрос возвращает идентификатор SID 0x241C11948AEEB749B0D22646DB1A19F2. Ваш запрос вернет другое значение. Следующие выражения удаляют имя входа, а затем повторно создают имя входа. Используйте SID из предыдущего запроса.

          DROP LOGIN TestLogin; GO CREATE LOGIN TestLogin WITH PASSWORD = 'SuperSecret52&&', SID = 0x241C11948AEEB749B0D22646DB1A19F2; SELECT * FROM sys.sql_logins WHERE name = 'TestLogin'; GO 

          Связанный контент

          • Приступая к работе с разрешениями Database Engine
          • Субъекты
          • Политика паролей
          • ALTER LOGIN
          • DROP LOGIN
          • EVENTDATA
          • Создание имени входа

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

          Как работать с пользователями в MySQL: создавать и удалять учетные записи, предоставлять и отзывать привилегии, а также просматривать права доступа.

          Эта инструкция — часть курса «MySQL для новичков».

          Смотреть весь курс

          Введение

          В статье речь пойдет о работе с пользователями открытой реляционной системы управления базами данных (СУБД) MySQL, появившейся в 1994 году. В 2008 году Sun Microsystems купил MySQL AB, а в 2010 уже Sun была поглощена Oracle. Эти продажи побудили авторов исходной СУБД создать форк — MariaDB, свободный от лицензионных ограничений текущего владельца и совместимый с Oracle MySQL. Помимо «Марии» известен другой форк, Percona, — от Петра Зайцева и Вадима Ткаченко. Оба форка совместимы с MySQL.

          БД от Percona обладает дополнительными функциями, направленными на повышение производительности. Многие дистрибутивы (например, Red Hat) перешли на MariaDB из-за предсказуемой лицензионной политики. В своих проектах автор использует MariaDB.

          Есть несколько способов работы с БД MySQL: через графические phpMyAdmin, MySQL WorkBench и т.д.

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

          Для этого понадобится минимум — консольный клиент mysql. Запускать его можно на своей рабочей станции (mysql —host= [—user=] [—password=] [database]) или через ssh на самом сервере (в случае ОС Linux).

          Зачем нужны пользователи

          После установки MySQL технически мы можем подключаться из нашего ПО от имени root’а, но это не безопасно. Работая с информационными системами, мы всегда должны помнить и соблюдать принцип наименьших привилегий. Для более безопасной работы и создаются пользователи БД. Привилегии должны быть предоставлены пользователю строго только те, что действительно необходимы.

          Администратору MariaDB в работе требуется создавать учетные записи «обычных» пользователей с ограниченным доступом к данным, определять права доступа, при необходимости — создавать дополнительных (привилегированных) суперпользователей. Также важно проводить аудит — просматривать выданные полномочия и корректировать их по мере необходимости.

          Пользователи MySQL

          Имя пользователя MySQL

          В MySQL имя пользователя состоит из 2-х частей: имени пользователя (обязательно) и хоста (может быть опущена, тогда она означает ‘%’):

          ‘someuser’@’somehost’, аналогично, почтовому адресу.

          Поняв это правило, посмотрим, как по умолчанию выглядит суперпользователь. На самом деле полностью учетка записывается трижды: ‘root’@’localhost’, ‘root’@’127.0.0.1’ и ‘root’@’::1’ с одинаковым парольным хешем.

          В хостовой части могут использоваться DNS-имена, IP-адреса и символ подстановки %, обозначающий любой (любые) символы.

          Примеры записи хоста:

          somehost.example.com localhost 127.0.0.1 ::1 192.168.123.% 192.168.123.0/255.255.255.0 %

          Примечание: имена и адреса следует указывать в том формате, в каком возвращает системный DNS resolver сервера.

          Просмотр всех пользователей

          Давайте проверим, какие пользователи есть в нашей БД. Выведем основную информацию о пользователях:

          SELECT host, user, password, password_expired FROM mysql.user;

          Когда список получается большим, мы можем добавить фильтр (в примере — по хостам, начинающимся с msk):

          SELECT host, user, password FROM mysql.user WHERE host LIKE 'msk%';

          Или использовать в конце модификатор \G, оптимизирующий вывод для отображения в консоли:

          SELECT host, user, password FROM mysql.user\G;
          SELECT * FROM mysql.user[\G];

          Создание нового пользователя MySQL

          Новый пользователь в MySQL добавляется командой:

          CREATE USER 'some_user'@'somehost.somedomain' IDENTIFIED BY 'some_password';

          Теперь давайте создадим нашего первого пользователя:

          CREATE USER 'test'@'localhost' IDENTIFIED BY 'secret'; FLUSH PRIVILEGES;

          Полезная возможность — добавление комментария:

          CREATE USER 'test'@'localhost' COMMENT 'My 1st user for app';

          FLUSH PRIVILEGES

          Обратите внимание на эту команду: она дает серверу команду перечитать привилегии. Как следует из документации, команда FLUSH PRIVILEGES в MySQL нужна только в случае прямой модификации таблиц привилегий MySQL операторами типа INSERT, UPDATE или DELETE. Но для простоты запоминания будем указывать ее и для «правильных» операторов таких как GRANT, REVOKE, SET PASSWORD и RENAME USER, как в примере выше и остальных, используемых в статье.

          Удаление пользователя MySQL

          Для удаления пользователя используется команда

          DROP USER 'some_user'@'somehost.somedomain';

          На нашем предыдущем примере:

          DROP USER 'test'@'localhost'; FLUSH PRIVILEGES;

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

          Это не лучшая практика, но бывают ситуации, когда у СУБД несколько хозяев и всем нужно быть суперпользователями. В MySQL добавить пользователя с root-правами можно так:

          GRANT ALL PRIVILEGES ON *.* TO 'admin'@'%' WITH GRANT OPTION; FLUSH PRIVILEGES;

          Теперь пользователь root безопасно хранится у нас, а для административной работы с БД мы можем передать коллегам или партнерам учетную запись admin.

          Отзыв полномочий у пользователя

          Команда отзыва привилегий функционально обратна GRANT, “TO” заменяется на “FROM”:

          REVOKE SELECT ON `somedb`.* FROM 'someuser'@'somehost'; REVOKE ALL PRIVILEGES ON `somedb`.* FROM 'someuser'@'somehost'; REVOKE ALL PRIVILEGES, GRANT OPTION FROM 'someuser'@'somehost';

          Смена пароля

          Для изменения пароля учетной записи пользователя применяется команда ALTER USER:

          ALTER USER 'test_user'@'localhost' IDENTIFIED BY 'new_password';

          Предоставление доступа пользователю MySQL

          Доступ предоставляется командой:

          GRANT SELECT ON `some_db`.* TO 'some_user'@'somehost.somedomain'; FLUSH PRIVILEGES;

          Допустим, наше ПО использует базу данных test_db. Для его работы мы создали пользователя test_user, а FQDN хоста, где работает ПО — наш локальный хост (localhost). Наше приложение только считывает данные из БД — выполняет SELECT.

          Создадим пользователя и БД (часто БД называют схемой, в терминах MySQL):

          CREATE SCHEMA test_DB; CREATE USER 'test_user'@'localhost' IDENTIFIED BY 'secret';

          Команда для предоставления доступа будет выглядеть так:

          GRANT SELECT ON `test_db`.* TO 'test_user'@'localhost'; FLUSH PRIVILEGES;

          Наследование привилегий

          В предыдущем примере наш пользователь сможет только читать данные из базы test_db, но передать свои права другому пользователю не сможет. Используя GRANT OPTION, мы можем позволить ему сделать это. Тогда пользователь получит возможность передавать другим то, что разрешено ему самому.

          GRANT SELECT, INSERT, UPDATE, DELETE ON `some_db`.* TO 'some_user'@'somehost' WITH GRANT OPTION;

          В этом примере some_user может поделиться правами на SELECT, INSERT, UPDATE, DELETE для базы some_db.

          Из соображений безопасности использовать GRANT OPTION небезопасно! В случае компрометации учетной записи злоумышленник сможет не только получить доступ к данным, но и сделать закладку в виде копии учетной записи.

          Доступ к таблице

          Примеры выше дают доступ ко всей БД. Часто доступ должен быть ограничен строго определенным набором таблиц:

          GRANT SELECT ON `test_db`.`table_users` TO 'test_user'@'localhost';

          Выполнение команды приведет к ошибке, т.к. этой таблицы еще нет.

          CREATE TABLE `test_db`.`table_users` (id INT AUTO_INCREMENT PRIMARY KEY, user_name VARCHAR(16) NOT NULL, password VARCHAR(32));

          и повторим предоставление доступа:

          GRANT SELECT ON `test_db`.`table_users` TO 'test_user'@'localhost';

          Доступ к столбцу

          Предоставляется перечислением столбцов:

          GRANT SELECT (id, user_name), UPDATE (user_name) ON `test_db`.`table_users` TO 'test_user'@'localhost';

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

          Просмотр привилегий пользователей MySQL

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

          Проверка текущих полномочий пользователя

          Нам пригодится команда:

          SHOW GRANTS FOR 'someuser'@'somehost.somedomain';
          SHOW GRANTS FOR 'appuser'@'srv14.example.com'; +--------------------------------------------------------------------------------------------------------------------------------+ | Grants for appuser@srv14.example.com | +--------------------------------------------------------------------------------------------------------------------------------+ | GRANT USAGE ON *.* TO 'appuser'@'srv14.example.com' IDENTIFIED BY PASSWORD '*F4E0A7F0B10264F70558CF07A4ABD4E041182D6E' | | GRANT SELECT ON `net_database`.* TO 'appuser'@'srv14.example.com' | +--------------------------------------------------------------------------------------------------------------------------------+ 2 rows in set (0.00 sec)

          Проверка полномочий к данным

          Через read-only БД information_schema доступно множество метаданных — системной информации. Информация о доступе на БД (схемы), таблицы и столбцы доступны в таблицах schema_privileges, table_privileges и column_privileges. Работа с ними — обычные SQL-запросы:

          SELECT * FROM information_schema.schema_privileges; SELECT * FROM information_schema.table_privileges; SELECT * FROM information_schema.column_privileges; SELECT * FROM information_schema.column_privileges WHERE GRANTEE="'test_user'@'localhost'";
          MariaDB [information_schema]> select * from information_schema.column_privileges WHERE GRANTEE="'test_user'@'localhost'"; +-------------------------+---------------+--------------+------------+-------------+----------------+--------------+ | GRANTEE | TABLE_CATALOG | TABLE_SCHEMA | TABLE_NAME | COLUMN_NAME | PRIVILEGE_TYPE | IS_GRANTABLE | +-------------------------+---------------+--------------+------------+-------------+----------------+--------------+ | 'test_user'@'localhost' | def | test_db | table_usr | id | INSERT | NO | | 'test_user'@'localhost' | def | test_db | table_usr | user_name | UPDATE | NO | +-------------------------+---------------+--------------+------------+-------------+----------------+--------------+ 2 rows in set (0.001 sec)

          Просмотр привилегий через системную БД mysql

          Аналогичных результатов можно добиться, обратившись к системным таблицам напрямую.

          Информация о пользователях:

          SELECT * FROM mysql.user;

          Привилегии на базы данных:

          SELECT * FROM mysql.db;

          Права, назначенные на таблицы:

          SELECT * FROM mysql.tables_priv;
           SELECT * FROM mysql.columns_priv;

          Просмотр глобальных привилегий

          Глобальные полномочия смотрим здесь:

          SELECT * FROM information_schema.user_privileges;

          Заключение

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

          При выдаче прав избегайте избыточности. Права не нужно выдавать с запасом, часто выполнение GRANT ALL PRIVILEGES ON *.* TO ‘myUser’@’%’ — не лучший выход. Другой важный момент, часто упускаемый из виду новичками, — наличие в имени хостовой части. Игнорирование хоста может привести к ошибкам.

          Всем высоких скоростей, безаварийной работы и долгого аптайма!

          Как создавать таблицы в MySQL (Create Table)

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *