Аутентификация установлена на сервере. При запуске клиента появляется окно авторизации(объект TForm) пользователя с тремя полями(TEdit):
логин, пароль, роль. После ввода эти данные отправляются на сервер для подтверждения. Если сервер дает добро,
пускаем пользователя к БД в соответствии с его правами. По результату авторизации, я например могу заблокировать некоторые пункты меню.
Введённые логин/пароль передаются серверу - он либо устанавливает соединение, либо нет.
Положим, установили соединение. Далее у пользователя сервера есть ограничения на деятельность. Ограничения бывают разные: на запросы, вставки, изменения, исполнения процедур - вплоть до отображения и модификации отдельных колонок таблиц.
Далее системная хранимая процедура sp_helpuser и связаные с ней помогут.
Например, если права назначаются не каждому пользователю, а фиксированным ролям, то достаточно выяснить роль пользователя, а информацию об ограничениях роли зашить прямо в приложение (для какой роли какие пункты меню запрещены).
Если же предполагается динамически менять разрешения ролей, либо настройки задаются для каждого пользователя персонально, то задача усложняется. В крайнем случае проще будет пытаться выполнять действия и в случае ошибки принимать меры по её обработке - уведомлять пользователя "Доступ закрыт", блокировать какие-то элементы управления и т.д. - нежели выуживать все разрешения и запреты пользователя и вычислять, какие ХП и запросы нужно динамически модифицировать.
Лучше не городить огород, а трезво оценить достаточный уровень безопасности.