Если вы не планируете делать это в логике приложения, то единственный способ, которым я могу сейчас придумать, - это использовать хранимые процедуры или табличные функции.
Что бы вы сделали, это создали то, что часто называют CRUD (Create Read Update Delete) хранимыми процедурами для таблиц. Очевидно, что если вы только читаете из таблицы (таблиц), то требуется только чтение.
Внутри хранимой процедуры вы можете использовать логику для фильтрации результатов по имени пользователя.
Вы можете назначить пользователю роль в базе данных и дать этой роли право на выполнение хранимой процедуры. Или, если вы используете функцию табличного значения, вы бы дали ей роль привилегии SELECT. Вы не дали бы пользователю никаких привилегий для просмотра самой таблицы.
Ex.
CREATE ROLE CalendarReader AUTHORIZATION dbo;
GO
CREATE PROCEDURE Calendar_Get
AS
SET NOCOUNT ON;
SELECT
EventDate
,EventText
FROM
Calendar
WHERE
UserLogin = suser_sname()
;
GO
GRANT EXECUTE ON Calendar_Get TO CalendarReader;
GO