如何安全地将Excel连接到SQL Server 2008?

我的公司希望有大约100名销售人员(分布在全国各地)能够从Excel运行存储过程并将数据返回到电子表格。

我们有SQL服务器2008年。我需要找出一个安全的方法来做到这一点。

我将在Excel中创build一个表单,用户可以按下一个命令button来根据他们select的参数刷新数据。

  1. 我怎样才能确保从Excel到SQL服务器的连接是安全的?
  2. 我如何从Excel中运行存储过程?

我发现这是非常好的信息: http : //office.microsoft.com/en-us/excel-help/connect-to-import-sql-server-data-HA010217956.aspx

Windows身份validationselect此选项以使用当前用户的Windows用户名和密码。 这是最安全的方法,但会影响许多用户连接到服务器时的性能。

不过,我希望你的意见。

是的,销售代表确实有Windowslogin,但是如果他们真的会input指定的数据标准,然后将标准发送到存储过程,然后从服务器获取数据,我可以使用此解决scheme吗?

允许用户直接连接到您的数据库是棘手的。 首先,你暴露自己从外部攻击,因为用户帐户比隔离好的pipe理和服务帐户更频繁地被入侵。 话虽如此,用户帐户确实需要让攻击者进入系统,并且如果每个用户都有自己的凭证,那么您将拥有内置在SQL Server中的良好控制粒度。

使用Excel本地接口与通过VBA或VSTA执行操作没有什么不同,这是大多数开发人员在过去十年左右的工作方式。 这些方法与您的networking一样安全。 我相信,Excel本地function的作品也没有外来的引用,这对于维护目的来说特别好。 主要的区别似乎在于执行任意查询的能力。 出于安全性和数据完整性目的,这可能是最好的。

运行一个存储过程可能不是一个好主意,因为如果你的用户开始经常需要(需要)调整,你可以进入大量的支持需求。 你可以做一个观点吗? Excel的内置过滤和sortingfunction非常强大。 那将是我的第一个方法。

有几种方法取决于你的需要:

1 – 修改模式以允许数据库将数据绑定到单个用户

2 – 将访问代码移入与工作簿关联的VBAmacros。 这不被推荐,但它可以让你直接使用ADO。 如果你这样做的话,确保你在数据库方面有一个可靠的安全configuration,因为攻击者可以访问用户的帐户,任何用户都可以做的事情。

要走VBA路线,在VBA环境的Tools-> References中find最新的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 

将这个macros绑定到你的button,通过表单或input框设置你的值,然后开火。 但我会重复我的警告:这样做会导致大量的支持需求。 如果人们想要提取自定义数据,那么他们会对此非常关注。

而不是你链接的文章,我宁愿使用VBA脚本引用ADO库和一个技术SQL用户的正常连接string。

由于在这种情况下密码将在连接string中,所以此技术用户应该没有执行存储过程的其他权利。

让我知道你是否需要更多的细节。