2016-04-07 9 views
2

Почему мне нужно ВЫБЕРИТЕ привилегию на это:UPDATE и ВЫБРАТЬ

UPDATE Sailors S SET 
S.rating = S.rating - 1 

В то время как я не нужно для этого запроса:

UPDATE Sailors S 
SET S.rating = 8 
+0

Я предполагаю, что это зависит от базы данных (на практике у любого, у кого есть привилегии выбора, есть привилегии выбора). Но первый запрос должен прочитать значение, поэтому это может быть причиной. –

+0

Какая СУБД вы используете? –

ответ

0

В первом вы выбираете

= S.rating - 1 

Во втором вы не выбираете

= 8 

sp_table_privileges

ВЫБОР = грантозаявителя может извлекать данные по одному или более из колонны.

INSERT = GRANTEE может предоставлять данные для новых строк для одного или нескольких столбцов.

UPDATE = GRANTEE может изменять существующие данные для одного или нескольких столбцов.

0

В первой, вы, по сути настройки S.rating = SELECT S.rating - 1 FROM Sailors S

Во втором вы просто заходящего S.rating = значение (8)

0

похоже, вы чтение из S в первом запросе (второй S.rating), где, как и во втором запросе, вы только когда-либо записываете данные на S. Для чтения данных вам понадобятся разрешения SELECT.

0

в первой «S.rating -1» это неизвестно Oracle и оракул двигатель идет к столу см по псевдонимам S (его матросы в вашем случае) и
а) рейтинг запросов от него и
б) затем вычесть 1 из него

для точки a для этого требуется привилегия выбора.