2009-07-21 45 views
2

我需要通过OpenAPI连接到Ingres提供的demodb,这两个Ingres和C应用程序都运行在Windows上。我所做的:从C连接Ingres

  1. 在Ingres Network Utility中创建了一个名为“usernode”的“节点”。
  2. 在Ingres安装(名为“用户”密码“用户”)和Windows用户管理(相同信用)中创建了用户帐户。
  3. 在数据库中授予用户必需的权限。
  4. 在C代码中,我用IIAPI_CONNPARM结构调用了IIapi_connect()函数。 使用的部件: co_target = “usernode :: demodb的”, co_username = “用户”, co_password = “用户”

但是IIapi_connect()调用返回一个错误:

“用户提供的vnode作为数据库名称(vnode :: dbname)的一部分,但缺少该vnode的连接信息,请使用NETUTIL输入vnode的连接信息。“

任何人都知道一些奇怪的概念“节点”?

成功连接所需的最小步骤(在数据库管理和函数参数传递中)是什么?

回答

2

由于您的用户标识尚未添加到服务器,因此会出现以下错误。

"User provided a vnode as part of the database name (vnode::dbname), but connection information for that vnode is missing. Enter connection information for the vnode using NETUTIL."

我猜测传递的用户ID跨虚拟节点被定义(也称为虚拟节点)的定义,它是一个需要被添加到服务器上的用户列表中的用户。下面将通过命令行添加用户,更改用户名的用户名要添加:

对于Windows:

echo "create user USERNAME\g" | sql iidbdb 

对于UNIX/Linux的/ OS X:

sql iidbdb <<EOSQL 
create user USERNAME\g 
\q 

或者,您可以在您的连接中使用动态vnode,以便co_target指定所有连接信息(包括用户详细信息):

@server,protocol,listen_address[user,password]::database 

例如

@localhost,tcp_ip,II[ingres,secret]::iidbdb 

如果你想看到的安格尔OpenAPI的代码工作的例子来看看安格尔PECL扩展。

1
  1. 您必须在操作系统中创建一个带有密码的帐户。
  2. 您必须使用与操作系统中相同的用户名和密码创建节点。例如,不要忘记将“连接信息”块中的“远程节点”参数分配给“本地主机”(!)。这是一个真实的地址(!)。 “监听地址”参数在内部转换为端口。保留“II”。
  3. 在VDBA中,您可能已在ADMIN NODE内创建了一个“用户”帐户。所以,该帐户不应该有任何密码(!)。您可以通过输入现有密码复选框“删除旧密码”来删除它。
  4. 对于授权,通常要使用进程的凭证。
  5. 因此,只留下用户:: demodb参数co_target =“usernode :: demodb”。

有任何问题吗?