Очень часто требуется написать хранимую процедуру или функцию, которая будет выдавать разные результаты для разных групп пользователей. Например, директор предприятия хочет видеть информацию по всем сотрудникам его фирмы, а начальники отделов только по своим сотрудникам. Реализовать это можно, например, включив пользователей в разные группы 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()