Какая должна быть структура SQL запросов, учитывая текущего пользователя?
Имеется приложение на asp.net webforms с всякими GridView, DetailsView таблицами, соединенные с MSSQL базой. Появилась потребность в нескольких пользователях, и чтобы каждый пользователь видел только свои данные в этих таблицах. Я примерно представляю как это делается, но хотелось бы услышать замечания, вдруг я что-то себе не то выдумал :)
1) Создать таблицу юзеров.
2) Добавить в основую таблицу(к каждой записи) UserID как foreign key
3) Изменить запрос "Select * from 'table'" на "Select * from 'table' where UserID = @UserID" Послего чего параметр @UserID с# брать из CurrentSession, которая держит в себе этот айди после логина на сайт. И соответственно остальные процедуры переделать точно также на апдейты, делиты итд :)
В правильном направлении я мыслю? Или все же есть более лучше(правильные) варианты?
Направление мыслей верное, с технической точки зрения тоже. Не уверен насчет необходимости обновления апдейтов и делитов - если вы уже проверили UserId и выяснили, что запись принадлежит конкретному пользователю, и получили ее Id - то и удалять уже достаточно только по Id (за исключением, конечно, случая, когда вам нужно удалить ВСЕ записи конкретного пользователя).
Правильность этого варианта зависит от вашей задачи. Если вам достаточно знать пользователя-владельца - то все хорошо, но если вы потом захотите более сложную систему доступа к записям - например давать и другим пользователям доступ к записям пользователя A, то и схема базы также усложнится.
"например давать и другим пользователям доступ к записям пользователя A" - Это уже что-то интересненькое, надо будет тоже таким заняться, конечно после основного... Делаю приложение для приватного использования, тренируюсь и пытаюсь воплотить фантазии :)
Therapyx да что тут фантазировать, в большинстве крупных систем это есть, просто не всегда так уж заметно. Возьмите TFS или VS Online - в нем ресурсы (читайте, ваши "записи") - репозитории, баги, билд-конфигурации - распределены про team-проектам. В свою очередь, тим-проекты имеют владельца, плюс вы можете давать доступ другим юзерам с определенными правами. Это те же самые списки контроля доступа (ACL), что и например, на файловой системе (у файла также есть владелец, и те, кто могут с ним что-то делать). Да что уж там, даже в самой СУБД это есть - есть пользователи, группы (суперадмины, админы бэкапа, и т.д.), у них есть права на таблицы, вьюхи, хранимки и прочие объекты БД, плюс также как правило у объекта кто-то назначается текущим владельцем.