Как мне безопасно подключить Excel к SQL Server 2008? - PullRequest
2 голосов
/ 27 января 2012

Моя компания хочет, чтобы около 100 их продавцов (распределенных по всей стране) могли запускать хранимые процедуры из Excel и возвращать данные в электронную таблицу.

У нас есть SQL Server 2008. Мне нужно найти безопасный способ сделать это.

Я создам форму в Excel, где пользователь может нажать командную кнопку, чтобы обновить данные на основе параметров, которые они выбирают.

  1. как я могу обеспечить безопасное соединение Excel с сервером SQL?
  2. как запустить хранимую процедуру из Excel?

я нашел, что это очень хорошая информация: http://office.microsoft.com/en-us/excel-help/connect-to-import-sql-server-data-HA010217956.aspx

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

однако я хотел бы, чтобы вы внесли свой вклад в это.

да, у торговых представителей есть логины Windows, но могу ли я использовать это решение, если они на самом деле будут вводить указание критериев данных, затем отправлять критерии в хранимую процедуру и затем получать данные с сервера

Ответы [ 2 ]

3 голосов
/ 27 января 2012

Разрешить пользователям прямые подключения к вашей базе данных довольно сложно. Во-первых, вы подвергаете себя атаке извне, поскольку учетные записи пользователей подвергаются риску чаще, чем хорошо изолированные учетные записи администраторов и служб. Тем не менее, учетная запись пользователя должна быть скомпрометирована, чтобы позволить злоумышленнику войти в систему, и у вас есть хорошая гранулярность управления, встроенная в SQL Server, если у каждого пользователя есть свои собственные учетные данные.

Использование собственных интерфейсов Excel ничем не отличается от использования через VBA или VSTA, как это делали большинство разработчиков за последнее десятилетие или около того. Эти методы примерно так же безопасны, как и ваша сеть. Я полагаю, что встроенная в Excel функциональность также работает без посторонних ссылок, что особенно удобно в целях обслуживания. Основное различие заключается в способности выполнять произвольные запросы. В целях безопасности и целостности данных это, вероятно, к лучшему.

Выполнение хранимой процедуры, вероятно, не очень хорошая идея, так как вы можете столкнуться с огромными требованиями к поддержке, если ваши пользователи часто начинают (хотят) настройки. Можете ли вы обойтись с видом? Встроенные в Excel возможности фильтрации и сортировки довольно мощные. Это был бы мой первый подход.

Есть несколько подходов в зависимости от ваших потребностей:

1 - измените вашу схему, чтобы база данных могла привязывать данные к отдельным пользователям

2 - переместить код доступа в макрос VBA, связанный с книгой. Это не рекомендуется, но позволит вам использовать ADO напрямую. УБЕДИТЕСЬ, что у вас есть надежная конфигурация безопасности на стороне базы данных, если вы сделаете это, поскольку злоумышленник, получивший доступ к учетной записи пользователя, сможет сделать все, что может сделать пользователь.

Чтобы перейти по маршруту VBA, в среде VBA Инструменты-> Ссылки, чтобы найти последнюю версию Microsoft ADO. Код VBA выглядит примерно так:

Dim Connection as ADODB.Connection
Set Connection = new ADODB.Connection
Connection.Open"Provider=SQLNCLI;Server=myServerAddress;Database=myDataBase;Trusted_Connection=yes;"
Dim command As ADODB.command
command.CommandText = "exec sp_something"
Dim Parameters(2) As ADODB.Parameter

Set Parameters(1) = New ADODB.Parameter
Parameters(1).Name = "field_name"
Parameters(1).Type = adVarChar
Parameters(1).Size = 50

Set Parameters(2) = New ADODB.Parameter
Parameters(2).Name = "field_name_2"
Parameters(2).Type = adVarChar
Parameters(2).Size = 50

Dim i As Integer
For i = LBound(Parameters) To UBound(Parameters)
    command.Parameters.Append Parameters(i)
Next i

Dim Records As ADODB.Recordset
Set Records = command.Execute

Привяжите этот макрос к своей кнопке, настройте свои значения с помощью листа или поля ввода и выполните запуск. Но я повторю свое предупреждение: такой путь ведет к огромным потребностям в поддержке. Если люди хотят извлечь пользовательские данные, они очень разборчивы в этом.

1 голос
/ 28 января 2012

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

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

Дайте мне знать, если вам нужно больше деталей.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...