2008-08-15 7 views
4

Итак, в основном я создаю приложение для своей компании, и оно НЕОБХОДИМО быть построено с использованием MS Access и должно быть построено на SQL Server.Построение системы аудита; Интерфейс MS Access на бэкэнде SQL Server

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

Поскольку он используется только внутри страны, и вы даже не сможете коснуться базы данных вне здания, мы не используем систему входа в систему, так как программа будет использоваться только после того, как пользователь уже выполнит вход в нашу внутренней сети через Active Directory. Зная это, мы используем a system to detect automatically the name of the Active Directory user и с их разрешениями в одной из таблиц БД, решая, что они могут или не могут сделать.

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

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

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

+0

Ugh не работает, все еще добавляя то же самое через триггер. Также я должен упомянуть, что я использую ODBC для подключения ... – 2011-02-13 13:51:16

ответ

0

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

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

+0

@KevinKenny Я бы сказал что-то вроде 10-30 с потенциалом для дальнейшего использования в будущем. Я никогда не слышал или не использовал встроенную проверку подлинности Windows для SQL-сервера. Легко ли/безопасно? Такие вещи могут быть более жесткими для босса. :/ – 2011-02-13 13:51:02

2

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


select user_name(),suser_sname() 

Doh! Я забыл избежать кода.

+0

Нет, по-видимому, мой SQL-сервер не слышал ни о какой из этих команд ... – 2011-02-13 13:52:30

0

Это должно быть

select user name(),suser sname() 

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

+0

LOL как смущающе, что также отвечает на мой неписаный вопрос о том, что происходит с курсивом? Я не уверен, что они будут работать или просто вернут имя пользователя, которое я использую, чтобы подключить приложение Access к базе данных, которое является одинаковым для всех, - есть ли способ каким-то образом использовать Active Directory как часть SQL процесс аутентификации сервера? В любом случае, я проведу несколько тестов, чтобы убедиться, что это действительно так. – 2011-02-13 13:52:47

1

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

+0

Я эти две команды сделали то, что я подозревал, и просто вернули то же самое для всех. Я не использую строку подключения; как я сказал ранее, я использую Access и просто использую Связанные таблицы для подключения к моей базе данных. – 2011-02-13 13:53:09

0

вам необходимо связаться с интегрированной безопасностью аки доверенного соединения см (http://www.connectionstrings.com/?carrier=sqlserver)

+0

- это единственный способ? Должен ли я изменить всю модель связанных таблиц? Честно говоря, я даже не знаю, как интегрировать строку подключения в Access ... – 2011-02-13 13:49:43

1

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

+0

Jay, можете ли вы вникать в детали о том, КАК вы это сделали ... просто чтобы начать, t точно следуют ya. Будет ли все еще работать, мне все равно нужно пройти аутентификацию с помощью SQL-сервера, чтобы запускать запросы. – 2011-02-13 13:53:23

1

Конечно :)

Там должен быть раздел в доступе под названием «Внешние данные» (я бегаю новую версию Access, так что выбор меню может отличаться).

В этом случае должна быть опция указания соединения ODBC.

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

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

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

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


  1. Создать новую базу данных MSACCESS (пусто)
  2. нажмите на раздел таблицы
  3. Выберите внешние данные
  4. Пика ODBC базы данных
  5. Пика Ссылка на источник данных путем создания связанной таблицы
  6. Select Machine datasource
  7. Pick New ...
  8. System Datasource
  9. Выберите SQL Server из списка и нажмите «Далее», «Готово».
  10. Дайте новому источнику данных имя и описание и выберите (локально) для сервера. Нажмите "Далее.
  11. Выберите «С помощью проверки подлинности Windows NT с использованием идентификатора входа в сеть». Нажмите "Далее.
  12. Проверить Изменить базу данных по умолчанию и выбрать БД. Нажмите "Далее. Нажмите «Готово».
  13. Проверьте источник данных.
  14. Выберите таблицу, с которой связан триггер, и нажмите кнопку «ОК».
  15. Откройте таблицу в Access и изменить одну из записей (триггер не срабатывает на Insert, Update только)
  16. Выберите * из таблицы аудита
+0

Ну, очевидно, я идиот, потому что он работает. Я хотел попробовать его на другой учетной записи, но, конечно, никто с Access не был установлен, и я не могу создать новую учетную запись. Ugh, anyways должно работать, и окончательные результаты будут опубликованы в понедельник! Спасибо за помощь. – 2011-02-13 13:53:42

1

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

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

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

0

Моим решением было бы не позволить Access модифицировать данные со связанными таблицами.

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

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

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

Извлечь набор записей с помощью ADO с помощью подсказки NOLOCK, реализованной на сервере, и кэшировать эти данные в Access для локального отображения. Или получить одну запись и заблокировать только эту строку для редактирования.

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

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

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

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

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

  • Нет связанных вопросов^_^