我的公司希望拥有大约100名销售人员(分布在全国各地),以便能够从excel运行存储过程,并将数据返回电子表格。
我们有server 2008。我需要找到一个安全的方法来做这件事。
我将在excel中创建一个表单,用户可以在其中按一个命令按钮,根据他们选择的参数刷新数据。
我发现这是非常好的信息:http://office.microsoft.com/en-us/excel-help/connect-to-import-sql-server-data-HA010217956.aspx
选择此选项可使用当前用户的
用户名和密码。这是最安全的方法,但当许多用户连接到服务器时,它会影响性能。
不过,我希望你能对此提出意见。
是的,销售代表确实有windows登录,但是如果他们实际上要输入指定的数据条件,然后将这些条件发送到存储过程中,然后从服务器获取数据,那么我可以使用这个解决方案吗?
发布于 2012-01-27 19:19:07
允许用户直接连接到您的数据库是很棘手的。首先,您暴露了自己受到外部攻击的风险,因为用户帐户比隔离良好的管理和服务帐户更频繁地受到威胁。话虽如此,用户帐户确实需要受到破坏,才能允许攻击者进入系统,如果每个用户都有自己的凭据,那么您的SQL Server中就有很好的控件粒度。
使用Excel本机接口与使用VBA或VSTA没有什么不同,这是过去十年来大多数开发人员所做的事情。这些方法和你的网络一样安全。我相信Excel本机功能也没有无关的引用,这对于维护来说特别好。主要的区别似乎在于执行任意查询的能力。为了安全和数据完整性的目的,这可能是最好的。
运行存储过程可能不是一个好主意,因为如果用户开始频繁地需要(想要)调整,您可以进入大量的支持需求。你能看看风景吗?Excel内置的过滤和排序功能非常强大。这将是我的第一个方法。
有几种方法取决于您的需要:
1-修改架构,允许数据库将数据绑定到单个用户。
2-将访问代码移动到与工作簿关联的VBA宏中。这是不建议的,但它将允许您直接使用ADO。如果这样做,请确保数据库端有可靠的安全配置,因为获得用户帐户访问权限的攻击者将能够做任何用户可以做的事情。
要走VBA路线,可以在VBA环境工具->引用中找到最新的Microsoft版本。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将该宏绑定到按钮,通过工作表或输入框设置值,然后启动。但我要重复我的警告:这样做会导致大量的支持需求。如果人们想要提取自定义数据,那么他们就会对它非常挑剔。
发布于 2012-01-27 21:40:11
与您链接的文章不同,我更愿意使用VBA脚本来引用ADO库和与技术SQL用户的正常连接字符串。
由于密码在本例中的连接字符串中,该技术用户除了执行存储过程之外没有其他权限。
如果你需要更多细节,请告诉我。
https://stackoverflow.com/questions/9037363
复制相似问题