Уважаемые слушатели! Обращаем ваше внимание, что 01.05.2024 и 09.05.2024 у нас выходные дни. Вы можете оставить сообщение в чате, мы обязательно ответим!

Корзина

Корзина

Частным лицам +7 (495) 232-32-16

Слушателям
от организации
+7 (495) 780-48-44

+7 (495) 780-48-49

Частным лицам +7 (495) 232-32-16

Слушателям
от организации
+7 (495) 780-48-44

+7 (495) 780-48-49

Как проверить принадлежность пользователя SQL Server к группе или к роли?

Самородов Федор Анатольевич: Как проверить принадлежность пользователя SQL Server к группе или к роли?

СФА

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

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

В SQL-сервере есть простые функции и представления для таких проверок.

Для демонстрации этих механизмов я создам несколько ролей и групп разных типов. Разумеется, проверим, учитывает ли проверка вложенность. В моих примерах проверяемый пользователь входит только в самую глубоко вложенную группу/роль - №3 (помимо членства в одной-двух стандартных).

Группы Active Directory, роли базы данных, а также серверные роли поддерживают многоуровневую вложенность.

Роли базы данных

Анализируя системные представления Sys.Database_Principals и Sys.Database_Role_Members, вы получите полную картину о членстве в группах.

Системные представления Sys.Database_Principals и Sys.Database_Role_Members

Однако, как правило, полная картина нам не требуется. Достаточно просто проверить принадлежность текущего пользователя к одной конкретной роли. Для такой задачи имеется более простая функция Is_Member. Удобно, что она сама умеет работать с вложенными ролями.

Функция Is_Member умеет учитывать вложенность ролей

Группы Active Directory

Функция Is_Member умеет также работать с группами Active Directory. И тоже с учётом вложенности.

Учтите, что эта функция ориентируется на SID'ы групп, рассчитанные при входе пользователя. Поэтому, если пользователь был включён в группу после соединения с сервером, придётся переподключиться.

Функция Is_Member умеет учитывать вложенность групп Active Directory

Серверные роли

Вряд ли вам когда-нибудь на практике придётся программно проверять членство в серверной роли, однако такая возможность имеется.

Системные представления Sys.Server_Principals и Sys.Server_Role_Members

Подробнее об этом Вы сможете узнать на курсах SQL Server

envelope

Спасибо! Вам на e-mail отправлено письмо со ссылкой для подтверждения

Если письмо не пришло, поищите его в папке со спамом или повторите подписку

email-checked.png

Вы подписались на рассылку

Спасибо за обращение! Ваш менеджер свяжется с Вами в течение нескольких минут.