2011-06-01 239 views
0

我有这段代码我试图用来将数据从Excel导出到SQL数据库,当我尝试打开连接时收到此错误。Excel VBA - 连接到SQL数据库失败

[Microsoft][ODBC SQL Server Driver][SQL Server]Login failed for the user 's_accounting' 

这是我试图用(变灰已经当然变量)

ServerName = "192.168.168.34" 
DatabaseName = "Accountingnumbers" 
TableName = "Projects" 
UserID = "s_accounting" 
Password = "password123" 

Dim cn As ADODB.Connection 
Dim rs As ADODB.Recordset 

Set rs = New ADODB.Recordset  
Set cn = New ADODB.Connection 

cn.Open "Driver={SQL Server};Server=" & ServerName & ";Database=" & DatabaseName & _ 
    ";Uid=" & UserID & ";Pwd=" & Password & ";" 

请注意,我改名一些敏感的东西在里面的代码。另外,我设置使用此SQL查询数据库的权限:

use [db] 
go 
create user [myDomain\Groupname] for login [myDomain\Groupname] 
go 
grant select on schema::dbo to [myDomain\Groupname] 
go 

我试图用(s_accounting)连接的用户是一个域组,这是使用授权访问数据库的成员上面的查询。

任何想法或建议吗?我是否还必须为每个表具体授予权限?

回答

3

您正在混合两种身份验证方法 - 您创建/启用AD(域)用户,但您使用SQL身份验证访问服务器。

要么你需要与当前的域用户凭据来访问服务器(所谓的集成安全,也不能给出正确的语法ATM),或者你需要启用SQL服务器上的SQL身份验证(如果尚未启用)和创建用户“会计”(和其他需要的)与具体passowrd。

+1

啊哈,所以SQL身份验证是我通过vba宏代码使用的用户名和密码,那么吧?因此,如果我在连接字符串中使用trusted_connection = yes,则会使用当前登录的用户,而不是对吗?这是几个人应该连接到的数据库。那么这意味着我应该使用集成安全性并确保每个用户都是允许访问数据库的组的成员呢? – 2011-06-01 11:54:19

+0

似乎是正确的。请注意,我没有直接连接字符串的经验,因此这一切只是暗示:) – Arvo 2011-06-01 13:53:25