#sql-server #node.js #knex.js
#sql-server #node.js #knex.js
Вопрос:
После успешного входа в систему каждый пользователь в приложении получает токен авторизации и выделенное подключение к SQL Server.
Когда сервер узла получает запрос, он проверяет наличие токена авторизации, и если он действителен — отправляет запрос к базе данных, используя соединение, которое было выделено для пользователя.
Токен и соединение хранятся в обычном объекте JSON, который очищается после перезапуска сервера узла. Поэтому пользователям приходится еще раз вводить свои учетные данные SQL sever.
Поскольку мой API нестабилен, мне нужно было бы часто перезапускать сервер узла, и это вызвало бы некоторые неудобства для пользователей.
Причина, по которой я использую выделенное соединение, заключается в возможности управлять доступом пользователей на уровне SQL server (предоставление доступа к определенным таблицам или представлениям) и использовать функцию SUSER_SNAME() для регистрации действий пользователей. Этот подход также позволяет мне реализовать модель безопасности на уровне строк.
Или, может быть, есть способ сохранить какой-то токен для сеанса SQL sever, который позволил бы подключаться к серверу без предоставления учетных данных пользователя?
Заранее спасибо!
Комментарии:
1. Пожалуйста, исправьте неправильное написание в названии вопроса. Честно говоря, я не уверен, что вы имели в виду, иначе я бы исправил это сам. Я не думаю, что вы «повреждаете базу данных», значит, что-то не так.
2. @jfriend00 Приношу свои извинения. Теперь это исправлено.
3. Я думаю, само собой разумеется, что было бы лучше исправить ваш API и сделать его стабильным, чтобы вам не приходилось регулярно перезапускать ваш сервер узла. Если бы я собирался вложить кучу инженерных средств для устранения этой проблемы, это кажется лучшим местом для проведения вашего времени.
Ответ №1:
Вы не можете сохранить соединение с базой данных во время перезапуска сервера. Соединение принадлежит определенному процессу, поэтому, когда этот процесс прерывается, соединение тоже прерывается.
Есть некоторые вещи, которые вы могли бы сделать:
-
Переместите подключения к базе данных в пользовательский прокси-процесс, который не перезапускается, и ваше приложение узла просто повторно подключится к прокси. Это позволило бы сохранить фактические подключения к базе данных на прокси, пока ваш node.js сервер перезапускается.
-
Сохраните учетные данные пользователя в локальной базе данных, чтобы, когда ваш node.js сервер перезапускается, вы можете повторно подключиться к базе данных, не запрашивая у пользователя повторно свои учетные данные. Это имеет очевидные последствия для безопасности.
-
Исправьте стабильность вашего API, чтобы ваш node.js сервер не нужно перезапускать очень часто.
Комментарии:
1. Спасибо! Не могли бы вы предоставить какие-либо ссылки на то, как может быть реализован пользовательский прокси-процесс?
2. @FlashDark — В этом случае это был бы просто собственный сервер, который был держателем ваших подключений к БД с помощью какого-нибудь простого API для создания соединения и отправки запроса на него.