2015-01-02 1 views
3

Например, у меня есть таблица вроде этого:База данных Oracle: как ограничить пользователя видеть только свои собственные данные?

    +-----------------------------+ 
       |  sample_table   | 
       +-----------------------------+ 
       | col_1 | col_2 | col_3 | 
       +-----------------------------+ 
User_1 Entered : |'val_1_1'|'val_1_2'|'val_1_3'| 
       +-----------------------------+ 
User_2 Entered : |'val_2_1'|'val_2_2'|'val_2_3'| 
       +-----------------------------+ 

теперь я хочу, если каждый из выше вопрос пользователей ниже запроса:

Select * from sample_table 

Результат для User_1 быть:

+-----------------------------+ 
| col_1 | col_2 | col_3 | 
+-----------------------------+ 
|'val_1_1'|'val_1_2'|'val_1_3'| 
+-----------------------------+ 

и для User_2 быть:

+-----------------------------+ 
| col_1 | col_2 | col_3 | 
+-----------------------------+ 
|'val_2_1'|'val_2_2'|'val_2_3'| 
+-----------------------------+ 

, что это хороший способ, чтобы ограничить каждый пользователь для доступа (выберите-обновление-удаление) только к его/ее данным? (все пользователи могут вставлять данные, но у меня есть их просмотр или изменение их данных). Спасибо за ваш ответ и руководства. Примечание: Я имею в виду Database users но был бы признателен, если кто-нибудь дать решение для application users тоже.

+1

Вам нужно конкретно указать, является ли пользователь 'application' или пользователем базы данных? –

+0

Здравствуйте, @LalitKumarB, я имел в виду пользователя «базы данных», но если я хочу узнать, как лучше всего подходит для пользователя «приложения», теперь я отредактирую сообщение –

+3

. Если вы не сохраните пользователя, который ввел данные в таблицу, нет вы можете позже отфильтровать его. Поэтому вам нужно добавить столбец «владелец» в таблицу –

ответ

0

Добавить поле Data_Owner в таблицу, заполненную функцией USER. Не допускайте прямого доступа к таблице. Весь доступ осуществляется через представление, которое предоставляет только те строки, которые соответствуют значению USER того, кто запрашивает представление. Триггер «вместо« триггера »может использовать функцию USER для управления DML.

create view Sample as 
select col_1, col_2, col3 
from Sample_Table 
where Data_Owner = USER; 

Для пользователей приложения, а пользователь просто использовать UDF, который снабжает пользователя или USER приложение, если есть не один. Детали этого, конечно, будут зависеть от того, как вы поддерживаете имена пользователей приложений.

+0

Спасибо за эту идею, я видел этот механизм раньше, но не просмотрел его и не обратил на это внимания, в любом случае спасибо за ваш ответ. –

Смежные вопросы