Разрешить пользователям прямые подключения к вашей базе данных довольно сложно. Во-первых, вы подвергаете себя атаке извне, поскольку учетные записи пользователей подвергаются риску чаще, чем хорошо изолированные учетные записи администраторов и служб. Тем не менее, учетная запись пользователя должна быть скомпрометирована, чтобы позволить злоумышленнику войти в систему, и у вас есть хорошая гранулярность управления, встроенная в 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
Привяжите этот макрос к своей кнопке, настройте свои значения с помощью листа или поля ввода и выполните запуск. Но я повторю свое предупреждение: такой путь ведет к огромным потребностям в поддержке. Если люди хотят извлечь пользовательские данные, они очень разборчивы в этом.