Sql Server изменить выбрать - PullRequest
0 голосов
/ 26 июня 2009

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

Что я хочу сделать, так это как-то изменить операторы SELECT до их выполнения на уровне базы данных. Для серьезно урезанного примера я хотел бы сделать что-то вроде следующего ... когда кто-то выполняет следующий SQL

SELECT * FROM users.MESSAGES 

Я хотел бы поймать его, прежде чем он выполнится, и изменить выражение на что-то вроде

SELECT * FROM users.MESSAGES WHERE RECIPIENT = ORIGINAL_LOGIN()

Позволяет мне вводить пользовательские ограничения для данных таким же образом, как и в VPD ORACLE, без необходимости прибегать к созданию представлений поверх всех моих таблиц, которым это может понадобиться.

Ответы [ 5 ]

2 голосов
/ 26 июня 2009

Изучите использование VIEW .

1 голос
/ 26 июня 2009

К сожалению, это невозможно.

Даже функции безопасности на уровне строк Microsoft SQL Server (например, в каталогах безопасности) реализованы с использованием представлений.

Итак, если вам действительно нужна эта функция, вам нужно будет настроить представления с помощью SUSER_NAME () или какого-либо подобного идентификатора личности или роли в предложениях WHERE.

Извините!

0 голосов
/ 27 июня 2009

Во-первых, не предоставляйте пользователям прямой доступ к таблицам, чтобы они не могли видеть данные из специального запроса. Заставьте их использовать хранимый процесс для доступа к таблице, и одним из параметров процесса является логин пользователя. Затем напишите код, чтобы он выбирал только записи для этого логина.

0 голосов
/ 27 июня 2009

Раньше в SQL 2000 был обходной неэтичный способ. Вы можете создать триггер для таблицы master..sysprocesses для INSERT и выполнять подобные манипуляции. К счастью, это невозможно, по крайней мере AFAIK, в SQL 2005, поскольку master..sysprocesses - это фальшивая таблица.

В интересах некоторых из нас, все еще использующих SQL 2000, вот как это сделать в SQL 2000:

  1. В консоли щелкните правой кнопкой мыши имя_серверы
  2. В свойствах перейти на сервер вкладка настроек
  3. Затем проверьте, чтобы изменения были внесены непосредственно в системные каталоги Флажок.
  4. Выбранная таблица sysprocesses в Системные объекты и изменить его тип от S (система) до U (пользователь)
  5. Теперь перейдите в Master DB, таблицы - справа нажмите на sysprocesses-All Задачи-Управление триггерами
  6. Тогда вы можете написать свой триггер
  7. После того, как вы закончите, поверните назад все в своем первоначальном состоянии.

Даже несмотря на все это, я все еще сомневаюсь, что вы можете изменить оператор Select.

Raj

Отказ от ответственности: попробуйте это на свой страх и риск. Имейте в виду, что вы вносите изменения в системные объекты, которые могут привести к нежелательным результатам.

0 голосов
/ 27 июня 2009

Использование представлений (или встроенных табличных функций), автоматическое создание представлений и удаление прав из таблиц.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...