2012-01-27 73 views
2

我的公司希望有大约100名销售人员(遍布全国各地)能够从excel运行存储过程并将数据返回到电子表格。如何安全地将Excel连接到SQL Server 2008?

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

我将在Excel中创建一个表单,用户可以通过按下命令按钮来刷新基于他们选择的参数的数据。

  1. 我该如何确保从excel连接到sql server是安全的?
  2. 我如何从Excel中运行存储过程?

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

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

但是,我希望您对此有所反馈。

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

+0

难道你不能使用Web界面吗?执行存储过程并返回csv/xls非常简单。从excel这样做似乎完全没有必要。 – user606723 2012-01-27 17:34:05

+0

@ user606723我完全同意你的观点,但是我的老板想用excel – 2012-01-27 17:37:09

+0

因为你将分发这个VBA,我会尽量使VBA尽可能的小而简单。一个好办法,就是让VBA从网页界面下载一个CSV = p。你也应该试着说服你的老板,在Excel中这样做是可怕的解决方案。 – user606723 2012-01-27 17:41:50

回答

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 

领带宏您的按钮,通过该表或输入框中设置你的价值观,以及火。但我会重复我的警告:以这种方式导致巨大的支持需求。如果人们想要提取自定义数据,那么他们对此非常关注。

+0

非常感谢你的回复。即时通讯不知道如果我可以做的意见,因为用户需要提供参数。这仍然是可能的一个观点?你是否暗示可以使用Windows认证来做到这一点? – 2012-01-27 19:31:50

+0

从您的连接不会被拦截的意义上说它是安全的。只要您对授予它们的权限非常小心(即只能在有限数量的DB对象上进行读取),从保持数据完整性的角度来看,它也是安全的。在大多数情况下,攻击比构建良好的Web架构更容易受到攻击,但只要用户谨慎小心,他们不应该受到攻击,即使他们只是受数据盗窃而非数据丢失。 – 2012-01-27 19:47:01

+0

视图允许您对参数进行硬编码,但不会,您将无法使用此配置提供参数。这就是为什么我提到了内置于Excel中的过滤和排序 - 受过教育的用户可以使用这些基本工具来提取他们需要的数据。 – 2012-01-27 19:48:26

1

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

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

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

+0

转储整个事情,非常感谢您的回复。所以是一个好工具来做到这一点? – 2012-01-27 21:52:18

+0

你知道,在理想的世界中,Excel不存在。我不是说没关系,但我做得更糟。公司部门没有适当的工具,但需要衡量关键流程的关键绩效指标。让我们简单地说它是有效的。就像你可以用瑞士军刀做晚餐一样。这不好,但它的作品。 – 2012-01-27 22:16:52