Сведения о вопросе

Codeliver

20:35, 25th August, 2020

Теги

sql   sql-server   ms-access   triggers    

Построение системы аудита; MS Access frontend на сервере SQL backend

Просмотров: 534   Ответов: 11

Поэтому в основном я создаю приложение для своей компании, и оно NEEDS должно быть построено с использованием MS Access, и оно должно быть построено на сервере SQL.

Я составил большинство планов, но мне трудно понять, как справиться с системой аудита.

Поскольку он используется только внутри, и вы даже не сможете коснуться БД снаружи здания, мы не используем систему входа в систему, поскольку программа будет использоваться только после того, как пользователь уже вошел в нашу внутреннюю сеть через Active Directory. Зная это, мы используем систему для автоматического определения имени пользователя Active Directory и их разрешений в одной из таблиц DB, решая, что они могут или не могут делать.

Таким образом, фактическая таблица аудита будет иметь 3 столбца (этот дизайн может измениться, но для этого вопроса это не имеет значения); кто (пользователь Active Directory), когда (время addition/deletion/edit), что (что было изменено)

Мой вопрос в том, как я должен справиться с этим. В идеале я знаю, что должен использовать триггер, чтобы база данных не обновлялась без регистрации аудита, однако я не знаю, как я мог бы захватить пользователя Active Directory таким образом. Альтернативой было бы закодировать его непосредственно в источнике доступа, чтобы всякий раз, когда что-то меняется, я запускал оператор INSERT. Очевидно, что это неправильно, потому что если что-то происходит с доступом или база данных затронута чем-то другим, то она не будет регистрировать аудит.

Любые советы, примеры или статьи, которые могут мне помочь, будут очень признательны!



  Сведения об ответе

PROGA

19:37, 8th August, 2020

Это работает для вас?


select user_name(),suser_sname()

Дох! Я забыл сбежать от своего кода.


  Сведения об ответе

PHPH

05:28, 29th August, 2020

Хорошо, это работает здесь. Я вижу свои учетные данные windows, когда обновляю свои таблицы. Так что, держу пари, мы пропустили шаг. Позвольте мне составить последовательность 1,2,3 того, что я сделал, и, возможно, мы сможем отследить, где это ломается для вас.


  1. Создайте новую базу данных MSAccess (пустую)
  2. Нажмите на раздел таблицы
  3. Выберите внешние данные
  4. Выберите базу данных ODBC
  5. Выберите ссылку на источник данных, создав связанную таблицу
  6. Выберите источник данных машины
  7. Выбрать Новый...
  8. Системный Источник Данных
  9. Выберите SQL сервер из списка и нажмите кнопку Далее, Готово.
  10. Дайте новому источнику данных имя и описание, а затем выберите (локальный) для сервера. нажимать далее.
  11. Выбрать "With Windows NT authentication using the network login ID". нажимать далее.
  12. Установите флажок изменить базу данных по умолчанию на, и выберите DB. нажимать далее. нажать кнопку Finish.
  13. Проверьте источник данных.
  14. Выберите таблицу, с которой связан триггер, и нажмите кнопку OK.
  15. Откройте таблицу в Access и измените одну из записей (триггер не срабатывает при вставке, просто обновите)
  16. Выберите * из таблицы аудита


  Сведения об ответе

FAriza

13:14, 21st August, 2020

Если вы укажете SSPI в строке подключения на Sql, я думаю, что ваши учетные данные Windows будут предоставлены.


  Сведения об ответе

LAST

08:23, 5th August, 2020

Я попробовал немного поиграть с доступом, чтобы посмотреть, смогу ли я найти способ для вас. Я думаю, что вы можете указать новый источник данных для своей таблицы SQL и выбрать аутентификацию Windows NT в качестве типа подключения.


  Сведения об ответе

padenie

23:39, 18th August, 2020

Конечно :)

В Access должен быть раздел под названием "External Data" (я запускаю новую версию Access, поэтому выбор меню может быть другим).

В этой форме должна быть возможность указать соединение ODBC.

Я получаю возможность связать с источником данных, создав связанную таблицу.

Затем я создал машинный источник данных. Я выбрал SqlServer из выпадающего списка. Затем, когда я нажму кнопку Далее,мне будет предложено выполнить проверку подлинности.


  Сведения об ответе

pumpa

20:06, 25th August, 2020

CREATE TRIGGER testtrigger1
ON testdatatable
AFTER update
AS 
BEGIN
    INSERT INTO testtable (datecol,usercol1,usercol2) VALUES (getdate(),user_name(),suser_sname());
END
GO


  Сведения об ответе

lool

02:09, 2nd August, 2020

У нас также есть система баз данных, которая используется исключительно внутри организации и использует окно NT Логинов. Эта функция возвращает имя Входа текущего пользователя:

CREATE FUNCTION dbo.UserName() RETURNS varchar(50)
AS
    BEGIN
    RETURN  (SELECT nt_username FROM master.dbo.sysprocesses WHERE spid = @@SPID)
    END

Вы можете использовать эту функцию в своих триггерах.


  Сведения об ответе

прога

07:45, 3rd August, 2020

Сколько будет пользователей приложения? Есть ли возможность использовать встроенную аутентификацию windows для аутентификации SQL?

Обновлено: если вы можете дать каждому пользователю SQL login (windows integrated), то вы можете выбрать вошедшего пользователя с помощью функции SYSTEM_USER.


  Сведения об ответе

ЯЯ__4

19:41, 26th August, 2020

Так и должно быть

select user name(),suser sname()

заменить пробелы символами подчеркивания


  Сведения об ответе

davran

12:21, 9th August, 2020

вам нужно подключиться с интегрированной безопасностью aka trusted connection см. ( http://www.connectionstrings.com/?перевозчик=SQLServer, в )


  Сведения об ответе

$DOLLAR

10:51, 25th August, 2020

Мое решение будет заключаться в том, чтобы не позволять Access изменять данные со связанными таблицами.

Я бы только создал UI в Access и создал соединение ADO с сервером, используя windows, прошедшее проверку подлинности в строке подключения. Компиляция вы получаете доступ к приложению как dbe для защиты кода VB.

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

UI (Access) не должен знать, что внутренний работает на сервере. Все, что ему нужно сделать, это запросить и update/insert/delete, используя хранимые процедуры, которые вы создадите для этой цели. Сервер должен справиться с этой работой.

Извлеките набор записей с ADO, используя представление с подсказкой NOLOCK, реализованное на сервере, и кэшируйте эти данные в Access for local display. Или извлеките одну запись и заблокируйте только эту строку для редактирования.

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

С подключением ADO у вас не будет проблем с установкой ODBCs на каждом отдельном клиенте.

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

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


Ответить на вопрос

Чтобы ответить на вопрос вам нужно войти в систему или зарегистрироваться