Создание временной таблицы при входе в SQL Server - PullRequest
0 голосов
/ 25 мая 2011

Возможно ли, чтобы SQL Server создавал временную таблицу внутри определенной базы данных при подключении пользователя к базе данных таким образом, чтобы подключающийся пользователь был единственным, имеющим доступ к содержимому этой таблицы (или даже лучше,подключающийся пользователь - единственный, кто может даже видеть таблицу)?

Я попытался использовать триггер входа в систему (в том числе с помощью условия 'with execute as caller'), но хотя это создает временную таблицу, подключающийся пользовательникогда не может увидеть / выбрать из него.Все это должно выполняться внутри SQL Server и вообще не требовать взаимодействия с пользователем ...

По сути, это сценарий, который я хочу поддерживать:

  • пользователь подключается
    • временная таблица создается внутри определенной БД внутри SQL (SQL запускается при установлении соединения)
  • некоторая конкретная информация заполняется внутри таблицы
  • на время соединения;пользователь имеет (Чтение) доступ к содержимому этой таблицы;информация в этой таблице используется подсистемой внутри конкретной базы данных
  • пользователь отключает
    • временную таблицу, и все ее содержимое отбрасывается SQL

Спасибо

Ответы [ 2 ]

1 голос
/ 25 мая 2011

Первые мысли:

  • изменить ваш клиентский код, чтобы создать таблицу на соединение? Тогда это можно сделать только тогда, когда это необходимо, а не постоянно
  • использовать общую постоянную таблицу с SessionID на основе GUID? Это обеспечит некоторую информацию по аудиту + устранению неполадок
  • используйте параметры табличных значений для отправки данных по требованию, а не для кэширования на стороне сервера

И что я, вероятно, сделаю:

  • создать таблицу, когда она будет заполнена, когда мне это нужно. Пользователь может подключиться к базе данных по разным причинам (я полагаю). Таким образом, «соединение» должно быть отделено от «CREATE TABLE».
0 голосов
/ 25 мая 2011

Использование временных таблиц для этого не будет правильным подходом, если ваш доступ к данным правильно спроектирован для открытия соединения - выполните операцию / запрос - закройте соединение.Как только вы закроете соединение, временная таблица будет уничтожена.Было бы лучше использовать представление или хранимую процедуру для фильтрации информации, к которой у пользователя должен быть доступ.Структура этого представления будет сильно зависеть от того, как пользователи подключаются к базе данных.Подключаются ли пользователи к базе данных, используя свою личную учетную запись для проверки подлинности Windows, или они подключаются косвенно через другую учетную запись, как это делают многие веб-серверы?

IMO, лучшим подходом является второй пункт ответа gbn: общее постоянноетаблица с индикатором относительно сеанса или пользователя.

...