Функция IS_MEMBER

Источник: olontsev
Олонцев Сергей

Очень часто требуется написать хранимую процедуру или функцию, которая будет выдавать разные результаты для разных групп пользователей. Например, директор предприятия хочет видеть информацию по всем сотрудникам его фирмы, а начальники отделов только по своим сотрудникам. Реализовать это можно, например, включив пользователей в разные группы AD, а в запросе проверять вхождение и в зависимости от результата выдавать разные данные. В SQL Server существует функция IS_MEMBER способная осуществлять вышеуказанную проверку, причем она работает даже с вложенными группами. Функция принимает единственный параметр - название AD группы и возвращает 1, если текущий пользователь входит в указанную группу; 0 - если не входит и NULL, если такой группы в AD не найдено. Естественно, пользователи должны использовать Windows аутентификацию, чтобы воспользоваться этим функционалом. И привожу пример, как может выглядеть в хранимой процедуре вывод результатов в зависимости от вхождения в группу.

IF IS_MEMBER('TEST\CEO') SELECT [FirstName], [LastName], [Department], [Salary] FROM [HumanResources].[Employee] ELSE IF IS_MEMBER('TEST\DepartmentHead') SELECT [FirstName], [LastName], [Department], [Salary] FROM [HumanResources].[Employee] WHERE [Department] = (SELECT [Department] FROM [HumanResources].[Employee] WHERE [LoginName] = SUSER_SNAME()) ELSE SELECT [FirstName], [LastName], [Department], [Salary] FROM [HumanResources].[Employee] WHERE [LoginName] = SUSER_SNAME()

Страница сайта http://www.interface.ru
Оригинал находится по адресу http://www.interface.ru/home.asp?artId=36678