如何将Excel安全地连接到sql server 2008?

时间:2012-01-27 17:18:57

标签: sql sql-server sql-server-2008 excel vba

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

我们有sql server 2008.我需要找出一种安全的方法来做到这一点。

我将在excel中创建一个表单,用户可以根据他们选择的参数按下命令按钮刷新数据。

  1. 如何确保从excel到sql server的连接是安全的?
  2. 如何从excel运行存储过程?
  3. 我发现这是非常好的信息:http://office.microsoft.com/en-us/excel-help/connect-to-import-sql-server-data-HA010217956.aspx

      

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

    但是,我希望您对此有所了解。

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

2 个答案:

答案 0 :(得分:3)

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

使用Excel原生界面与通过VBA或VSTA进行操作并没有什么不同,这是大多数开发人员在过去十年左右的时间里所做的。这些方法与您的网络一样安全。我相信Excel本机功能也可以在没有多余引用的情况下工作,这对于维护来说特别好。主要区别似乎在于能够进行任意查询。出于安全性和数据完整性的目的,这可能是最好的。

运行存储过程可能不是一个好主意,因为如果您的用户经常需要(想要)调整,您可以获得大量支持要求。你能看到景色吗? Excel的内置过滤和排序功能非常强大。这将是我的第一个方法。

根据您的需要,有几种方法:

1 - 修改架构以允许数据库将数据绑定到各个用户

2 - 将访问代码移动到与工作簿关联的VBA宏。建议不要这样做,但它允许您直接使用ADO。如果您这样做,请确保您在数据库端具有可靠的安全配置,因为获得用户帐户访问权限的攻击者将能够执行用户可以执行的任何操作。

要转到VBA路由,请在VBA环境Tools-> References中查找最新的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 :(得分:1)

而不是您链接的文章,我宁愿使用VBA脚本引用ADO库和普通连接字符串与技术SQL用户。

由于在这种情况下密码将位于连接字符串中,因此该技术用户除了执行存储过程之外没有其他权限。

如果您需要更多详细信息,请与我们联系。