Предоставление пользователям прямого доступа к вашей базе данных сложно. Во-первых, вы подвергаете себя атаке извне, поскольку учетные записи пользователей скомпрометированы чаще, чем хорошо изолированные учетные записи администратора и службы. Сказав это, учетная запись пользователя должна быть скомпрометирована, чтобы позволить злоумышленнику войти в систему, и у вас есть хорошая степень детализации управления, встроенная в SQL Server, если каждый пользователь имеет свои собственные учетные данные.
Использование интерфейсов на основе Excel не отличается от того, как это делается с помощью VBA или VSTA, как это делало большинство разработчиков за последнее десятилетие или около того. Эти методы настолько же безопасны, как и ваша сеть. Я считаю, что функциональность Excel-native работает без посторонних ссылок, что особенно приятно для обслуживания. Главное отличие заключается в способности делать произвольные запросы. Для обеспечения безопасности и целостности данных это, вероятно, самое лучшее.
Запуск хранимой процедуры, вероятно, не является хорошей идеей, так как вы можете получить массовые требования к поддержке, если ваши пользователи начинают часто нуждаться в настройках. Можете ли вы сделать это? Встроенные функции фильтрации и сортировки Excel довольно мощные. Это был бы мой первый подход.
Есть несколько подходов, в зависимости от ваших потребностей:
1 - изменить вашу схему, чтобы базы данных, чтобы связать данные для отдельных пользователей
2 - переместить код доступа в VBA макрос, связанный с книгой , Это не рекомендуется, но это позволит вам использовать ADO напрямую. Убедитесь, что у вас есть надежная конфигурация безопасности на стороне базы данных, если вы это сделаете, поскольку злоумышленник, который получает доступ к учетной записи пользователя, сможет делать все, что может сделать пользователь.
Чтобы перейти по маршруту VBA, в среде VBA Tools-> Ссылки, чтобы найти последнюю версию 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
шнурок макроса кнопки, установите свои значения с помощью листа или поля ввода, и жарьте. Но я повторю свое предупреждение: «Идти таким образом ведут к массовым требованиям поддержки. Если люди хотят извлекать пользовательские данные, то они очень подробно описывают это.
Вы не можете использовать веб-интерфейс или что-то еще? Очень просто выполнить хранимую процедуру и вернуть csv/xls. Делать это от excel просто кажется совершенно ненужным. – user606723
@ user606723 Я полностью согласен с тобой, но мой босс хочет использовать excel –
Поскольку вы будете распространять этот VBA, я постараюсь сделать VBA максимально простым и простым. Хороший способ сделать это, было бы ... загрузить VBA CSV из веб-интерфейса = p. Вы также должны попытаться убедить своего босса в том, что делать это в excel - это ужасное решение. – user606723