Node.js MySQL - почему оператор UPDATE также запускает SELECT, как я могу избежать этого для пользователя MySQL с записью [duplicate]

Что вы хотите сделать с текстом? Является ли файл достаточно маленьким, чтобы вписаться в память? Я попытался бы найти самый простой способ обработки файла для ваших нужд. Для этого используется библиотека FileUtils.

for(String line: FileUtils.readLines("my-text-file"))
    System.out.println(line);
1
задан Edward Falk 12 January 2012 в 01:19
поделиться

4 ответа

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

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

4
ответ дан wallyk 18 August 2018 в 20:42
поделиться
  • 1
    Я думаю, что это лучший ответ. Изучение того, как писать хранимые процедуры сейчас. – Edward Falk 12 January 2012 в 21:42
  • 2
    Ну, это сработало довольно хорошо, хотя злоумышленник все еще может повредить базу данных, угадывая значения recno. Я разработал протокол безопасности для защиты от этого. Спасибо всем за помощь. – Edward Falk 13 January 2012 в 01:27

Это легко достигается путем предоставления правильного уровня доступа:

REVOKE ALL ON TABLE GRADES FROM USER1; -- to clear out all privileges
GRANT INSERT, UPDATE, DELETE ON TABLE GRADES TO USER1;

Это позволит USER1 вставлять, обновлять и удалять, но не выбирать из таблицы оценок.

Измените USER1 на PUBLIC или какую-нибудь группу или что-то еще, что вам нужно. Измените список разрешений по своему усмотрению.

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

GRANT UPDATE ON TABLE EMPLOYEE TO ACCT_STAFF; -- an no other privileges

, который позволяет им выплачивать 15% заработной платы за счет выполнения:

UPDATE EMPLOYEE SET PAY = PAY * 1.15 WHERE EMPLOYEE_ID = 666;
0
ответ дан Bohemian 18 August 2018 в 20:42
поделиться
  • 1
    Это по существу то, что я уже сделал, но «WHERE recno = 123» Для этого требуется привилегия SELECT. Например. «ОШИБКА 1143 (42000): команда SELECT, запрещенная для пользователя« ACCT_STAFF »для столбца« EMPLOYEE_ID »в таблице« EMPLOYEE », – Edward Falk 12 January 2012 в 02:06
  • 2
    @EdwardFalk Вам разрешено использовать WHERE recno=123 в операторе обновления без , выбрав доступ к таблице. Я не понимаю, о чем вы говорите. – Bohemian♦ 12 January 2012 в 02:45
  • 3
    Я просто попытался в соответствии с 5.1.41-3ubuntu12.10 с использованием точных команд, которые вы дали, и получил эту ошибку: & quot; ОШИБКА 1143 (42000): команда SELECT, запрещенная для пользователя 'ACCT_STAFF'@'foo.com' для столбца «EMPLOYEE_ID» в таблица «СОТРУДНИК». Возможно, это позволяют более поздние версии сервера. Я, конечно, согласен с тем, что он должен работать, но это не так. – Edward Falk 12 January 2012 в 03:23

Оооо! Я понял. Я дам привилегию пользователя SELECT для только столбца recno.

Если оставить вопрос открытым, на всякий случай, если кто-то придумает лучший ответ.

0
ответ дан Edward Falk 18 August 2018 в 20:42
поделиться

Создайте VIEW и предоставите пользователю полный доступ к нему. Это представление должно содержать только те строки, которые вы хотите, чтобы пользователь мог редактировать.

Другим и, возможно, более подходящим подходом было бы полностью отвлечь этот механизм от СУБД и вместо этого создать API, который вы разрешаете пользователям.

1
ответ дан kba 18 August 2018 в 20:42
поделиться
Другие вопросы по тегам:

Похожие вопросы: